class: right, middle # Which Clojure Editor I Should Use ###### [nishi-shinju-clojure #0](https://clojure-love.doorkeeper.jp/events/49296) ###### 2016.07.21 Fumihiko Hata ###### [remark.js](https://github.com/gnab/remark) --- # whoami ```Clojure {:name "畑史彦" :company "Stylerecipe, Inc" :services [{:name "sutarepi" :description "プロのスタイリストにコーディネートを相談できるアプリ" :android true :ios true}] :likes [:scrum :sql] } ``` --- # Service ```Clojure {:name "畑史彦" :company "Stylerecipe, Inc" :services [`{:name "sutarepi"` `:description "プロのスタイリストにコーディネートを相談できるアプリ"` `:android true` `:ios true}`] :likes [:scrum :sql] } ``` | | original | current | |:--|:--|:--| | Infrastracture | AWS & Asure |-> AWS | | Server Apps | PHP | + Node, Clojure, Ruby | | Client Apps | Titanium | -> Ionic | --- background-image: url(img/sutarepi.jpg) # Service --- --- みなさん、 -- Clojureを書くとき、エディタは何を使っていますか? -- * Emacs ? -- * vim ? -- * IntellijIDEA + Cursive ? -- * Light Table ? --- background-image: url(img/clojure_2015_survey_results.jpg) [State of Clojure 2015 Survey Results — Cognitect Blog](http://blog.cognitect.com/blog/2016/1/28/state-of-clojure-2015-survey-results) --- # 私のClojureエディタ変遷 --- ## 1. Eclipse + Counterclockwise * Clojureを勉強し始めた(2014くらい?)。 それまで仕事で使っていた Eclipse & Java の環境を使用。 名前がかっこいい。 --- ## 2. Light Table * ほどなくして乗り換えた。当時盛り上がってた。 --- ## 3. Emacs + clojure-mode + CIDER * Clojure書く人はEmacs使いが多いと知って。 --- class: middle この頃(2015?)、地道な社内ロビー活動のかいあってか、自チームでClojureが使えそうな雰囲気に。 ※ ロビー活動 * 社内プログラミングコンテストのお題に、Clojureのコードを忍ばせる。 * ポール・グレアム(←非エンジニアでも知ってる人が多い)は、Clojure(ではくてCommonLisp)使いであることをアピール。 * 『Living Clojure』を周りに薦める。半分くらい和訳した。 * など --- class: middle しかし・・・ --- class: middle * 同僚:「本格的にClojure書くとしたら開発環境は何?」 * はた:「Emacs使ってる人が多いよ。私の開発環境についてまとめ・・・」 * 同僚:「えっ、Emacs?」 * はた:「えっ?」 --- class: middle EmacsマイノリティなチームでEmacsを導入するコストが高い。 そもそもこのときは言語自体の学習コストもある。 --- ・・・なので --- ## 4. IntelliJ IDEA + Cursive * Javaユーザには身近。 * Cursive入れるだけで潤沢なサポートが手に入る手軽さ。 -- * ただ、標準ライブラリではないマクロがエラーになったり。 -- ([Issue](https://github.com/cursive-ide/cursive/issues/147)を見ると、それも[解決](https://cursive-ide.com/userguide/macros.html)してきてるらしいし、`core.spec`が今後追い風になってくれるかも) ![](img/cursive_macro.jpg) --- class: middle ### IntelliJ + Cursive 構成は問題なく導入できた。 (しかし、このプロジェクトは結局最終的にScalaが採用された・・・) --- class: middle その後、転職した。 --- class: middle 現職にて * はた:「Clojure良いですよ、弊社で使いましょう」 * 上司:「いいね、開発環(ry」 * はた:「Emacsや**IntelliJ**などいいですよ😋」 * 上司:「・・・Cursiveってプラグインは有料になるみたいよ」 * はた:「えっ」 --- ## 4. Sublimetext3 * 割とみんな入れてる。 * デザイナやフロントエンドの人も抵抗ない。 -- しかし、Clojure用の[プラグイン](https://packagecontrol.io/search/clojure)が少ない。そもそも最近メンテされていない。 --- class: middle ### 作り直した。[hatappo/sublime-clojure](https://github.com/hatappo/sublime-clojure) --- 補完全般 ![](img/sublime-clojure-ns.gif) --- ちなみに、[planck](http://planck-repl.org/)や[inlein](http://inlein.org/)特有のシンボルもサジェスト。 ![](img/completion-planck.jpg) ![](img/completion-inlein.jpg) --- インラインのネームスペースやパッケージのリファクタリング ![](img/sublime-clojure-require.gif) --- `doc`や`source`、`macroexpand-1`でラップしてsublime-replに流す ![](img/sublime-clojure-repl.gif) --- その他、Clojureを書くときのプラグイン達。 | package | | |:--|:--| | BracketHighlighter | 対応する括弧を強調表示 | | Rainbowth | 括弧がカラフルに(使ってませんが) | | paredit | 括弧をイイ感じに | | EDN | EDNの構文ハイライト | | SublimeREPL | 汎用REPL。動作がちょっと微妙なときも | | DashDoc | Dash連携。`doc`するよりこっちの方が言語関係なく使えるから楽。 | --- エディタのサポートが弱い分、リファクタや解析系の**lein**プラグインを積極活用する。 ```clojure ; ~/.lein/profiles.clj {:user {:aliases { "slamhound" ["run" "-m" "slam.hound"]} :plugins [ [jonase/eastwood "0.2.3"] ; [code] code linter [lein-kibit "0.1.2"] ; [code] static code analyzer [venantius/yagni "0.1.4"] ; [code] static code analyszer to find unused [lein-bikeshed "0.3.0"] ; [code] code style checker [lein-cljfmt "0.5.3"] ; [code] code formatter [lein-ancient "0.6.10"] ; [deps] check outdated deps [lein-git-deps "0.0.2"] ; [deps] enable to add git repo to deps [venantius/ultra "0.4.1"] ; [dev] colorized and more visible outputs of repl, test, stacktrace [lein-try "0.4.3"] ; [dev] try package easily [lein-nevam "0.1.2"] ; [tool] converter from pom.xml to project.clj [hiccup-bridge "1.0.1"]] ; [tool] converter between html & hicupp :dependencies [ [slamhound "1.5.5"] ; [code] refactor tool ; [pjstadig/humane-test-output "0.8.0"] ; venantius/ultra has upward feature [org.clojure/tools.namespace "0.2.11"]]}} ``` --- class: middle という感じで、Clojure開発環境をSublimetextで構築するのはいかがでしょうか💁 --- class: middle ところで、スライド作っていて **ATOM** がふと気になった。 --- ![](img/atom-user.jpg) --- ATOM proto-repl https://atom.io/packages/proto-repl ![](img/proto-repl.gif) --- ATOM proto-repl-charts https://atom.io/packages/proto-repl-charts ![](img/proto-repl-charts.png) --- class: middle ATOMのClojure環境は結構充実してた・・・ --- # まとめ -- * Clojureファースト・ステップに Sublimetext(やAtom)もありですよ!👻 --- class: center, middle Thanks for listening.