はじめに
関数型言語を勉強してみたいと思ったのでClojureを触ってみることにした。
emacsは使ったことないが、Spacemacsはvimモードも選べるらしいので開発環境はSpacemacs。
OSはLinuxがいいらしいが、Windows10(64bit)でやってみる。
※JDKとgitはインストール済み。
※java 11.0.1
emacsのインストール
「GNU Emacs」の公式ダウンロードページからダウンロードする。
https://www.gnu.org/software/emacs/download.html#windows
Windows版の最新バージョンを選択する。
・Windows版(64bit)のzipファイル「emacs-27.1-x86_64.zip」をダウンロードする。
・解凍したフォルダを任意の場所に配置し、binフォルダにパスを通しておく。
・今回は(C:\)にemacsというフォルダを作成して解凍した中身を配置した。
・環境変数「HOME」にホームディレクトリを設定しておく
※emacsの設定ファイルである「.emacs.d」の場所をホームディレクトリにするため
※HOMEを設定せずにemacsを起動すると"C:\Users\ユーザ名\AppData\Roaming"に.emacs.dが作成され、ここのファイルを読み込む設定になる。
Spacemacsのインストール
・ホームディレクトリに移動し、Spacemacsの公式サイトに記載のGitコマンドを実行する。
C:\>cd C:\Users\(ユーザ名)
C:\Users\(ユーザ名)>git clone https://github.com/syl20bnr/spacemacs .emacs.d
・emacsを起動する。
C:\Users\(ユーザ名)>emacs
・起動後すると「vimスタイルかemacsスタイルか」、「ディストリビューションはスタンダードかミニマルか」聞かれるので、vimスタイル、スタンダードを選択(エンターキーをそのまま2回押すだけ)
・選択が終わると必要なパッケージのインストールが開始される(数分かかる)
※一度エラーが出たけど再起動したらエラーは出なくなった。
Leiningenのインストール
Clojureのビルドツールである「Leiningen」を公式ダウンロードページからダウンロードする。
https://leiningen.org/
・ページ内のlein.batを右クリック→名前を付けて保存 で任意の場所に保存。
・「C:\leiningen\bin」フォルダを作成して、lein.batを移動する。
・「C:\leiningen\bin」フォルダにパスを通しておく。
・インストールコマンドを実行
C:\leiningen\bin>lein.bat self-install
・ダウンロードが完了したら確認
・versionが表示されればインストール完了
C:\leiningen\bin>lein version
・spacemacsでnREPLを利用するために、「C:\Users(ユーザ名).lein\profiles.clj」 を作成し、CIDER用のnReplミドルウェアのプラグイン定義を設定する。
{:repl {:plugins [[cider/cider-nrepl "0.25.8"]]}}
・replを起動して確認
・user=> と表示されればOK
C:\leiningen\bin>lein repl
設定ファイルの編集
・インストールが完了したら、設定ファイルの編集をする。
・Spaceキー(SPC) f e d で設定ファイルを開いてdotspacemacs-configuration-layersリストにclojureを追加する。
・以下は任意で追加
・Ctrl-h がバックスペースになるようにする。
・cider-jack-inでウィンドウ分割とREPLバッファ への切り替えを行う
(keyboard-translate ?\C-h ?\C-?)
(defun dotspacemacs/user-config ()
(setq cider-repl-pop-to-buffer-on-connect t))
・追加して設定ファイルを保存したら、SPC f e R で設定を反映する。(パッケージのインストールが行われる)
動作確認
・動作確認用にspacemacsで「Test.clj」ファイルを作成する。
・SPC m s i → cider-jack-in-clj を選択してエンター → y or n を聞かれるので yを押下する
・replが起動されたら、コードを書いて動作確認する。
・「Test.clj」に関数定義を書いて、ロードして実行してみる。
・動作確認できたので、簡単なアプリ等を作成して勉強しようと思う。