LoginSignup
1
0

Clojureの環境構築

Posted at

Clojure環境構築

概要

spec, malliを試したかったので、Clojureの環境をMac上に構築した際の備忘録です。

インストール

以下の記事が詳しいので、そちらを参照してください

ツール

  • Leiningen (必須)
    • Clojureのプロジェクト管理ツール
brew install leiningen
  • Jocker (必須ではない)
    • Clojureを実行するための軽量なインタプリタ
brew install candid82/brew/joker

VSCode拡張機能

VSCodeの拡張機能は以下2つをインストールする

settings.jsonに以下を追加する
(Command+Shift+P でパレットを開いて "settings" と入力すると見つかる)

{
  〜〜(省略)〜〜
  "[clojure]": {
    "editor.defaultFormatter": "pedrorgirardi.vscode-cljfmt",
    "editor.wordSeparators": "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?",
    "editor.formatOnSave": true
  }
}

コマンド

Calvaのコマンドは以下リンクを参照

kyebinding.jsonで追加設定する場合のCalvaコマンドのキー名はVSCodeの拡張機能ページや以下を参照

よく使うコマンド

  • Ctrl+w
    • カーソル下の関数などを対応する括弧まで選択
  • Ctrl+Enter
    • 選択箇所、もしくはカーソル下をREPLに送信して評価する
    • Ctrl+wで特定の処理を選択してCtrl+Enterで評価するという使い方になる
  • Alt+Enter
    • カーソル下をREPLに送って評価する
    • 関数などの全体を選択状態にしていなくても全体を評価してくれる
Ctrl+wの変更

vimバインディングで実行しているので、Ctrl+wは直前の単語の消去であってほしい。
デフォルトのキーバインドを変更する場合は以下のように設定を追加すれば良いです。

keybindings.jsonを開いて以下の設定を追加する
(Command+Shift+P でパレットを開いて "keybind" と入力すると見つかる)

    {
        "key": "ctrl+w",
        "command": "deleteWordLeft"
    },
    {
        "key": "alt+w",
        "command": "paredit.sexpRangeExpansion"
    }

プロジェクトの作成

まず以下の方法でLeiningenのプロジェクトを作成します

lein new sample

メインファイルはsrc/sample/core.cljになるので、このファイルをベースとして修正していきます。

(ns sample.core)

(defn foo
  "I don't do a whole lot."
  [x]
  (println x "Hello, World!"))

(defn -main []
  (println "OK"))

REPLによる実行

REPLにより実行する場合は、まずREPLサーバを起動する必要があります。
以下のいずれかの方法で起動します。

  • VSCodeの左下のREPLと書いてあるボタンをクリックする(10秒ぐらいかかる)

  • コマンドパレットから Start your project with A REPL and connect (a.k.a. Jack-in)を選択する

    • Command + Shift + P でコマンドパレットを起動

REPLの部分の色が変わったら利用可能となります。

実行方法

以下のいずれかの方法で実行することになります。

  • REPLから実行
  • コマンドから実行
  • スクリプトファイルで実行(Jokerなし)
  • スクリプトファイルで実行(Jokerあり)

REPLから実行

先ほど起動したREPLに対してコードを送信して実行する形式です。
先程のcore.cljファイルに以下の内容を追記します。

(println "OK")

printlnの部分にカーソルをあわせて、Alt+Enterを押下すると以下のように表示されます。

clj꞉sample.core꞉> 
; OK
nil

コマンドから実行

プロジェクトのホームフォルダに移動して以下を実行します。

# ホームフォルダに移動
cd sample
# -main関数を実行する方法
lein run -m sample.core
# foo関数を実行する方法
lein run -m sample.core/foo 10

-main実行時に-mによる名前空間の指定を省略したい場合はproject.cljmainの設定を追加すると良いです。

(defproject sample "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
            :url "https://www.eclipse.org/legal/epl-2.0/"}
  :main sample.core
  :dependencies [[org.clojure/clojure "1.11.1"]]
  :repl-options {:init-ns sample.core})
# -main関数を実行する方法
lein run

スクリプトファイルで実行(Jokerなし)

この方法は起動までが遅いので非推奨です

Clojureの公式サイトから最新版の以下の3ファイルをDLします。

  • clojure-1.11.1.jar
  • core.specs.alpha-0.2.62.jar
  • spec.alpha-0.3.218.jar

私の環境では以下のように/opt下にディレクトリを作成して置きました。

sudo mkdir /opt/clojure
sudo chown -R ユーザ名 /opt/clojure
mv clojure-1.11.1.jar /opt/clojure/
mv core.specs.alpha-0.2.62.jar /opt/clojure
mv spec.alpha-0.3.218.jar /opt/clojure

以下のスクリプトファイルを作成します

#^:shebang '[
  CLOJURE_HOME=/opt/clojure
  CP1=$CLOJURE_HOME/clojure.jar
  CP2=$CLOJURE_HOME/core.specs.alpha-0.2.62.jar
  CP3=$CLOJURE_HOME/spec.alpha-0.3.218.jar
  exec java -cp $CP1:$CP2:$CP3 clojure.main "$0" "$@"
]

(println "OK")

スクリプトファイルで実行(Jokerあり)

以下のファイルを ok.clj として作成します。
joker ok.clj によりファイルの中身を実行することができます。

(println "OK")

Tips

REPLに接続すると lein command not found と言われる

以下に該当するTrouble Shootingがあるが、これが原因ではなかった

VSCodeのCalva拡張機能に更新があったらしく、左下の歯車はから更新を実行したら接続するようになった...

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0