2013.04.23
1ファイルに全部詰め込む方式は、思いのほか効率がいい
先日の「PythonのWebフレームワーク6種をかんたんに紹介」で、1ファイルでできているWebフレームワーク「Bottle」について、私はこのように書いた。

<「bottle.py」という1ファイルだけでできている。環境構築が不要なので、Python入門に最適。1ファイルに全部入っているので、組み込むのも容易だし、依存リスクもないので、実用にもいいと思う。これだけシンプルなのは、生存戦略としても強い>。

最近、自分用に作っているアプリケーションで、この1ファイルに全部詰め込む方式を試してみたところ、思いのほかいい感じになった。

1ファイル方式は、Bottleのようなフレームワークの場合、「環境構築がいらないのでカンタン」「(組み込んでしまえば)依存リスクがない」といったメリットがある。

しかしフレームワークでなく、アプリケーションであっても、1ファイル方式はけっこういい、ということがわかった。1ファイルだと、プログラミングのとき、あちこちのファイルにいちいち飛ばなくてもいいのだ。

そんなことは当然である。私も、そんなことはわかっていたつもりだった。しかしこれまで、なんでもかんでも1ファイルに詰め込めばいい、と考えたことはなかったので、実際にやってみたことはなかった。それを実際にやってみて、「これはかなりいいぞ」という実感を得たのだ。

ただし、1ファイルに全部詰め込むので、規模があるていど以上のアプリケーションの場合は、やはり無理だろう。せいぜい、ファイルを分ける通常の構成にしたときに、10か20くらいまでの規模が限界だと思う。また、複数人で開発する体制の場合は、役割によってモジュールを分ける普通の構成のほうが、バージョン管理などもしやすいだろう。

逆にいえば、ファイル数が10か20くらいまでの規模で、1人で作る場合は、むしろ1ファイルに詰め込んでしまったほうが効率がいい、ということは十分ありえると思う。

1ファイルに詰め込むと、プログラミングのとき、あちこちのファイルに飛ぶというコストがなくなる。これがほんとうに大きい。また、Pythonではimport文にあたる、別のモジュールを取り込む指定も不要になる。「モジュールの依存関係」というものがなくなるのだ。これもけっこう大きい。

1ファイル方式は、1ファイルが長くなるけれども、そこに全部入っているので、アプリケーションの「全体感」がつかみやすい。「これで全部だ」という安心感みたいなものがある。

アタマではわかっていたつもりでも、実際にやってみるとだいぶ違う、ということはよくある。この「1ファイル方式」は、まさにそれだった。なんでも、実際にやってみるまでは、わからないものだ。


関連エントリ:
PythonのWebフレームワーク6種をかんたんに紹介
http://mojix.org/2013/04/13/python-six-wafs
Pythonを始めるなら、1ファイルの軽量Webフレームワーク「Bottle」がおすすめ
http://mojix.org/2013/01/04/python-bottle