figwheel を IntelliJ + Cursive で設定する

[figwheel](https://github.com/bhauman/lein-figwheel) は ClojureScript の開発がモダンになる Leiningen プラグインです。
様々なエディターから使えますが、今回は IntelliJ で設定してみます（といっても[公式のチュートリアル](https://github.com/bhauman/lein-figwheel/wiki/Running-figwheel-in-a-Cursive-Clojure-REPL)をなぞるだけです）

## IntelliJ と Cursive の準備
IntelliJ には無料で使用できるコミュニティーエディションがあり、Cursive には無料で6ヶ月使用できる個人ライセンス(更新可能)があります。

- まず Cursive の[サイト](https://cursive-ide.com/buy.html)から `Non-Commercial` ライセンスを取得します。

![スクリーンショット 2017-07-04 2.40.19.png](https://qiita-image-store.s3.amazonaws.com/0/4428/8518af35-dd9c-4531-c477-dc1fde9365d3.png "スクリーンショット 2017-07-04 2.40.19.png")

- 必要事項を入力するとライセンスキーが記載されたメールが送られてきます。
- IntelliJ の Plugin の設定から Cursive をダウンロードして IntelliJ を再起動します。
- 再起動後、Cursiveがライセンスキーの入力を促す画面を表示するので、メールに記載されたライセンスキーを入力します

参考: https://cursive-ide.com/userguide/

## Leiningen のインストール
- [公式サイト](https://leiningen.org/#install)からインストールする
	- Mac の場合は `brew install leiningen` でも可能

- あとは `lein new figwheel figwheel-test` とすれば、自動でテンプレートを取得し figwheel が有効になったプロジェクトの雛形を生成してくれる

## IntelliJ/Cursiveの設定
- `project.clj` を以下の通り編集する
	- `figwheel-sidecar` を依存関係に加える
	- `lein-figwheel` をプラグインから削除する

```clojure
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [org.clojure/clojurescript "1.9.671"]
                 [org.clojure/core.async  "0.3.443"
                  :exclusions [org.clojure/tools.reader]]
                 [figwheel-sidecar "0.5.10"]] ; <- この行を追加する



  :plugins [[lein-figwheel "0.5.10"] ; <- この行を削除する
            [lein-cljsbuild "1.1.5" :exclusions [[org.clojure/clojure]]]]
```


- `scripts/repl.clj` ファイルを追加する
	- 以下のファイルを scripts ディレクトリ以下に配置する

```
(use 'figwheel-sidecar.repl-api)
(start-figwheel!) ;; <-- fetches configuration
(cljs-repl)
```

- `project.clj` の `:source-path` に `scripts` を追加する

```
:source-paths ["src" "scripts"]
```

- IntelliJ で REPL の設定を行う
	- `Run > Edit Configuration` から Local REPL を設定する

![スクリーンショット 2017-07-04 1.56.05.png](https://qiita-image-store.s3.amazonaws.com/0/4428/8276c328-8ea5-34b6-4a30-aa26a82f3c4a.png "スクリーンショット 2017-07-04 1.56.05.png")

- Local REPL を以下のように設定してOKをクリック

![スクリーンショット 2017-07-04 1.57.31.png](https://qiita-image-store.s3.amazonaws.com/0/4428/f008c9fe-ed17-f5b0-7b48-54105bf0cce3.png "スクリーンショット 2017-07-04 1.57.31.png")

## REPL に接続する
- 画面右上のスタートボタンから REPL を起動できます

![スクリーンショット 2017-07-04 2.00.03.png](https://qiita-image-store.s3.amazonaws.com/0/4428/5fdb65b5-09f6-c9ff-2bad-e49740295ba5.png "スクリーンショット 2017-07-04 2.00.03.png")

- REPL上で `(js/console.log "hello from console")` などと打ち込んで実行すると、以下のように chrome のコンソールに反映されます。

![スクリーンショット 2017-07-04 0.37.28.png](https://qiita-image-store.s3.amazonaws.com/0/4428/f3984e78-f6ac-0af7-1cd0-fcd25437d893.png "スクリーンショット 2017-07-04 0.37.28.png")

- また、ソースコードを編集し保存した結果も、ブラウザ側に自動的に反映されます
	- 試しに `core.clj` に `(js/alert "hello")` と追記し保存すると、以下のように自動的に反映されます

![スクリーンショット 2017-07-04 0.27.56.png](https://qiita-image-store.s3.amazonaws.com/0/4428/e9b9849d-ba65-54df-3a26-3a259e459348.png "スクリーンショット 2017-07-04 0.27.56.png")

以上で設定は完了です。

## その他
figwheel は `lein-cljsbuild` という ClojureScript のビルドを自動化してくれるプラグインを同時に利用しています。
それに関しては以下の記事が参考になりました。

[ClojureScript 開発時の project.clj を理解する](http://qiita.com/ponkore/items/ea91e8b5b952a89a64f2)

## 参考文献
- [cljsbuildオプションあれこれ](http://zehnpaard.hatenablog.com/entry/2016/11/06/064330)
- [figwheelの最小限設定](http://zehnpaard.hatenablog.com/entry/2016/11/09/065229)