はじめに
こんにちは、Python界のタオパイパイです。いろいろなコミュニティで行われているアドベントカレンダーですが、今年初めて参加してみました。
今年はPython系では「Python Web フレームワーク アドベントカレンダー2010」と銘打ってWebフレームワーク系の話をするようなのですが、自分はそもそもWebフレームワークをそんなに知らない。困った!というわけでWebアプリケーションフレームワークには必ずあるテンプレートエンジンについて調べました。
どんなテンプレートエンジンがあるのか
そういえば俺もよく知らんなと思ってとりあえずいろんなエントリから調べてみましたよ。全部挙げたらきりがないので、とりあえずGoogleのヒットが多いものを挙げてみました。普通にフレームワーク名になってしまっているものは内蔵型です。
パッケージ名(本家リンク) | レポジトリ | ドキュメント(日本語訳} | タイプ |
---|---|---|---|
Cheetah | github | En (×) | ロジック可 |
Chameleon | svn | En(×) | XML |
Mako | trac(hg) | En (×) | ロジック可 |
Django | svn | En,1.2(Ja,1.0) | ロジック可 |
Jinja2 | github | En(Ja) | ロジック可 |
Kid | trac(svn) | En (×) | 埋め込み可 |
Genshi | trac(svn) | En (×*1) | ロジック可 |
web2py | hg,bzr | En(×) | ロジック可 |
Tornado | github | En,1.1 (Ja,0.2) | ロジック可 |
Bottle | github | En | 埋め込み可 |
ぱっと挙げただけでもテンプレートエンジンってたくさんありますね。しかし見てみてわかるのが結構フレームワーク内蔵型だということ。実際は便利だからということでDjangoみたくテンプレートエンジンだけ切りだして使うこともありますね。
「タイプ」という項目は、適当に名づけました。独自の記述方法でテンプレート内にロジックが入れられるものは「ロジック可」、XMLをパースして置き換える物は「XML」、Pythonコードを埋め込めるものを「埋め込み可」と書いています。
って言ってるけどやっぱりほとんどが「ロジック可」ですね。これはやはりDjangoの影響を受けているものが多いからでしょう。実際Jinja2とかはドキュメントで明言してますし。ただしロジック可になっているものはたいていWebサーバ+テンプレートエンジンという組み合わせでO/Rマッパは持ってません。O/RマッパはSQLAlchemyとか強力なのがあるのでそちらに任せているんでしょうね。
どんなフレームワークで使われているのか
今度はフレームワークとテンプレートエンジンの切り口で調べてみました。って調べてみると独自テンプレートエンジン使ってるフレームワークばっか!というわけでフレームワークの一部として実装されているテンプレートエンジンは外してみました。やろうと思えばみんな出来ちゃいますからね。
テンプレートエンジン | フレームワーク |
---|---|
Jinja2 | Flask, Kay, Bottle, Pyramid(binding), Pylons |
Chameleon | Pyramid |
Mako | Bottle, Pylons |
Genshi | TurboGears2(Pylons) |
Kid | TurboGears1(CherryPy) |
こうやって見てみるとJinja2ってサポート多いなあ。他のテンプレートエンジンもきっと誰かがbinding作ってるんでしょうけど、Googleでぱっと調べてこれだけたくさん出てきたのはJinja2だけ。
Google App Engineで使えるのか
最近だとGoogle App EngineがあるからPythonやっているという人も少なくないと思います。なのでGoogle App Engineで使えるのかどうかというところで調べてみました。
Googleで調べた限りでは
- Django
- Cheetah
- Jinja2
あたりは今のところ動きますよって言ってますね。だいぶ限られてきました。
Jinja2がいいよね
GAE FrameworkはDjangoを元にしてるのでまあDjangoのテンプレートが動くのは当たり前で無視するとして、ちっちゃく書けるFlaskやGAEで動くkayといったWAFが使ってるJinja2がいいですよねー、という流れに持ってきたかったわけです。あー長かった。*2
僕も今はFlaskとSphinxを多く触っている関係でJinja2しか触ってません。というわけでJinja2をご紹介。
Jinja2ってどんなテンプレートエンジンなのか?
Jinja2はドキュメントでも明言している通り、Django Templateを意識したテンプレートエンジンです。なので、Djangoを触ったことがある人ならとっつきやすいと思います。
特徴としてはこんな感じです。
- 強力なテンプレート継承
- ロジックが書けるテンプレート
- 強力なデバッグサポート
- 強力なテンプレートのコンパイルサポート
- シンタックスが変更可能
テンプレートエンジンとしては必要な機能はたいていあると思いますよ。国際化も標準でサポートしてるし。
詳しい説明はドキュメントにありますよ。参考にしてください。
あと誰かが日本語訳したみたいですよ!!みんなブクマすればいいと思うよ!
っていうかぶっちゃけこれを言いたいがためのエントリです、これは!ようやく公開できる量になったのでJinja2日本語訳公開します。なにか間違いがあったらぜひbitbucketのIssue Trackerまでコメントください。
というわけで
要するに「翻訳しました」って記事になってしまいましたが、これを機にみんなJinja2つかってください!さらにいうとJinja2以外にもTornadoとFlaskはドキュメント日本語訳に関わっているのでなんかあったらいろいろ連絡してもらえると嬉しいです。
これだけでは申し訳ないので次はJinja2の簡単なチュートリアルを書こうかな、と思ってます。
参考
というわけでこんな感じでどうでしょうか。次は翻訳の大先輩@t2yさんにお願いします。