ThoughtWorksが継続的デリバリ(Continuous Delivery,CD)であるGoをオープンソースにした。このツールはCruiseControlを起源にしており、開発プロセス全体をカバーするパイプラインプロセスを提供する。つまり、継続的統合、テスト、デプロイメントだ。
GoのGitHubアカウントはまだソスコードがアップされるのを待っている状態だが、開発者はクライアントとエージェントのバイナリを入手できる。これらはWindows、Mac OS X、Linux、Solarisで利用できる。あるいは、JavaのJARとしても利用可能だ。
InfoQはKen Mugrage氏にGoの計画を聞いた。氏はThoughtWorks Studiosでオープソースプログラムマネージャだ。
InfoQ: Goの魅力は何でしょうか。
パイプラインというコンセプトには、ビルド、テスト、デブロイをモデル化するプロセスが含まれています。GoはCDツールとして作られており、このパイプラインというコンセプトが中核にあります。パイプラインを第一級のコンセプトにし、依存性管理を“普通に動く”ようにすることで複雑なワークフローをシンプルにモデル化できます。他の多くの製品も同じような機能を提供しようとしていますが、見せかけか、あるいは、プラグインでパイプラインのようなものを提供しているだけです。
InfoQ: Goの歴史を教えてください。
Goは当初、"Cruise"という名前の商用製品として2007年に登場しました。そのとき、開発チームはすぐに次のことに気付きました。すなわち、従来の継続的統合ソリューションのアーキテクチャはビルド、テスト、デプロイメントのワークフローの実装をサポートしないということです。そして、完全に新しい商品を作ることになったのです。その後のリリースで、機能面でも大規模で複数のビルドをサポートするという機能の面でも進化しました。そしてバージョン2.0の製品が出来上がりました。Goと再命名されたこの製品には、大規模な受け入れテストを実行する機能やテスト結果をレポートし、テストが現在失敗しているかどうか、どのチェックインがテスト失敗を引き起こしたのかを知らせてくれます。これは、当時は商用CIツールとしてはユニークな機能でした。
InfoQ: なぜGoをオープンソースにしたのですか。
端的に答えれば、オープンソースにするのが正しいという結論に至ったからです。ThoughtWorksは企業として、堅実な技術的実践を促進することに注力しています。私たちの3つの原則(ピラーと呼んでいますが)のひとつは"ソフトウエアエクセレンスを擁護し、IT産業に革新を起こす"ということです。Goをオープンソースにすることは、しっかりとした継続的デリバリプロセスを促進させる方法だと思っています。
多くの産業がプラットフォームやインフラとなるソフトウエアがOSSになることを期待しています。これには多くの理由があります。セキュリティと品質に対する高い期待、より豊かなコミュニティによる貢献などです。Goはデータセンターの一部であり、多くのユーザはインフラと捉えています。私たちの顧客はGoをアプリケーションをビルドし配置するというライフサイクルを管理するために使います。
InfoQ: 完全に自動化された配置パイプラインを達成するためにはGoには他にどのようなツールが必要ですか。
これは難しい質問です。Goには何も必要ありません。必要なツールを決めるのはユーザのビルド/テスト/デプロイメントのサイクルです。
Goはソフトウエアがコードの固まりから運用環境で顧客から触られるようになるまでの過程を管理します。バージョン管理システムやパッケージリポジトリの変更を監視し、変更が発生したら、ユーザのビルド/テスト/デプロイメントのサイクルで必要になるツールを実行します。Apache Ant、Apache Maven、Microsoft MSBuildのようなビルド管理ツール。Selenium、Twist、Cucumberのような自動テストツール、Chef、Puppetのようなインフラ管理ツールが含まれています。Goはコマンドラインから実行できるツールであればどんなものでも実行できます。
InfoQ: 商用バージョンは今後も開発し続けるのですか。サポートも提供し続けますか。
商用のアドオンとプロフェッショナルサポートを提供するつもりです。アドオンがどのようなものになるかは要望次第ですが、大規模な配置のために性能を改善する目的で外部データベースとの接続を提供する機能などが考えられます。
既存の顧客のほとんどと新しいモデルについて議論をし、例外なく喜んでいただけたのは本当にうれしかったです。
Goはオンプレミスでインストールして利用することも、クラウドで利用することもできるCDツールだが、ThoughtWorksはSnapという別のCDソリューションも提供している。これはホスティングされたCDツールだ。GoはCDプロセスを自動化し数百のマシンで動かすことができるまでスケールアップできる。SnapのプロダクトオーナであるBadrinath Janakiraman氏によれば、Snapの目的は“より単純な配置ニーズ”を満たすことだ。氏によれば、“シンプルなアプリケーション向けというわけではありません。あくまでシンプルなテスト/デプロイメントモデル“を実現するためだ。
GoよりSnapが優れている点は“Snapを使えば‘サーバレス’な組織がCDを最小限で実現できます。一度チームがオンデマンドでリリースできるようにアプリケーションを設計したら、その後のデプロイメントのニーズは複雑になるのでSnapの利用をやめるかもしれません。”とJanakiraman氏は言う。
SnapはJava、Ruby、Python、JavaScript & Node.jsプロジェクトをサポートしている。また、サポートしているデータベースは、Sqlite3、PostgreSQL、MySQL、Redis、CouchDB、MongoDBなど数多い。Capybara、Selenium、PhantomJSなどでテストでき、HerokuやAWSへのデプロイメントにも対応している。