読者です 読者をやめる 読者になる 読者になる

(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

Web Development with Clojure を読んだ

Clojure

読みました。

結論から言うと、今現時点 (2015/4/12) でもまぁ役に立つ Clojure で Web 開発をするための入門書だと思います。

本の概要

目次

1. Getting Your Feet Wet
2. Clojure Web Stack
3. Liberator Services
4. Database Access
5. Picture Gallery
6. Finishing Touches
7. Mixing It Up
Appendix A: Alternative IDE Options
Appendix B: Syntax
Appendix C: Document-Oriented Database Access

簡単に概要を説明すると 1 章でとりあえず Clojure で Web アプリケーション作ってみようってとこで簡単なアプリを作ります。 2 章では少し掘り下げて Ring, Compojure と lib-noir を使ったセッション管理とかバリデーションの仕方を学びます( Web アプリの構成の仕方的な)。 3 章では JSON を返す RESTful アプリの作り方を教えてくれて 4 章ではデータベースへのアクセスの仕方、 5 章ではそれまでの知識を活かして総まとめ的なアプリを作ります。 6 章では 5 章で作ったアプリをブラッシュアップさせるためにログ機能などを追加したり、テストの書き方及び最終的にデプロイするときの方法を学びます。 7 章ではそれまで使ったライブラリ達と決別する方法が書いてあります、というか別のライブラリの使い方講座なのでわりと微妙ですが ClojureScript の説明はこのタイミング。おまけの A,B,C については A が IDE 関係の話でこれ使うならこれがいいよ、みたいな話で、 B は Clojure を知らない人向けの簡易的な説明です。 C は NoSQL の類と使うときの話。

良かったところ

  • Luminus にフォーカスしているのかなと思ったんだけど、 Ring と Compojure だったので良かった*1
  • 実際にある程度の機能を持った Web アプリを作れるので指と思考を馴らすのにちょうど良かった

悪かったところ

  • JavaScript のコードがちょいちょい出てくるけど突っ込みどころが多々ある*2
  • どうしても古く、すでにデファクトなライブラリが一部変わっているのでつらい(例えば Korma というライブラリの紹介があるけど、今は Yesql のほうが流行っている感あるとか)
  • 1 章で LightTable を薦めてくるのに(使い方にページわざわざ割いている) 5 章で突然の Eclipse

感想

対象読者は Clojure についてある程度の理解ができている人ですね。 Clojure について細かい説明はなされません。

だいたい全体的に古いです。出てくるコードは基本的に書いてあるバージョンのライブラリを入れればそのまま動くとは思いますが、自分で試すときに新しいのを入れるとハマります。僕は 3 ヶ所くらいそれのせいでハマりましたが jdbc ライブラリのバージョンがあっていなかったのと、 lib-noir が ring/ring-defaults というライブラリを依存に含めるようになって anti-forgery でハマったとか、テスト書こうとして anti-forgery でハマったとかそのくらいですかね。

まぁハマるのは基本的に勝手にバージョン違うのを使う読者のせいなので、本の質とは直接的に関係ないです。ただ、やっぱりどうしても違和感として残るのはライブラリ紹介集になってしまっている嫌いがあるところでしょうか。 Ring, Compojure というのは Ruby 界隈でいうところの Rack 相当のものだと思ってもらっていいとは思うんですが、それ故にある程度のアプリケーションを作ろうとすると何かしらのライブラリを入れることになります。テンプレートエンジン然り、データベースの抽象レイヤー然り。そうするとまぁ現実で使うライブラリとは違うものを強制されるのがしんどいのかなと。
なので個人的には 2 章くらいまででこの本いいなっていう感じはありました。もちろん、ライブラリが変わっても使える知識などはそれ以降の章でも結構出てきた気がするので読んでおいて損はないと思いますけど。

あ、それとサンプル中にまだ出てきてない namespace に関数を足しますみたいなのあるけど、その namespace が実は後のリファクタリング後に出来るはずのものだったとか、そんなに多くはないけど書籍中の誤りが少しばかりあったという印象です。

僕が書いたサンプル

5 章くらいまでは黙って写経したのでもし誰かが今後読むようなことがあるなら参考になるのかなと思います。

ちなみに 5 章終わったタイミングでこんなアプリができています。
f:id:ayato0211:20150413083326p:plain

まぁ今後、 Clojure を始めて Web アプリを作りたいみたいな人いたら読んだらいいんじゃないでしょうかm(__)m

追記

第2版が出るようです(´・ω:;.:...
(iterate think thoughts)

*1:究極的な話をすれば Luminus は Ring などのライブラリを使うアプリケーションテンプレート的なあれなので、別にどっちでもいいと思うけどまぁ。

*2:別に JavaScript の本じゃないので文句はいいませんが、アンチパターン的なのそこそこ踏んでてぐぬぬぬ…って思ったのは内緒です