ビルド (ソフトウェア)
ソフトウェアのビルド(英: build)は、ソースコードファイルを独立したソフトウェア生成物に変換するコンピュータ上で実行されるプロセス、またはその結果を指す。ビルドにおいて最も重要なのはコンパイルプロセスであり、ソースコードファイルを実行ファイルに変換する。
単純なプログラムでは、単一のファイルをコンパイルするだけで済むが、複雑なソフトウェアではソースコードは多数のファイルで構成されており、異なった組み合わせ方をすることで異なったバージョンを生成できる。
コンピュータプログラムのビルドは、一般にビルドツールと呼ばれるプログラムを使い、他のプログラムを制御・統合して行う。ビルドツールの例としては、make、ant、maven、SConsなどがある。ビルドユーティリティは、各種ファイル群を正しい順序でコンパイルしリンクする必要がある。また、開発時には何度もビルドを繰り返すが、前回のビルドから何も変更されていないファイルはコンパイルする必要がない(ただし、ヘッダファイルなどの依存関係も考慮する必要がある)。洗練されたビルドユーティリティは無駄な再コンパイルをしないようにして、ビルドに要する時間を短縮している。Subversionなどのバージョン管理システムはビルドユーティリティの機能を内蔵している。さらに複雑なプロセスになると、ビルド中に他のプログラムを使ってコードやデータを生成することもある。
ビルドの自動化
ビルドの自動化とは、以下のような開発作業をスクリプト化または自動化することを指す。
ビルドを自動化する利点は次の通り。
- 製品品質を向上させる。
- コンパイルとリンクの所要時間短縮
- 冗長なタスクの排除
- 手順ミスの排除
- 特定のエキスパートに依存しなくて済む。
- 履歴を保持することで、問題発生時に原因を追及しやすい。
- 時間と金を節約できる。[1]
ビルドツールはユーザーが手動で起動することもできるが、時間を決めて毎日実行する場合(夜間に行うことが多いのでナイトリービルド (Nightly Build) などと呼ぶ)、バージョン管理システムがソースファイルの変更がコミットされるたびに自動的に実行する場合などもある。
歴史
一般に、プログラムはソースファイルをコンパイルしリンクすることで、実行ファイルとなる。ソースファイルが1つしかないなら、それらの作業をコマンドラインから実行するのも簡単だが、ソースファイルが多数存在するプロジェクトでは、正しい順序とオプションで手作業するのは至難の業である。この問題を解決する手段としてmakeのようなスクリプト言語が登場した。それにより、コンパイルやリンクを正しい順序で行うスクリプトを書くことができる。GNU Make[2]では更にソースコードの依存関係を管理でき、変更された部分だけをコンパイルするインクリメンタルビルドが可能になった。これがビルドの自動化の始まりである。その第一の目的はコンパイラやリンカの呼び出しを自動化することだった。ビルドプロセスが複雑化するに従い、コンパイラ呼び出しの前後に様々な作業(バージョン管理システムからのチェックアウトや生成した実行ファイルのテスト環境への投入など)を追加するようになった。
さらに、ビルドツールは進化し、スクリプト(Makefile)自体を生成するものが登場した。これらツールは、頻繁にビルドを行う継続的インテグレーションで特に便利である。
高度なビルドツールは分散ビルドや分散処理が可能である。「分散ビルド」とは、実際のコンパイルやリンクをそれぞれ別々のマシン上で行い、ビルドを高速化する手法である。一方、分散処理とは例えば、テスト用スクリプトを複数のマシンに配置し、新たな実行ファイルのテストを分散環境で自動的に行うことなどを指す。分散ビルドを行うには、ソースコードの依存関係を自動的に把握することが必須である。一部のビルドツールは依存関係を自動的に発見でき(Ratinal ClearMake[3]、Electric Cloud ElectricAccelerator[4]など)、別のビルドツールではユーザーが定義した依存関係のみを扱う(Platform LSF lsmake[5]など)。ソースコードの依存関係を把握できるビルドツールは、コンパイルおよびリンクを並行モードで実行するよう設定できる。すなわち、コンパイラやリンカを複数コアのマシン上でマルチスレッドモードで実行することができる。全てのビルドツールが分散ビルドを実施できるわけではない。
分散ビルドの例として Xoreax の IncrediBuild[6]がある。
Makefile生成
ビルド自動化の一形態として、Makefileの自動生成がある。例えば、次のようなツールがMakefileを自動生成する。
脚注
- ^ Pragmatic Project Automation Mike Clark、2004年
- ^ GNU Make
- ^ Dr. Dobb's Distributed Loadbuilds 2009年4月13日閲覧。
- ^ Dr. Dobb's Take My Build, Please
- ^ LSF User's Guide - Using lsmake 2009年4月13日閲覧。
- ^ 高速分散コンパイル環境ソリューション 2009年6月16日閲覧。
参考文献
- Mike Clark: Pragmatic Project Automation, The Pragmatic Programmers ISBN 0-9745140-3-9