Windows 11でRoswellとAliveを使う

Common Lispの統合開発環境としてはEmacs上で動くSLIMEがとても具合が良いのですが、Visual Studio Codeを使いたくなるときもあります(Emacsのハードルが高いと思う人には「VSCodeからも使えるよ」と言えるほうがLISPをおすすめしやすい)。そして、VSCodeにはAliveという統合開発環境があります。

また、Common Lisp処理系はRoswellを使って導入するのがラクチンです。ふだん僕はmacOSを使っているのでLinuxとほぼ同じ方法で簡単に導入できるのですが、Windowsで(WSLを使わずに)Common Lispを使いたいときのために、導入方法のメモを残しておきます。最後にSLIME導入についても少しだけ書きました。

まず、コマンドプロンプトで使える様々なプログラムをインストールするのに便利なscoopを準備します。PowerShellで以下の2行を実行するとscoopコマンドが使えるようになります。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

次に、scoopを使ってRoswellをインストールします。

scoop install roswell

RoswellでCommon Lisp処理系をインストールします。デフォルトでは Steel Bank Common Lisp (SBCL) がインストールされます。自分の環境では C:\Users\marui\.roswell\src\sbcl-2.4.7-x86-64-windows\ にSBCLがインストールされました。

ros setup

ros runしてSBCLを立ち上げ、以下の4行でAliveに必要なパッケージをインストールします。

(ql:quickload "bordeaux-threads")
(ql:quickload "usocket")
(ql:quickload "cl-json")
(ql:quickload "flexi-streams")

VSCodeを立ち上げてExtensionからAliveをインストールし、setting.jsonに以下を追加します。

"alive.lsp.startCommand": [
  "C:\\Users\\marui\\scoop\\apps\\roswell\\current\\ros.exe",
  "run",
  "--eval",
  "(require :asdf)",
  "--eval",
  "(asdf:load-system :alive-lsp)",
  "--eval",
  "(alive/server:start)"
]

これでCommon Lispのファイルを開くとAliveが起動するようになります。Alt+Shift+Eでインライン評価、Alt+Shift+EnterでREPLに送って評価されます。Control+Shift+Pでコマンドパレットを呼び出すとMacro Expand 1やMacro Expand Allが検索・実行でき、マクロがin-placeに展開されます。

もしSLIMEも使いたい場合はコマンドプロンプト上で ros install slime を実行し、~/.emacs.d/init.el(load (expand-file-name "C:/Users/marui/.roswell/helper.el")) を追加します。