12 Factor App シリーズ。2個目は依存関係の管理について。
Dependencies: The Twelve-Factor App
パッケージマネージャ
12 Factor app は決してライブラリに暗黙的に依存しません。
プログラミング言語にはライブラリを管理するためのパッケージマネージャが存在します。
システムワイド (site-package) にもインストールできますし、app を含む特定のディレクトリだけにインストールすることも可能です (vendoring or bundling) が、決して site-package にインストールするようなことがあってはいけません。
ツールへの依存
OS 側のツールにも暗黙的に依存してはいけません。
たとえば暗黙的な ImageMagick や curl の存在には依存してはいけません。 すべてのシステムに存在することや適切なバージョンが存在することを保証できないからです。
もし、ツールが必要であれば明示的に依存関係を書かなければなりません。
依存関係宣言と依存関係分離
すべての依存関係は依存関係宣言を使って明示的に宣言されます。 また、app の実行時には依存関係分離ツールを使って依存関係がシステムに漏れ出さないようにしなければなりません。
これは開発環境にもプロダクション環境にも適用されます。
具体例
Ruby では依存関係宣言のために Gemfile を利用し、依存関係分離のために bundle exec を利用します。
Python では依存関係宣言のために Pip を利用し、依存関係分離のために Virtualenv を利用します。
たとえ C 言語であっても依存関係宣言に Autoconf を利用し、依存関係分離のために静的リンクを利用できます。
たとえツールが何であろうと、依存関係宣言と依存関係分離はは常に一緒に行う必要があります。