読者です 読者をやめる 読者になる 読者になる

ottatiのブログ

無職学生がネットにクソアプリをまき散らしていく様子

Djangoのprojectとappの役割の違いとその命名について

f:id:ottati:20150103125718g:plain     🍣

Djangoを触った時に戸惑うのはpython manage.py startapp ***というコマンドを打つとき。appってなんだ?と思うのは自然だと思う。

ほら、Two Scoops of Djangoにも「appの存在に困惑するでしょ」と書いてある。そこにはappの存在意義についての解説が記載されている。

Two Scoops of Django: Best Practices for Django 1.8

Two Scoops of Django: Best Practices for Django 1.8

この書籍に記載されているappの役割について書き留める。

Django projectとDjango appsの違い

  • プロジェクトはウェブアプリケーションである
  • appsはプロジェクトの一部の機能を持った小さなライブラリである
  • プロジェクトは沢山のappsで成り立つ

設計方針

Unixの哲学の一部に従う。つまり、それぞれのappはそれ自身の小さな仕事に集中しなければならない。と、ある

この時、Unixの哲学の一部というのはUNIXという考え方から引用すると以下に該当すると考えられる

  • 小さいものは美しい
    • 小さなプログラムはわかりやすい
    • 小さなプログラムは保守しやすい
    • 小さなプログラムはシステムリソースにやさしい
    • 小さなプログラムは他のツールと組み合わせやすい
  • 一つのプログラムには一つのことをうまくやらせる
    • 一つのことに集中することで、プログラムに不要な部分をなくせる
  • ソフトウェアを梃子として使う
    • 再利用可能なモジュールの重要性について、たいていのプログラマは表面的にしか分かっていない
    • いいプログラマはコードを書く。偉大なプログラマはよいコードを借りてくる。

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

僕はこのように解釈した: ウェブアプリケーションの役割は細かく分けたほうがよく、一つのappに一つの役割を割り当てるべきだ

設計例

twoscoops-project (アイス屋さんプロジェクト)というプロジェクトではappsはこんな感じになるとある

  • flavors
  • blog
  • events
  • shop
  • tickets

appの名づけかた

僕はdjango manage.py startappまで打って、入力が止まってしまうことが多い。appに名前をつける場合はPEP 8の示すpackage nameのルールに基本的に従うべきらしい。

app nameは以下にしたがって決められるべきだ

  • 小文字アンダースコア
  • 短く
  • できるなら1 wordで
  • そのアプリの一番重要なモデルの複数形 (blogなど、例外は沢山ある)
  • urlと一致するように

おわりに

githubdjangoプロジェクトを漁るのは結構時間かかるのでこうやってまとまっているこのTwo Scoops of Djangoという本は貴重だ