babie steps

作業療法記録

Clojureを勉強している8

  • Creating a Web Server with Compojure
    • 第7章はウェブアプリを作るということなので楽しみでござる
    • おっ、ClojureScriptも書くらしい。
    • Compojureというライブラリを使うらしい。
    • CompojureはRingというローレベル・ウェブアプリケーション・ライブラリにシンプルなルーティングを提供するものらしい。RingがRubySinatra相当なのかな?
    • サンプル・アプリケーション名はcheshire-cat。いちいち書かなかったけどこの本のサンプルは全て不思議の国のアリスの筋書きに則っている。
    • Clojure+ClojureScriptって綺麗な組み合わせだよなぁ。JavaScriptで全部書ける次に良い。あとこんなに統一できるのはScala+Scala.jsぐらいか?
    • プロジェクトのスケルトン作るのに、lein new compojure cheshire-catしろって書かれてるんだけど、compojureいつダウンロードしたの?leiningenに組み込みなの???どゆこと?
    • Clojure、謎が多くて、前の章ではcore.asyncってライブラリ使ったんだけど、ダウンロードするコマンドなどは一切打った覚えがなく動いていて、便利と同時になんか表示して欲しい感じがする(自動でCLASSPATHを設定するVimプラグインのせいか?)
    • 実行したら、Retrieving compojure/lein-template/0.4.3/lein-template-0.4.3.{pom|jar} from clojars、みたいなメッセージ出た。
    • 自分で生成したプロジェクトのREADME.mdを読む。ほうほう、lein ring server でサーバが起動するのか。
    • lein ring server したらすごい勢いでダウンロードしだしたw apacheとかjettyとか言う文字列が見えてビビる。マジで?
    • そしてブラウザが自動で開いた。Omakaseだ。
    • Clojure/Ring/Compojureの使うポートは3000で、今Railsプロジェクトやってなくて良かったという思い。いやポート番号ぐらい指定できるだろうけど。(ちなみにPhoenixは4000)
    • まぁ例えだから正確じゃないのでどうでもいいんだが、RingがRack、CompojureがSinatra相当っぽい。
    • 自動生成されるRing middlewareのsite-defaultsのオプションが見たければ、https://github.com/ring-clojure/ring-defaults を見よとのこと。はい。
    • Compojure、ルート追加してもサーバ再起動しなくていいのスゴイな。楽。
  • Using JSON with the Cheshire Library and Ring
    • サンプルプロジェクト名がcheshire-catなんだけど、この中でCheshireというJSONを扱うライブラリを使うのでややこしい
    • lein ring server-headlessするとnot open a new windowだよって書いてあったので実行してみたら、ブラウザのウィンドウが開かないということだった。てっきりターミナルのウィンドウの1つを専有しないって意味かと思ってた。
    • leinと打つたびにleiningenさんのゴーストがささやいてツラい
    • Cheshireはgenerate-stringClojureデータ構造からJSONエンコードparse-stringがデコード。ふむ。
    • ただし、parse-stringの第2引数にtrueを与えると、キーがキーワードになる、と。
    • app-routesではレスポンスに:status, :headers, :bodyを含んだマップを返すことができると。
    • Cheshire使ってJSONエンコードしてたのにRing-JSON入れれば自動的にbodyのClojureデータ構造をJSONに変換してくれるから要らない取り換えと言い出したぞ
    • Cheshireからring-json&ring.util.responseに替えたらoctet-streamを返すようになって、(ring.util.response/response res "application/json; charset=utf-8")する必要があった

この辺で時間切れでギブアップ。というか、tpope/vim-fireplaceがクソ重かったので消したり、kien/rainbow_parentheses.vimがうまく動かなくてluochen1990/rainbowに入れ替えたりしてて時間かかった。

つづく

  • Chapter 7 Creating Web Applications with Clojure
    • Creating a Web Server with Compojure
    • Using JSON with the Cheshire Library and Ring

Living Clojure

Living Clojure