コンテンツにスキップ

「ビルド (ソフトウェア)」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Melan (会話 | 投稿記録)
m ページ ビルドビルド (ソフトウェア) へ移動: 他の意味もあるため
Melan (会話 | 投稿記録)
en:Build automation(2009年5月28日 19:02:14(UTC))の部分訳をマージ
4行目: 4行目:


[[プログラム (コンピュータ)|コンピュータプログラム]]のビルドは、一般に'''ビルドツール'''と呼ばれるプログラムを使い、他のプログラムを制御・統合して行う。ビルドツールの例としては、[[make]]、[[Apache Ant|ant]]、[[Apache Maven|maven]]、[[SCons]]などがある。ビルドユーティリティは、各種ファイル群を正しい順序で[[コンパイラ|コンパイル]]し[[リンケージエディタ|リンク]]する必要がある。また、開発時には何度もビルドを繰り返すが、前回のビルドから何も変更されていないファイルは[[コンパイラ|コンパイル]]する必要がない(ただし、[[ヘッダファイル]]などの依存関係も考慮する必要がある)。洗練されたビルドユーティリティは無駄な再コンパイルをしないようにして、ビルドに要する時間を短縮している。[[Subversion]]などの[[バージョン管理システム]]はビルドユーティリティの機能を内蔵している。さらに複雑なプロセスになると、ビルド中に他のプログラムを使ってコードやデータを生成することもある。
[[プログラム (コンピュータ)|コンピュータプログラム]]のビルドは、一般に'''ビルドツール'''と呼ばれるプログラムを使い、他のプログラムを制御・統合して行う。ビルドツールの例としては、[[make]]、[[Apache Ant|ant]]、[[Apache Maven|maven]]、[[SCons]]などがある。ビルドユーティリティは、各種ファイル群を正しい順序で[[コンパイラ|コンパイル]]し[[リンケージエディタ|リンク]]する必要がある。また、開発時には何度もビルドを繰り返すが、前回のビルドから何も変更されていないファイルは[[コンパイラ|コンパイル]]する必要がない(ただし、[[ヘッダファイル]]などの依存関係も考慮する必要がある)。洗練されたビルドユーティリティは無駄な再コンパイルをしないようにして、ビルドに要する時間を短縮している。[[Subversion]]などの[[バージョン管理システム]]はビルドユーティリティの機能を内蔵している。さらに複雑なプロセスになると、ビルド中に他のプログラムを使ってコードやデータを生成することもある。

== ビルドの自動化 ==
ビルドの自動化とは、以下のような開発作業を[[スクリプト言語|スクリプト化]]または自動化することを指す。

* [[ソースコード]]をバイナリコードに[[コンパイラ|コンパイル]]する。
* バイナリコードをパッケージ化する。
* テストを実行する。
* 生産システムに配備する。
* 文書やリリースノートを作成する。

ビルドを自動化する利点は次の通り。

* 製品品質を向上させる。
* コンパイルとリンクの所要時間短縮
* 冗長なタスクの排除
* 手順ミスの排除
* 特定のエキスパートに依存しなくて済む。
* 履歴を保持することで、問題発生時に原因を追究しやすい。
* 時間と金を節約できる。<ref>[http://www.denverjug.org/meetings/files/200410_automation.pdf Pragmatic Project Automation] Mike Clark、2004年</ref>

ビルドツールはユーザーが手動で起動することもできるが、時間を決めて毎日実行する場合(夜間に行うことが多いのでナイトリービルド (Nightly Build) などと呼ぶ)、[[バージョン管理システム]]がソースファイルの変更がコミットされるたびに自動的に実行する場合などもある。

== 歴史 ==
一般に、プログラムはソースファイルをコンパイルしリンクすることで、実行ファイルとなる。ソースファイルが1つしかないなら、それらの作業をコマンドラインから実行するのも簡単だが、ソースファイルが多数存在するプロジェクトでは、正しい順序とオプションで手作業するのは至難の業である。この問題を解決する手段として[[make]]のようなスクリプト言語が登場した。それにより、コンパイルやリンクを正しい順序で行うスクリプトを書くことができる。GNU Make<ref>[http://www.gnu.org/software/make/ GNU Make]</ref>では更にソースコードの依存関係を管理でき、変更された部分だけをコンパイルするインクリメンタルビルドが可能になった。これがビルドの自動化の始まりである。その第一の目的はコンパイラやリンカの呼び出しを自動化することだった。ビルドプロセスが複雑化するに従い、コンパイラ呼び出しの前後に様々な作業(バージョン管理システムからのチェックアウトや生成した実行ファイルのテスト環境への投入など)を追加するようになった。

さらに、ビルドツールは進化し、スクリプト(Makefile)自体を生成するものが登場した。これらツールは、頻繁にビルドを行う[[継続的インテグレーション]]で特に便利である。

高度なビルドツールは分散ビルドや分散処理が可能である。「分散ビルド」とは、実際のコンパイルやリンクをそれぞれ別々のマシン上で行い、ビルドを高速化する手法である。一方、分散処理とは例えば、テスト用スクリプトを複数のマシンに配置し、新たな実行ファイルのテストを分散環境で自動的に行うことなどを指す。分散ビルドを行うには、ソースコードの依存関係を自動的に把握することが必須である。一部のビルドツールは依存関係を自動的に発見でき(Ratinal ClearMake<ref>{{cite|url= http://www.ddj.com/architect/184405385|accessdate=2009-04-13|title=Dr. Dobb's Distributed Loadbuilds}}</ref>、Electric Cloud ElectricAccelerator<ref>{{cite|url= http://www.ddj.com/architect/184415472|title=Dr. Dobb's Take My Build, Please}}</ref>など)、別のビルドツールではユーザーが定義した依存関係のみを扱う(Platform LSF lsmake<ref>{{cite|url= http://www.lle.rochester.edu/pub/support/lsf/10-lsmake.html|accessdate=2009-04-13|title=LSF User's Guide - Using lsmake}}</ref>など)。ソースコードの依存関係を把握できるビルドツールは、コンパイルおよびリンクを並行モードで実行するよう設定できる。すなわち、コンパイラやリンカを複数コアのマシン上でマルチスレッドモードで実行することができる。全てのビルドツールが分散ビルドを実施できるわけではない。

分散ビルドの例として Xoreax の IncrediBuild<ref>{{cite|url= http://www.xoreax.co.jp/|accessdate=2009-06-16|title=高速分散コンパイル環境ソリューション}}</ref>がある。

== Makefile生成 ==
ビルド自動化の一形態として、[[Make|Makefile]]の自動生成がある。例えば、次のようなツールがMakefileを自動生成する。
* [[Autotools|GNU Automake]]
* [[CMake]]
* [[:en:imake|imake]]
* [[:en:qmake|qmake]]
* [[Apache Ant]]
* [[Apache Maven]]


== 関連項目 ==
== 関連項目 ==
* [[スクリプト言語]]
*[[ソフトウェアのバージョン]]
* [[ソフトウェアテスト]]
* [[ソフトウェアのバージョン]]

== 脚注 ==
{{reflist}}

== 参考文献 ==
* Mike Clark: ''Pragmatic Project Automation'', The Pragmatic Programmers ISBN 0-9745140-3-9


{{DEFAULTSORT:ひると}}
{{DEFAULTSORT:ひると}}

2009年6月16日 (火) 00:20時点における版

ソフトウェアビルド: build)とは、ソースコードファイルを独立したソフトウェア生成物に変換するコンピュータ上で実行されるプロセス、またはその結果を指す。ビルドにおいて最も重要なのはコンパイルプロセスであり、ソースコードファイルを実行ファイルに変換する。

単純なプログラムでは、単一のファイルをコンパイルするだけで済むが、複雑なソフトウェアではソースコードは多数のファイルで構成されており、異なった組み合わせ方をすることで異なったバージョンを生成できる。

コンピュータプログラムのビルドは、一般にビルドツールと呼ばれるプログラムを使い、他のプログラムを制御・統合して行う。ビルドツールの例としては、makeantmavenSConsなどがある。ビルドユーティリティは、各種ファイル群を正しい順序でコンパイルリンクする必要がある。また、開発時には何度もビルドを繰り返すが、前回のビルドから何も変更されていないファイルはコンパイルする必要がない(ただし、ヘッダファイルなどの依存関係も考慮する必要がある)。洗練されたビルドユーティリティは無駄な再コンパイルをしないようにして、ビルドに要する時間を短縮している。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を自動生成する。

関連項目

脚注

参考文献