Emacs 27.2をWindows 10のPCにインストールし、ついでにScalaの開発環境を再整備したり等してみた。

By | 2021年10月26日

はじめに

ROG Phone 5(ZS6673KS)にインストールしたTermuxで…

Emacs 27.2がインストールできたので、PC(OS: Windows 10)にも従来使っていたEmacs 26.3に代えてEmacs 27.2をインストールすることにしました。

しかし…

Emacsを交換してみたところ、Scalaの開発環境が動かなくなってしまったので、Emacs 27.2上で再構築することにしました。

また、Windows 10のEmacsで絵文字を表示するために、Symbolaフォントをインストールしてみました。

スポンサーリンク

Windows 10のPCへのEmacs 27.2のインストール

以下の手順でWindows 10のPCに対してEmacs 27.2をインストールします。

  1. Windows用のEmacs 27.2を GNU Emacs の公式サイトからダウンロードします。EXE形式のインストーラと展開して適当なディレクトリに置くだけのZIPファイルとが選択できますが、no-depsでない方のZIPファイルをダウンロードします。
  2. ZIPファイルがダウンロードできたら適当なディレクトリに展開します。例えば、Cドライブの直下で展開すると…

    のような感じに展開できます。
  3. ここからはZIPファイルをCドライブの直下に展開したものとして話を進めていきます。上図のbinのアイコンをダブルクリックします。
  4. Emacsの実行ファイルやライブラリ等が現れます。その中から “runemacs.exe” というファイル(下図の赤矢印)を探し出して、デスクトップ上にショートカットを作成します。
  5. ショートカットを作成したら、そのショートカットを右クリックして「プロパティ」を選択します。
  6. 「ショートカット」のプロパティ画面が表示されますので、「ショートカット」タブ(下図の赤矢印)をクリックします。
  7. 下図のように画面が切り替わりますので、「作業フォルダー」(下図の(a))にホームディレクトリを入力し、「適用」ボタン(下図の(b))をクリックします。
  8. デスクトップ上のrunemacsのショートカットをクリックして、Emacsが起動することを確認します。

Scalaの開発環境の再構築

前節の手順でEmacs 27.2が起動するところまでは漕ぎ着けたのですが、Scalaのソースコードを読み込もうとするとエラーバッファを連発してくれるようになってしまいました。

そこで、以前書いた手順を参考にしつつ、Scalaの開発環境の構築のために必要なライブラリやソフトウェアをアップデートしてみることにしました。

Emacs Lispのパッケージの更新

MELPA等からインストールしたEmacs Lispのパッケージを更新します。更新の結果、同一のパッケージでバージョンの異なるものがホームディレクトリの下の.emacs.d/elpaディレクトリの下に存在することとなった場合には、最新のものを残してその他のバージョンのパッケージはすべて削除します。

最終的には、以下のパッケージを更新しています。

  1. lsp-metals
  2. lsp-modes
  3. lsp-treemacs
  4. lsp-ui
  5. scala-mode
  6. dash
  7. dap-mode
  8. treemacs

また、以下のパッケージは削除しています。

  • dash-functional

GPGの鍵を読み込まない問題への対応

msys2でビルドされたEmacs 27.1以降のEmacsはディレクトリの設定方法に問題があるらしく、GPGの鍵の読み込みに失敗します。


スポンサーリンク

そこで、このあたりの記事を参考に以下の設定を.emacs.d/init.elに追加しました[2]。

; Workaround for Emacs 27.x
(setq package-gnupghome-dir “/Users/pandanote/.gnupg”)

 
“pandanote”の部分はユーザ名です。

なお、ドライブレターを設定するとCドライブの下に”c”という名前のディレクトリを作ってしまうことがあるようなので、ドライブレターは省きました。

Coursierの最新版のインストール

Coursierのバージョンがいつの間にか2.0になっていたので、最新版(2.0.13, この記事を最初に書いた時点(2021年10月)の情報です。)をインストールすることにしました[4]。

コマンドプロンプトから以下のコマンドを実行し、Coursierの最新版のNative launcherをインストールします[1]。

> bitsadmin /transfer cs-cli https://git.io/coursier-cli-windows-exe “%cd%\cs.exe”

 
URLの最後の”-exe”の部分が”.exe”だと思い込んでしまっていて、小一時間ハマりました。

Metalsのインストール

スポンサーリンク

前節のコマンドを実行すると、カレントディレクトリに”cs.exe”という名前の実行ファイルが生成されます。


スポンサーリンク

そこで、以下のコマンドを実行し、metals-emacsをビルドします。

> cs install metals-emacs

 
「metals-emacsのインストール先のディレクトリがPATHに含まれてないよ。」というWarningが表示されるかもしれませんが、Path環境変数を確認したところ含まれていることがわかったので、上記のWarning自体は無視します。

init.elの設定の見直し

ここでEmacsを再起動してみたのですが、この段階でもScalaのプログラムを開こうとするとエラーバッファが表示されてしまう現象が発生していました。

「最早これまでか。無念じゃ。」

などと思いつつ、Metalsのページをよく読んでみたところ、

「Metalsと衝突する機能はdisableにした方がいいかもしれないよ。特にensimeとか(超意訳)。」

と書いてあるのが目に入ったので、ensime関連の設定をinit.elから除去したところ…


スポンサーリンク

動きました!!

metalsのサーバを起動するまでに数秒~10秒程度かかりますが、動きました。

ツールバーのすぐ下にさり気なく配置されているパンくずリストが素敵です。✨

なお、Metalsのための設定についてはMetalsのページに記載の設定をinit.elにほぼそのまま追加しています(lsp-prefer-flymakeは変数自体がなくなってしまったようなので、lsp-prefer-flymakeをnilに設定している行は削除しています)。

Scalaのプロジェクト側の設定変更

Scalaの開発環境が再構築できたところで、Scalaのプロジェクト側でも以下の手順で設定を変更します(変更しなくても使えますが、運が悪いとScalaのソースコードを編集中に Metals Doctor に「Scalaのバージョンが古い!!」と怒られる場合があります[3])。

  1. Scalaのプロジェクトのbuild.propertiesで設定しているsbtのバージョンを最新のものに変更します。
    sbt.version=1.5.5

     

  2. plugins.sbtのbloopの定義を最新のものに更新します。
    addSbtPlugin(“ch.epfl.scala” % “sbt-bloop” % “1.4.10”)

     

  3. コマンドプロンプトを開いて、Scalaのプロジェクトのディレクトリにカレントディレクトリを変更してsbtコマンドを実行し、最新のビルド環境をダウンロードします。
  4. sbtのコマンドプロンプトを終了させます。
  5. project\projectディレクトリを削除します。

Symbolaフォントのインストール

かなり前にFedora上のEmacsで絵文字を使うための設定の方法についての記事を書きました。

上記の記事を書いた際にはWindows上のEmacsでは絵文字を表示するための設定を行っていませんでした。

Windows上のEmacsでは絵文字が使えなくても今まではあまり不便だとは思っていなかったのですが、sbtでScalaのプロジェクトのビルド作業を行う際に、ビルドターゲットによっては「古いScalaが使われることがあるから早くアップデートしろ」とMetals Doctorで怒られることがあり、さらにその表示画面には絵文字が多用されていて、それらが表示できないと悲しい気持ちになります。

そこで、この際Windows 10上のEmacsでも絵文字を表示できるようにしてみることにしました。

…といってもやり方は極めて簡単で、SymbolaフォントをWindows 10のPCにインストールするだけです。

Emacs側での設定は(IMEやコピペ等の方法で無理矢理入力するだけなら)不要です。

Symbolaフォントをインストールすると…

のような感じで絵文字をEmacs上で表示できます。🐼😸

そして、絵文字が表示できるようになった後に限って再構築作業の他のタスクが捗ってしまい、Metals Doctorにはあまり怒られなくなったりします。

古いバージョンのEmacsの削除

あからさまな不具合がなくなったところで、古いバージョンのEmacsが誤って使用されてしまうのを防ぐため、古いバージョンのEmacs (Emacs 26.3) は削除してしまいます。

これもZIPファイルからインストールしたものですので、エクスプローラーからディレクトリごと削除すれば削除が完了できます。

ここで夕食です。

ようやく安心して夕食を食べることができます。🍽


ベーコンがいい感じに焼けてカリカリになりました。

スポンサーリンク

まとめ

結果的には最初に行ったensimeの中途半端な設定を削除せずに放置していたことがScalaの開発環境が動かなかった原因でしたが、その結論にたどり着くまでにかなり試行錯誤してしまいました。

とりあえず動きそうな構成にはなりましたので、Scalaのプログラムをいくつか書きつつ様子を見るつもりです。

この記事は以上です。

References / 参考文献

  1. Installation
  2. GPG No Public Key
  3. Emacs Metals complains about using scala 2.10.7 when the project is not using it
  4. Installation · Coursier