2012-12-15

KottiではじめるPyramid

この記事は2012 Pythonアドベントカレンダー (Webフレームワーク)の15日目エントリです。
今日はマサカリを投げあうモヒカンどもが大好きなPyramidについて書いてみようと思います。どうでもいい話ですが、Pyramid Tシャツがアメコミ的HAHAHAな感じなので、とても欲しいです。

Pyramidにはとても良くできたチュートリアルがあるので、なにはともあれ、こいつをやっつけて下さい。Step by stepの形式でインストールから最初のアプリケーション作成、そして作ったアプリケーションをテストするところまで教えてくれます。さすがはテストカバレッジの高さが当たり前のプロダクトですね。
続いてドキュメントを読みながら、チュートリアルで写経したアプリケーションを改造しつつ、Pyramidが用意しているAPIに習熟するのがよいでしょう。今から始めれば年明けくらいには全部読み終わることができると思います。

で、ここで困るはず。

Pyramidはフルスタックのフレームワークではないので、少なくとも永続化層に関しては、どう作るのか自分で考えないといけません。DjangoとかRailsとかのフルスタックフレームワークにどっぷりはまりこんでいて「とりあえず型通りに作れば、それなりに動く」というのを求めている人には、あまり向かないと思います。

さて、現実に使い物になりうる複雑さを持つアプリケーションを書こうとすると、永続化やキャッシュ、外部サービスとの接続など、他のフレームワークとのGlueを行うことになります。インデックスページには、そういう他のフレームワークと繋ぐためのモジュールも紹介されていますが、これの学習コストが思いの外高くつくので、お手本になるようなアプリケーションが欲しくなってきます。
欲しくなってきましたね?

そこでKottiです。 (いつの間にか日本語のページもできていた)

KottiはPyramid上に構築された軽量CMSです。実際のところ、WYSIWYGエディタ付きのページコンテナ程度に考えておいてもいいです。その分コードサイズは小さくて、全部読んでも1日かからないので、とてもお手頃です。
インテグレートしているライブラリは、永続化層にSQL Alchemy、セッション管理にBeaker、テンプレートエンジンはChameleon、フォームにはDeformを使っています。メール送信の機能もあります。認証、権限管理、キャッシュはPyramidのビルトインが使われています。
コードリーディングするだけで、これだけのお手本が手に入るわけです。
軽量CMSはどんなWebサイトでも一定の需要があるので、そのまま使うのもいいかもしれません。KottiはPyramidの拡張機能でKotti自身を拡張できるので、Kotti上で自分のアプリケーションを書くこともできます。また、Fanstaticが組み込まれているので、同じWSGIサーバーにKottiに並列してアプリケーションを配置することも可能です。

では早速インストールしてみます。

BASH$ virtualenv somevenv
BASH$ cd somevenv
BASH$ bin/pip install Kotti

簡単でいいですね。インターネット接続があって、PyPIが落ちていなければ、ですが。
では動かしてみましょう。

BASH$ mkdir /path/to/somewhere
BASH$ cd /path/to/somewhere
BASH$ curl -LO https://raw.github.com/Kotti/Kotti/master/development.ini
BASH$ /path/to/somevenv/bin/pserve development.ini

アプリケーションコード以外で必要なのは、PasteConfigのファイルが全てです。データベースや、ログ出力先や、SMTPサーバーの設定などは、この.iniファイルに書き、実行時に指定します。どんな設定項目があるかはドキュメントとかコードを見て下さい。
とりあえず、SQLログがうざいので "[logger_sqlalchemy] level = INFO" をWARNあたりにしておくことをおすすめしておきます。あと、"[app:kotti] pyramid.default_locale_name = en" をjaにすると、いろいろ日本語になります。

Webブラウザで http://127.0.0.1:5000/ を叩くとこんな感じのページが出ます。

皆さんおなじみBootstrapです。このページは既にCMSの中なので、自分で編集したりできます。編集にはログインが必要なのですが、ここで使う初回ログインは最初から作られている "admin" ユーザーで、Configファイルの "[app:kotti] kotti.secret = ***" に設定されているパスワードを使って下さい。

後は自力でどうにか。

1日目の@hirokikyも書いている通り、「チュートリアルが終わった後に、何をすればいいのか」というのは、いつになってもなかなか難しい問題です。
私はPyramidの初期学習時にKottiを使ってみる、読んでみることで、習得が早くなったような気がするので、Pyramidが難しいなあと思っている人は、こっちKottiの方から入ってみるのもいいかもしれません。

明日の2012 Pythonアドベントカレンダーは@yamionpがDjangoのclass based viewについて書くようです。class based viewは稀によく使うので楽しみですね。

0 件のコメント: