今日はいい天気だったね!みんな元気にしてるかな?さて、今日は前回インストールしたClojureを使って、実際にHerokuでアプリをデプロイしてみましょう。Worldアプリでもいいかと思ったんですが、さすがに簡単すぎるしチュートリアルも巷に溢れかえってるので少しだけ難易度を上げてPostgresqlを使ったアプリを開発してみることにします。教材に使うアプリはこれにします。テキストエリアに愚痴を入力して送信すると愚痴が表示されるという、Twitter超簡易版アプリ・「ぐちってー」です。Bootstrapとか勉強しながら作ってたら丸一日かかってしまいました。ソースコードはこちらです。目的Clojureを使った開発を実際に経験してみるCompojureを使ったWebアプリの基本を学ぶClojureで(JDBCドライバを使用した)Postgresqlを使用する方法を学ぶHerokuでClojureアプリを運用する方法を学ぶ少し長くなるので、数回に分けて連載方式でいこうと思います。登場人物の説明たくさんのフレームワークやライブラリが登場するので、簡単に紹介しておきます。CompojureClojureで今もっとも広く使われているであろうWebフレームワークです。ルーティングなどが楽に実装できます。すごくシンプルな作りになってて、初学者が混乱することは少ないだろうと思います。その他のWebフレームワークにNoirなどありますが、今回は登場しません。RingClojureで作られたWebアプリケーションライブラリです。CompojureはこのRingをベースにして開発されています。Compojureでは実装されていない機能などはRingのAPIを使用します。HiccupいわゆるHTMLテンプレートエンジンです。Hiccupの他にもEnlive,Fleetというエンジンがありますが、Hiccupが最もシンプルなので今回はこれを使います。Postgresqlご存知リレーショナルデータベース管理システムの雄。postgresを選んだ理由はただ一つ、HerokuではPostgresしか使えないからです。今回はローカルでpostgresqlサーバーを動かして開発するのでインストールされてない方はインストールしておきましょう。postgresqlHerokuWebアプリホスティングサービスですね。Paasって言うんでしょうか。最近のバズワード難しくてわかりません><HerokuでClojureが運用できるということで、どうしても試してみたくなったというのが今回の連載の動機です。project.clj依存ライブラリはproject.cljに書きます。guchitter.core)ちなみに、ライブラリの検索、バージョンの確認にはClojarsというサイトを使います。Compojureのキホン早速Compojureの使い方を見ていきましょう。src/guchitter/core.cljは名前のとおりアプリの核となるベースの処理を書いています。dev-app)))ns,use,requireとかは他のサイトなどで使い方を確認しておいて下さい。defroutesdefroutesマクロでルーティングを定義します。;not-foundを通すと文字化けする先頭のcontroller/routesはcontroller/routesのルーティングを参照することを示しています。params)))最初に、/にGETリクエストがきた場合、index関数が呼ばれて(index関数の詳細は後で登場します)、index関数は表示する完全なhtmlを返します。同様に/にPOSTリクエストがきた場合、POSTのパラメータがparamsに入り、それをcreate関数に渡し、create関数は送られた愚痴をDBに登録した後にこのときに表示すべきHTMLを返します。"/")は何をしているかというと、静的なファイルの取り扱いを指定しています。この例では例えば/A.htmlのGETリクエストがきたときに[プロジェクトのルート]/public/A.htmlというファイルを返すことになります。"/")も同様なのですが、こちらはリソースファイルです。デフォルトでは[プロジェクトのルート]/resources/public/のファイルが該当します。(layout/not-found))の部分は404を表示する場合にlayout/not-found関数の返すHTMLを表示します。コメントのとおり、not-found関数を通すと文字化けしてしまうようで、日本語が使えません。バグなのか使い方が悪いのか。ひとつ注意点として、not-foundはdefroutesの末尾に書かなければなりません。ルーティングの際にはdefroutesで定義された順に評価されるからです。false}))これでサーバー開始です。JettyというHTTPサーバが動き始めます。:portはポート番号、:join?はブロッキング・ノンブロッキングの指定です。ポート番号を環境変数PORTから取得していますが、これはHerokuで動作させるためです。ローカルではPORT環境変数は存在しないので、ローカルで動かす場合は環境変数を定義する必要があります。PORT=8080実際に動かしてみよう全部のファイルについて解説したわけじゃないですが、第一回の締めにここで一旦動かしてみましょう。動かすためにはまずDBを作成しなきゃなりません。DATABASE_URL=postgres://localhost:5432/guchiこれでデータベースguchitterが作成されました。ちなみにHeroku上でデプロイする際は既に存在する共有DBを使用するので、DB作成は必要ありません。次にテーブルを作成します。guchitter.models.migrationこれでguchi.models.migration/-main関数が実行されます。migration.cljの解説は省略します。これはテーブルを作成するためのスクリプトです。コードは以下のとおり。done"))migrationで使用されているSQL関連は次回解説しますね。サーバー起動1行実行するだけ。run動きましたか?続きはまた次回にしましょう。最後に最後に感謝の意を述べなければなりません。前回のエントリで乞食をしたところ、早速2人の方から品物が届きました。こんなどうしようもないニートのためにお金を使ってくれる人がいるなんて、涙が出るほど嬉しいです。ほんとにありがとうございます。Disqusk2nr。