潤沢な計算資源をシステム開発でいかに活用するか
このセッションで「CIサーバの重要性」について語りたいとする川口氏が、最初にスライドで示したのは、有名な「ムーアの法則」のグラフと、SPARCチップのロードマップに関する表だ。この2つから言えることとして、今後も比較的短いスパンでコンピュータの計算能力は飛躍的に向上を続け、同じ計算能力を得るためのコストは下がっていく点を指摘した。
一方で問題となるのは、生身の人間である「開発者」のコスト対効果が今後もそれほど大きく変化しない点である。そのため川口氏は「ソフトウェア産業では(利用コストが安くなっていく)計算機資源の、より効率の良い活用が欠かせない」とした。
「こうした経済的な必然性とは別に、開発者自身の意識としても、旧来の人海戦術的なスタイルから脱却する必要がある。むしろ、潤沢に利用できる計算機のパワーを集め、少人数でも、メンバーの能力に応じて、より大きな成果が得られるような仕組みを作っていくべきだと感じている」(川口氏)
川口氏は、これを「労働集約型」から「計算機集約型」への転換という言葉で表現した。
計算機資源の有効な活用を考えるにあたり、カギとなる技術的な動向として、川口氏が挙げたのは「クラウド」や「仮想化」だ。これらの技術が進歩するに従って、計算能力のみを一時的に調達したり、物理的なマシンの能力を「仮想マシン」としてスライスして利用することがより容易になる。これによって「見かけ上のマシン数」は指数関数的に増大していく。
「見かけ上のマシン数の増加は、結果的に管理する人間の負担を増やすことになる。僕がイメージするより効率的な開発のイメージは“羊飼い”。多数の羊にも似た膨大な数のマシンを、ひとりの人間がうまく舵取りしながら仕事をしていくといったものになるのではないかと考えている」(川口氏)
川口氏が「より重要」とする仮想化技術の本質は、単に仮想マシンとして計算機の能力をスライスすることだけではなく「仮想計算機の一時的な割り当てや解除、いわゆるプロビジョニングを自動的、かつリアルタイムに行えるようになっている」点だとしている。
これが可能になると、実際のデプロイメントモデルにも変化が起こる。例えば、アプリケーションのバージョンアップを行う際に、旧バージョンと新バージョンを仮想サーバ上で並列的に動作させる。トラフィックを少しずつ切り替えていき、何か不具合が発見された場合には、旧バージョンに切り戻してサービスの停止を防ぎつつ、移行を図るといった方法だ。
「この例は具体的なテクニックだが、“小さなスケールでの並列化を奨励するコストモデル”であるということを意味している。同じ計算機能力を同じ値段で利用したいのであれば、とにかく仮想計算機を“横に並べる”ことにより、時間を短縮できることがポイント。従来なら、リースなどを使い、数か月単位で計算機を増やすといった方法をとっていたが、これがクラウドと仮想化の組み合わせによって、数時間、数日単位でもペナルティなしに実現できるようになっている点は大きい」(川口氏)
これは、「スローテスト問題」(テストを書くと、そのテストの実行に時間がかかる)解決の糸口になるという。計算機の能力を低コストで潤沢に利用できる以上、テストを並列して実行できる環境さえあれば、人間が個々のテストの効率化のために労力を費やす必要はないというわけだ。この「あらゆる階層でのテストの並列実行」は、川口氏が長く問題意識を持って取り組んでいるテーマだという。
また、並列化に加えて、クラウドや仮想化技術が拍車をかけるもうひとつのトレンドは「自動化」だ。さまざまなIaaSに対して、構成や自動スケーリングを行う「RightScale」のようなツールが人気を得ているのに加え、開発ツールについても、インストールやビルド、実行経過の機械可読化を自動的に行う仕組みが多くの開発者の手によって作られており、この流れは、今後も続いていくだろうとする。
川口氏は、「潤沢な計算能力」「並列化」「自動化」「クラウド」といった開発環境を巡る変化に対応し活用することが、開発作業の効率化において必須だと述べる。そして、開発現場でこの効率化を十分に実現するためには、多くのサービスや大量の計算機を指揮する「執事」が必要であり、その執事としての役割を果たすシステムこそが、川口氏らの手がける「Jenkins」であるとした。
「Jenkinsの開発にあたっては、当初から明文化していたわけではなかったが、こうした考え方が漠然と頭の中にあった。分散ビルドにも5年ほど前のかなり早い段階で対応しており、100以上の計算機とその利用状況を把握する基盤や、多数の計算機にまたがってプラグインを実行する仕組みが存在している」(川口氏)