何も考えずに Emacs を使って Clojure の Luminus webframework を使う

## シリーズバックナンバー
1. [何も考えずに Emacs を使って Clojure の Luminus webframework を使う](https://qiita.com/MeguruMokke/items/fbd1e7ff753702195895)
2. [Luminus のサーバ側で手っ取り早くAPIを試したいメモ書き](https://qiita.com/MeguruMokke/items/cda60091ca09fa481450)
3. [Luminus で re-frame 、ping-pong ボタンを追加してみるメモ書き](https://qiita.com/MeguruMokke/items/0ae124ab4d507667fbab)
4. [Luminus で GCE 上の API を叩いてみる](https://qiita.com/MeguruMokke/items/da6948eafac6f99d539c)


# 急募：なんか見える Web サーバ建てたい
先日大学にてとある課題をチキンレースしまして、その際にこのような要求が生まれました。
具体的に何がしたかったかと言いますと、何らかの機能を果す機械学習APIをGCE上で複数動かしており、それを用いて何か目に優しい形にしてデモンストレーションをしよう、という事です。  
<img src="https://qiita-image-store.s3.amazonaws.com/0/147520/57491f5d-37ef-44a9-15eb-e3202aa7a72d.png" width=50%>

なんのことはなしに Django でも使えば？という御方もいらっしゃいますでしょうが、私は Python コードを見ると Tensorflow や PyTorch のことばかり頭に浮かんでしまい何も手に付かないという病を患っているため、別の策を考える必要がありました。
そんなわけで当時持っていたスキルで適当に Web サーバなるものを建てるため、約半年ぶりに Luminus という Webframwork を触ったというわけです。

# 取り敢えずEmacsとleiningen はインストールしてある。だが何も覚えてない
## 環境
OS: Manjaro Linux (4.19.16-1-MANJARO) Budgie
Build tool: leiningen (Leiningen 2.8.3 on Java 1.8.0_192 OpenJDK 64-Bit Server VM)
Editor: Emacs 26.1  

という感じになっています。つまり Manjaro Linux を仮想環境などに入れて、

```shell
sudo pacman -Syu base-devel
sudo pacman-mirrors --fasttrack && sudo pacman -Syy
sudo pacman -S fcitx fcitx-kkc fcitx-configtool fcitx-gtk3
echo -e "
# fcitx settings ##########
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim
#########################" >> ~/.profile
fcitx-autostart
sudo pacman -S emacs yaourt
yaourt -S google-chrome leiningen emacs-mozc otf-source-han-code-jp
reboot
# この後 fcitx の設定をする
#（右下キーボードアイコンー＞configure-> + ボタン -> Only Show Current Language のチェックを外す
# -> kkc と入力し、 Kana Kanji を選択
# -> Global Config タブ -> Trigger Input Method を変更 (Defaultは Ctrl+Space)）
# フォントの設定は左下メニューボタンから Budgie Desktop Settings より行えば良い
```

みたいなことをした後になります。

## 取り敢えず Spacemacs を入れよう。
Spacemacs は Emacs の拡張で、ちょっと時間を貪ってしまう Emacs の設定をささっと済ませてくれます。

```shell
rm -rf .emacs.d
git clone https://github.com/syl20bnr/spacemacs
```

としてEmacsを立ち上げましょう。
色々聞かれると思いますが、このあたりは github のページを参考にしながら選択してください。（個人的なオススメは、Emacs-> Spacemacs -> ivy） です。

次に ~/.spacemacs を開きます。
dotspacemacs-configuration-layers と dotspacemacs-additional-packages を以下のように編集します。これで色々 clojure の拡張が入ります。

```emacs-lisp
   dotspacemacs-configuration-layers
   '(
     html
     python
     clojure
     ;; ----------------------------------------------------------------
     ;; Example of useful layers you may want to use right away.
     ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
     ;; <M-m f e R> (Emacs style) to install them.
     ;; ----------------------------------------------------------------
     ivy
     auto-completion
     better-defaults
     emacs-lisp
     git
     ;; markdown
     org
     (shell :variables
             shell-default-height 30
             shell-default-position 'bottom)
     spell-checking
     syntax-checking
     version-control
     )
```

```emacs-lisp
   dotspacemacs-additional-packages '(
                                      paredit
                                      mozc
                                      )
```

次に ~/.emacs.d/init.el に以下の行を追加します。
これで ```C-\``` で日本語が入力できます。

```emacs-lisp
(require 'mozc)
(setq default-input-method "japanese-mozc")
(setq mozc-candidate-style 'overlay)
```

設定を反映するためにEmacsを再起動します。

## 環境はとりあえず整った、後はプロジェクトの立ち上げ
Emacs より Eshell を立ち上げます。

```shell
cd ~/
mkdir Github
# 別にどんな名前でも良いですが、将来的に git 管理をするならこうした方がわかりやすいと個人的なｲﾒｯｼﾞ...
cd Github
lein new luminus demo-app +reitit +aleph +swagger +re-frame +auth +oauth
cd demo-app
echo "lein new luminus demo-app +reitit +aleph +swagger +re-frame +auth +oauth" >> luminus-build-opts 
# これは Luminus でどんなビルドオプションを付けたのかを後々わかるようにするためのメモです。 
lein deps
```
次に、```{project-name}/project.clj``` を開き、そのバッファ上で ```M-x cider-jack-in``` （或いは ```C-c M-j```） で cider に接続します。cider は Emacs においての Clojure の開発環境で、開いているプロジェクトに対して開かれます。
接続されたら、bufferを ```*cider-repl ...*``` に切り替えます。
repl 内で以下の式を打ちこみます。

```clojure
user> (start)
user> (mount/start [])
user> (use 'figwheel-sidecar.repl-api)
user> (start-figwheel!)
```

次に localhost:3000 を google-chrome で開けば以下のような感じになります。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/147520/755eecc7-99b6-db4d-5591-612df1e27bd2.png)


## とりあえず動いた、次はコードを書こう
別の記事で書きます。