Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス
by Titus Winters, Tom Manshreck, Hyrum Wright, 竹辺 靖昭, 久富木 隆一
21章依存関係管理
Titus Winters 著
Lisa Carey 編
依存関係管理、言い換えればライブラリーやパッケージや管理外の依存関係が形成するネットワークの管理は、ソフトウェアエンジニアリングにおける、理解が最も進んでおらず最も難解な問題に属する。依存関係管理が対象とする問題は以下のようなものだ。外部の依存関係の各バージョン間での更新はどうやって行うか。バージョンといえば、各バージョンはどう記述するのか。依存関係内ではどんな類型の変更が許容または期待されるのか。他の組織が生産したコードに依存するのが賢明な場合をどうやって決めるのか。
比較として、依存関係管理に最も近接した関連トピックは、ソースコントロールである。双方の領域とも、ソースコードを扱う作業をどのように行うかを記述するものだ。ソースコントロールが取り扱うのは最も簡単な部分で、何かをチェックインするのはどこか、何かをビルドに入れるにはどうすればよいか、等だ。トランクベース開発の価値さえ受け入れてしまえば、組織にとっての日常的なソースコントロールの問題の大半は「新しいものがあるんだけどどのディレクトリーに追加すればいいかな」程度のかなり平凡なものとなる。
依存関係管理は、時間とスケールの双方に、さらなる複雑性を加える。トランクベースのソースコントロールの問題では、コード変更を行う際にはテストを実行し既存コードを破綻させないようにする必要があるという要件が、それなりに明確である。その要件は、共有コードベース内で作業しており、ある物がどのように利用されているかについての可視性があり、ビルドの発動とテストの実行ができるという観念に基づいている。依存関係管理が対象とするのは、自分の組織の外にある、アクセスも可視性も十分にはない場所でコード変更が行われている場合に生ずる問題群である。上流の依存関係が自分のプライベートなコードと整合性が取れないために、ビルドを破綻させてテストを失敗させる可能性がある。そんな場合をどう管理すればよいだろうか。外部の依存関係は取り入れるべきではないのだろうか。外部の依存関係に向かって各リリース間での一貫性を増すよう要請するべきだろうか。新バージョンへのアップデートはいつ行うか。 ...