言いたいこと
Clojure で Web アプリケーション開発をしたい初心者/入門者向けのドキュメントを書きました。
想定読者は Clojure の書き方はなんとなく分かるようになったけど、 Web アプリケーションの作り方はよく分からない人です。
モチベーション
- Clojure で Web 開発のとっかかりを作りたかった( in Japanese!! )
- ひいては興味持ってくれた人が一緒に働いてくれるかもしれない(ヨコシマ)
- ちゃんとした Clojure のドキュメントを作りたいという気持ちがあった(目指せ "ひしだま's 技術メモページ" )
ありそうな質問と回答
Q. Clojure 初心者でも読める?
A. 一応想定としては Clojure という言語についてはある程度理解していることを前提に書いている部分が大なので、プログラミング Clojure あたりは最低でも読んでおいた方が良いかもしれません。
Q. Luminus をカバーしている?
A. Luminus について解説しようとすると内容をメンテするコストが高くなるのと、初心者は Ring の理解をした方がいいと思うため特定のフレームワークと呼ばれるものについてはカバーしていません。その代わり、 Luminus を使っていても理解を助けるためのドキュメントにはなっていると思います。
Q. Luminus 嫌いなの?
A. 個人的には何かを開発するときに使ったことはないです(結局書き換える範囲多くて泣くので/今なにか作るなら Duct がいいかなぁとは思う)。
Q. 読めば何か作れるようになる?
A. なると思って書いていますし、実際にドキュメントの中では TODO アプリを作っています(今後、増えるかもしれません)。
Q. このドキュメントの良いところって何?
A. 比較的現実的な Web アプリケーションの開発方法を書いていることです。また lein-ring などを使わずに REPL 上で開発するように促しているので REPL の嬉しさみたいなのを理解出来るようになってると思います(たぶん)。
Q. 質問があったらどうしたらいい?
A. 僕の Twitter アカウント( _ayato_p )にメンションするか、不明瞭な部分があったりする場合は GitHub の issue を立ててもらえれば対応します。
最後に
とても疲れました。あと結構な量の日本語を長い期間( 2,3 ヶ月)に渡って書くと最初に考えていたこととか忘れてるし、語り口調も少しずつ変わっていくし(実際変わっているので読まれる方はそこにも注目してみてください/いつか修正する…)、途中で前のところのミスとかに気づくと目も当てられません(今回、コミット履歴を見れるようにドキュメントに URI を埋め込んだので fixup とか使うと他に影響でるし、かと言って直さないのも変だし…みたいな葛藤が何回かありました)。
時間が足りなかったので TODO アプリを作って Heroku にデプロイするところまでしかできていませんが、今後も随時書き足していくつもりなのでリポジトリを Watch しておくと良いのではないでしょうか。
今後の予定
- マイグレーションについて書く
- Buddy を使ってユーザー認証を実装する
- ring-jetty-adapter の代わりに Immutant を使う
- Compojure を bidi に置き換える
- SQL を DSL を使って書けるようにする( or HugSQL? )
- ClojureScript を使ってフロントエンド開発出来るようにする
- Reagent + re-frame あたりをカバーする
- Component を使ってプロジェクトの状態を管理する
- 別のアプリケーションを作って RESTful な Web アプリの作り方を書く
- etc
このドキュメントを読んで Clojure を触ってみようと思う人が増えたら僕は嬉しいです。
(あ、プロの Clojurian の方は間違ってるところあったら指摘してくれると僕が喜びます)
お誘い
12/12(土) に Clojure ワークショップを行います。
https://japanclojurians.doorkeeper.jp/events/34090
仕事で Clojure を書いているエンジニアが手厚くサポートしてくれる会ですので、是非この機会に Clojure を勉強してみてはどうでしょうか?
Clojure を初めて触る方や Web アプリを Clojure で作ってみたい方、自分が書いてるコードが正しいか自信がない newbie な人にオススメです。
宣伝
サイボウズスタートアップスでは一緒に Clojure を書きたいエンジニアを募集しています。
詳しくは採用情報のページを見ていただければ幸いです。