Make組ブログ

Python、Webアプリや製品・サービス開発についてhirokikyが書きます。

Django 1.4のproject template便利

Django 1.4からの機能であるproject templateが大変便利であると最近気づいた。

2012.9.21 追記

app templateじゃないよ

app templateって書いてたけどproject templateだった。

Django & Pyramid Con で話した

project templateについては Django & Pyramid Con JP 2012 の「使えるDjango1.4」のなかで話したのでそちらを参考にどぞ。18:57ごろから。


スライドもあっぷしてる

需要あるらしいので英語版

2012.9.22追記

日本語はできません

2012.10.21追記

開発版では Non-ASCII 文字にも対応してる

Fixed #18091 -- Non-ASCII templates break `django-admin.py startproje… · django/django@3afb591 · GitHub

project templateって?

これはプロジェクト、アプリ立ち上げ時(startproject, startapp)にテンプレートとして
用意しておいた骨組みを適用しようというもの。
マネジメントコマンド(django-admin.pyとか)に引数として渡して使う。


例えば/path/to/my_project_template directoryをproject templateにしてプロジェクトを立ち上げるときは、こうなる

    % django-admin.py startproject --template=/path/to/my_project_template my project

これの良い点は2つある

  1. 特定環境に対するデプロイが簡単になる
  2. ノウハウを詰め込んでおける

特定環境に対するデプロイが簡単になる

特定環境(例えばherokuとかdotcloud)に対するデプロイが簡単になる。

そういった環境に必要なファイルは毎度決まっていて、それをプロジェクト立ち上げごとに書くのは面倒よね。
(herokuだとProcfileだとかrequirement.txtだとかwsgiだとか)

そういったものをproject template上に用意しておいてやることで毎度用意する必要がなくなる。

良さげな、heroku+S3環境向けのproject templateがあったので紹介しておく。

さらに良いのは、必要そうなモジュールもまとめておけるということ。
django-skelの場合だと、Southやcompressor、debug-toolbarも標準で一緒くたになってる。
「この環境、規模だとSouthも要るなぁ。debug-toolbarも要るかぁ」なんて考える必要は無い。
特定環境で必要になる、なりそうなアプリケーションは全部書いておく

ノウハウを詰め込んでおける

ノウハウ、とくに設定ファイルまわりのノウハウをproject templateに詰め込んでおけば、それらを適応する手間が省ける

設定ファイルで気になるのが、開発環境と本番環境の切り分け。
ローカル専用の設定ファイル(local_settings.pyとか)を設定ファイルの末尾で読み込ませることで、
環境の切り分けをしてたりすることと思う。

設定ファイル(settings.py)の末尾に以下みたいなコードを角ってこと

try:
    from local_settings import *
except ImportError:
    pass

でも毎度これを書いてやるのって面倒よね。
もちろんこれだけならまだいいけど、他にも設定ファイル周りのノウハウってある。

他にもSECRET_KEYの扱いとかあるよね。毎度毎度こんなこと考えてられねぇよと。

じゃぁこの辺のノウハウもproject templateに適用してしまえば良い。
さっきのdjango-skelの設定ファイル周りを見てほしい

上記したようなノウハウがバッチリ詰め込まれている。

単にproject templateをstartproject時に取り込めば良いだけで、ノウハウを適応する必要が無くなる

まとめ

以上の

  1. 特定環境に対するデプロイが簡単になる
  2. ノウハウを詰め込んでおける

という2点がproject templateの良い点であり、注目する理由。

しかもこのhttps://github.com/rdegges/django-skel:django-skelパブリックドメインなので
自由に使っていいとのこと(本人に確認済み http://twitter.com/#!/rdegges/status/219528392624713728

まだ使いはじめたばかりなので、見えてこない点も多い。
落とし穴とか、さらなるいい点について分かったらまた書く。

おわりに

何でこのdjango-skelを見つけたかという話。

今、日本のDjangoコミュニティのサイトであるdjangoproject.jpが古くさいのでリフォームを模索してる。

2012.9.21 追記:リニューアルしたよ

ソースコードも公開してますよ

end追記

せっかくリフォームするからには、サイト自体がDjangoの良きサンプルであるようにしたいと思ってる。
ノウハウを詰め込んで、最新のDjangoのいい点をなるべく使って作ろう、と。
例えば「Djangoチュートリアルやったけど、何か良いサンプル無いかな」と言う人に『djangoproject.jpがあるじゃん!』って言えるみたいな。

そこでフラフラ面白そうなもの探してたら、このdjango-skelに出会った。というわけ。

ただまぁ、こいつをdjangoproject.jpに使っても良いけどherokuとかS3使ったこと無いからどうしようかってかんじ。
試しに何かWebサービス作ってみようかね。

ともかく、ナイスなアイディアある人とか、協力したいよという人は連絡下さい。