26+SBT-1.3.0-RC1でScalaの統合開発環境のようなものを整備してみる。時代の最後尾を往くWebサイト。26+SBT-1.3.0-RC1でScalaの統合開発環境のようなものを整備してみる。目次はじめに構築の手順ScalaのCUIによる開発環境のセットアップ。26のインストール及びセットアップENSIMEを使用するためのScalaプロジェクト側における設定と動作確認。EmacsからSBTが起動できない件まとめスポンサーリンクはじめにこの記事を書いて以来、各方面への説明に追われてしまい、しばらく触るための時間的及び精神的な余裕が取れていなかったScalaですが、そろそろ再開できる見通しとなりました。Scalaの利用を再開するにあたり、Eclipseを使った開発環境の準備と並行して、Emacsを使った開発環境を準備できないか検討することにしました。26並びにSBT-1.3.0-RC1を使ってScala言語による統合開発環境のようなものを構築する方法について書いていきます。構築の手順Scala言語による統合開発環境のようなものを構築するには、以下の2種類の作業が必要です。ScalaのCUIによる開発環境のセットアップ。Emacsのインストール及び関連するLispパッケージのインストール並びにセットアップ。ScalaのCUIによる開発環境のセットアップ。10におけるScalaのCUIによる開発環境のセットアップは、以下の手順で行います。インストール開発環境のセットアップのために必要なソフトウェアのインストールは、以下の手順で行います。JDKをインストールします。11をインストールしました。インストールのいきさつやインストールの具体的な方法についてはこちらをご参照ください。ここのページからSBTのインストール用パッケージをダウンロードします。今回の作業ではバージョン1.3.0-RC1のMSIインストーラをダウンロードしました。手順2でダウンロードしたMSIインストーラを起動し、インストールを行います。この手の開発用のツールのインストール時の今までの経験上、インストール先のディレクトリ名にスペースが入っていると大変な目に遭うことが多いので、インストール先のディレクトリ名は以下のように指定します。c:\sbtSBTのインストールを行います。動作確認ScalaのCUIによる開発環境のセットアップが終わったら、以下の手順で動作確認をします。以下のようなディレクトリ階層を持つ動作確認用のプロジェクト(HelloWorldプロジェクト)を作成します。+-build.sbtbuild.sbtはsrcディレクトリと同一のディレクトリ階層(HelloWorldディレクトリの直下)に作成します(下図)。main.scalaには以下のような動作確認用のコードを書きます。build.sbtにはビルド時の設定を以下のような感じで書きます。SBTの動作確認用なので、SBT-1.3.0-RC1で使用可能かつ必要最低限の設定としています。scalaVersionにはこの記事を最初に書いた時点(2019年5月)で入手可能なScalaの最新バージョンを指定していますが、versionの設定は適当です。“2.12.8”コマンドプロンプトを開き、cdコマンドでカレントディレクトリをHelloWorldディレクトリの下に変更してからsbtコマンドを実行します。sbtのコマンドプロンプトが起動しますので、以下のように入力すると、main.scalaのコンパイルが実行されます。compile以下のように表示されるとコンパイルは成功です。...sbt:helloworld>sbtのコマンドプロンプトからrunコマンドを実行すると、コンパイルされたコードが実行されます。以下のように実行されると動作確認は成功です。26をインストールします。26.2の日本語IME対応パッチ適用版のバイナリファイル(ZIPファイル)をダウンロードします。PC上の適当なディレクトリの下で手順1でダウンロードしたZIPファイルを展開します。手順2で”emacs-26.2′′というディレクトリが作成されますので、”emacs-26.2\bin”の下にある”runemacs”のショートカットをデスクトップなどの実行しやすい場所に作成します。お好みでショートカットのプロパティを開き、「作業フォルダー」の設定を変更します。本Webサイトの管理人たるpandaは自分のホームディレクトリを作業フォルダーに通常設定しています。Emacsのパッケージアーカイブのセットアップスポンサーリンクインストールが終わったら、以下の手順でEmacsのパッケージアーカイブの設定を行います。ホームディレクトリの下の”.emacs.d/init.el”に以下の記述を追加します(“.emacs.d/init.el”がない場合には作成します)。“http://orgmode.org/elpa/”)))上記の設定のうち、6行目のorgmodeについての設定はお好みで追加しておきます(設定しなくてもこの記事の範囲内においては影響ありません)。Emacs)を以下の手順でインストールします。package-install”と入力します。”M-x”とはEscキーを押した後で”x”キーを押すことを意味します(以下同じ)。Enterキーを押すと、ミニバッファに以下のように表示されますので、”use-package”と入力しEnterキーを押します。byte-compileが完了後にミニバッファに”Done”と表示されれば、use-packageインストールは成功です。ホームディレクトリの下の”.emacs.d/init.el”に以下の記述を追加し、Emacsを再起動します。melpa-stable)すると、ENSIMEがインストールされます。package-list-packages”と入力してEnterキーを押すとpackage-archivesに指定したアーカイブのリストにあるパッケージのインストール状況を確認することができます。確認例を下図に示します。ディレクトリ構造はEmacs内でツリー表示ができた方が都合がよいので、ホームディレクトリの下の”.emacs.d/init.el”に以下の記述を追加し、Emacsを再起動します。t)上記の設定を追加することにより、F8キーを押すとバッファが2分割されて、左側のバッファにディレクトリ構造のツリービューが現れます。このツリービューはもう一度F8キーを押すとバッファごと消去できますので、必要な時だけ表示させることができます。ENSIMEを使用するためのScalaプロジェクト側における設定と動作確認。前節までの手順はEmacsのインストール時に1回だけ行えばよい手順ですが、Scalaプロジェクト側では以下の手順をプロジェクトごとに行います。build.sbtに以下の行を追加し、ENSIMEで使用するScalaのバージョンを指定します。“2.12.8”スポンサーリンクHelloWorldディレクトリの直下に”.ensime”という名前のファイルが生成されたことを確認します。これはENSIMEのための設定ファイルです。Emacsを起動し、カレントディレクトリをHelloWorldディレクトリにします。cd”と入力してEnterキーを押した後でディレクトリ名をミニバッファに入力してEnterキーを押すと行うことができます。ensime”と入力してEnterキーを押すと、ENSIMEサーバが起動してEmacsはクライアントとしてENSIMEサーバとの間の接続を確立させます。ENSIMEサーバとの間の接続が確立するとその旨を通知するメッセージが一瞬だけ表示されて、以下の画面が表示されます。Scalaのソースコードを開き、構文チェックやメソッド名の補完が機能することを確認します(下図)。10上のEmacsでScalaのコードを編集できる環境を整えることができました。開発環境を構築しようとするも、Emacsからsbtの起動時にterminalの設定ができていない件(赤矢印)。26.2でも同様の結果となってしまいました。10上においては、コード等の編集はEmacs+ENSIMEコンパイル及び実行等はコマンドラインのSBTというように使い分けるしかなさそうです。́・ω・`)スポンサーリンクまとめEmacsの本格的なカスタマイズはこの記事を最初に書いた時点(2019年5月)から過去に遡ること10年以上行っていなかったのですが、MELPAのようなパッケージアーカイブができていたことには正直驚きました。Mavenみたいな使い方ができそうです。IDEAのような大型の統合開発環境(IDE)の最新のバージョンへの追従性には少々不安があるので、それらと比較して軽量であるEmacsで統合開発環境のようなものが実現できるのは助かります。Emacsを使うことにより、Java界隈の喧騒から暫し離れて、気楽にコードを書くことができそうです(※個人の感想です)。Plugin)を使ってみる。絵文字を使いたいと思ったらいろいろと設定しまくることになったので、メモしてみた。JARファイルを作ったところ、パスの文字列長が長すぎてクラスファイルが不足していて実行できなかった件。HomeのEmacs(26.2)からrgrepを実行したときに、ripgrepが起動されるように設定してみた。11をインストールしてSikuliX-1.1.4の動作確認をしてみた。Legendre多項式の直交性を最高次の項の係数だけを計算することにより証明してみた。このウィジェットの背景が黒くなってしまうことがある理由についてはこちらをクリック。AviUtlgimp-2.10.sikuliGIMP-2.10を使ってスクリーンショットを取得するためのSikuliXのスクリプト。SikuliX-2.0.1+GIMP-2.10.10の組み合わせでのみ動作確認を行っています。SolrのDataImportHandlerで7-zipで圧縮されたファイルのインポートをサポートするためのJARファイル。struts2ajaxtestStruts2でAjaxを使用するWebアプリケーションのサンプル。LANを発行するためのスクリプトのサンプル(Fedora用)。8用のNEologd入りkuromojiをビルドするためのパッチ。8.1→10にアップグレードしてみたところ、途中で電池が切れて復旧に手間取った件。APIを呼び出し、Bitcoinの価格を取得するPython3のプログラムを書いてみた。httpからhttpsへのリダイレクトを削減するためのnginxの設定。YouTube↓のボタンを押していただくとチャンネルを登録できます。見解等とは一切関係ありません。