カテゴリー
ブログ 開発

開発 備忘録 Django ことはじめ 〜設計思想〜

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”3_4″ last=”no” spacing=”yes” background_color=”” background_image=”” background_repeat=”no-repeat” background_position=”left top” border_size=”0px” border_color=”” border_style=”” padding=”” class=”” id=””][fusion_text]株式会社 青山ファームは、以前Python Networksという名称でした。社名変更は何回かしているのですが、当時は「社名は、その会社の目指すべき内容を示すべき」と考えていました。Phthon Networkという言葉は、当時私がCoolだと感じた言語であったPythonから付けさせていただいたのは間違いないのですが、そこからネットワークが広がっていったら良いなと思うようになったことに由来します。今から思うと、まだまだ理解が進んでいないところもありましたが、方向性としては間違えていなかったのだろうと感じています。いろいろと思うところはありますが、このブログを通じて、少しずつDjango等の一般的な話についても書いていきたいなと思います。

Djangoとは

Djangoとは、Pyhonで動作するフレームワークです。Pythonという言語を使う方にとっては、比較的メジャーなフレームワークといえると思います。某技術系メディア会社のサイトがDjangoだったり、以前の私の企画もDjangoだったり、当社が手がけている教育や色に関するフレームワークがDjangoだったりと、事例も多々あるでしょう。
昔は、ほとんどなかった日本語のドキュメントも徐々に増えてきて、学びやすい環境になりつつあると感じています。比較的新しい本になると、パーフェクトPythonなどがありますが、比較的お高いので、まずはネットの情報を探して、ご自身のマシンにPyhotn/Djangoの環境を構築して遊んでみるのが良いでしょう。
Django公式サイト(英語)
Django日本語ドキュメントサイト

Django設計思想

上記のDjango公式サイトのメニューにあるDocumetをご覧になってください。ドキュメントは、DjangoがアップデートされるたびにURLが変わるので、あえてリンクはありません。Django公式サイトからリンクをたどってみてください。”Everything you need to know about Django.”と書かれているページが表示されますが、まさにこのページからすべての情報を見つけることができます。
検索ボックスを見つけることができたら Design philosophies と検索してみてください。

 Design philosophies

というドキュメントが出てきましたでしょうか?これがDjangoの設計思想です。
英語が厳しい!と思われる方は、日本語のDjango 1.4のドキュメントをご覧になってください。
Django の設計思想[/fusion_text][/fusion_builder_column][fusion_builder_column type=”1_4″ last=”yes” spacing=”yes” background_color=”” background_image=”” background_repeat=”no-repeat” background_position=”left top” border_size=”0px” border_color=”” border_style=”” padding=”” class=”” id=””][fusion_text]
[/fusion_text][fusion_text]
オライリーのサイトでサンプルPDFを見ることができます。オライリー本家サイトよりも、日本のアマゾンKindleのほうがお安く購入できます。[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container backgroundcolor=”” backgroundimage=”” backgroundrepeat=”no-repeat” backgroundposition=”left top” backgroundattachment=”scroll” video_webm=”” video_mp4=”” video_ogv=”” video_preview_image=”” overlay_color=”” overlay_opacity=”0.5″ video_mute=”yes” video_loop=”yes” fade=”no” bordersize=”0px” bordercolor=”” borderstyle=”” paddingtop=”20px” paddingbottom=”20px” paddingleft=”0px” paddingright=”0px” menu_anchor=”” equal_height_columns=”no” hundred_percent=”no” class=”” id=””][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][fusion_text]

Django設計思想 ピックアップ

フレームワークを使う上で、設計思想を理解することは極めて重要です。ですので、上記のドキュメントは、目を通しておくことが望ましでしょう。ここでは、私が重要であると思う項目をピックアップしてご紹介します。

loose coupling と tight cohesion

いきなり難しい英語があげられていますが、とても重要なので解説をします。まずはcouplingとcohesionについてご紹介します。
こちらにも書かれているように、A,Bふたつのプログラムがあった場合に、一方を変更したらもう一方も変更しなければならない関係をcouplingと読んでいます。
cohesionとは、以前は「強度」とよばれていたように記憶していました。調べなおしてみると、凝縮度 wikpediaとして掲載されていました。凝集度が高いと、堅牢性、信頼性、再利用性、読みやすさなどの点で好ましいというのが一般的な考え方です。
loose coupling と tight cohesion が、Djangoの目指す世界ということになります。これを日本語で訳すと、独立性の確保と高い強度の実現、とでも言えばいいのでしょうか。難しいですね。
完成した世界観の中では、プログラム同士は独立していて、かつ協調して動く疎結合が実現されているということになるのでしょう。
これらの考え方は、いわゆるオブジェクト指向と同様であると考えられます。

Less code/Quick development/Don’t repeat yourself

3つまとめて書いてしまいましたが、Djangoのドキュメントでは、3つとも独立して書かれています。私は、この3つが関連しているように考えました。英語も簡単ですので、そのまま直訳すると
少ないコード、素早い開発、繰り返しをしない
ですね。素早い開発には、少ないコードが必要で、少ないコードを実現するには冗長な部分をなくす、そんなふうに考えました。最後のDon’t repeat yourself は、DRYと略称としてよばれ、時折話にできてきますので、下記ドキュメントをご覧になっておいてください。
http://c2.com/cgi/wiki?DontRepeatYourself

Explicit is better than implicit

Explicitは明示、implicitは暗示になります。暗示よりも明示がベターである、と書かれています。日本語で言うと、ブラックボックスよりホワイトボックスでしょうか。いままで私が見たいくつかのフレームワークでは、完全にブラックボックスになっていたフレームワークも存在しました。明示的にするほうが、ずっとフレームワーク利用者にとっては使いやすいものになるでしょう。
余談ですが、この文章Explicit is better than implicit. は、Pythonの設計原則である「Zen of Python」の一文です。すでにPythonがインストールされている場合には、コマンドラインから下記の通り入力すると、Zen of Python を表示することができます。もしあなたがMacを使っていたら、何もしなくてもPythonがインストールされていますので、是非一度入力してみてください。最後のquit()は、インタープリタを終了するコマンドです。

(env1)hoge:hoge user$ python
Python 3.4.2 (default, Dec 30 2014, 18:34:07)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
>>> quit()
以上のように、Djangoの設計思想は、はるか昔から議論されてきたモジュール化やオブジェクト指向フレームワークなどの重要な部分がすべて考慮されている感があります。私のようにWeb登場前にソフトウェア工学を学んでそれっきりの人にも、十分楽しみながら、現在使える現実的で、理想的な環境を、安価に手に入れられると感じました。
実は、友人数名に一緒にDjango/Pythonやろうと誘っているのですが、昔ならしたおっさんであればあるほど、この環境のありがたみを感じるのではないでしょうか。[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]