ビルド (ソフトウェア)とは? わかりやすく解説

Weblio 辞書 > 同じ種類の言葉 > 情報 > コンピュータ > ソフトウェア > ビルド (ソフトウェア)の意味・解説 

ビルド (ソフトウェア)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/03/02 09:19 UTC 版)

ソフトウェアビルド: build)は、プログラミング言語で書かれたソースコードファイルや各種リソースファイル[要曖昧さ回避]を独立したソフトウェア生成物に変換するコンピュータ上で実行されるプロセス、またはその結果を指す。ビルドの最終生成物はバイナリ形式実行ファイルであったり、再利用可能なライブラリであったり、バイトコードあるいはそれらをまとめたアーカイブであったりすることもある[1]

概要

ビルドにはいくつかのステップがあり、その内容はプログラミング言語やビルドツール、開発環境や実行環境(ターゲットアーキテクチャ、オペレーティングシステムあるいは仮想マシン)によっても異なる。例えばC言語あるいはC++の場合、ソースファイル(ソースコード)をコンパイラによってオブジェクトファイル(オブジェクトコード)に翻訳(コンパイル)した後、リンカによってオブジェクトコードを結合し、実行ファイルを生成する。プログラムから実行時に参照される各種アイコン画像やローカライズされた文字列などを実行ファイル内に「リソース」として含めることもあり、ビルドプロセスでリソースのコンパイルとリンクを実行する。

単純なプログラムでは、単一のソースファイルをコンパイルするだけで済むが、複雑なソフトウェアでは通例メンテナンス性向上の観点からソースコードはモジュールごとに分類・分割された多数のファイルによって構成されており、各ファイルを個別にコンパイル(分割コンパイル)した後で、リンク時に実体の依存関係を解決する。C/C++のような原始的なプログラミング言語では、ヘッダファイルを利用して、ユーザー定義型や定数、および関数などの定義または宣言を共有することが多い。ヘッダーファイルのインクルードにより、ファイル間の依存関係が発生する。

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

ビルドの自動化

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

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

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

  • 製品品質を向上させる。
  • コンパイルとリンクの所要時間短縮
  • 冗長なタスクの排除
  • 手順ミスの排除
  • 特定のエキスパートに依存しなくて済む。
  • 履歴を保持することで、問題発生時に原因を究明しやすい。
  • 時間と金を節約できる[2]

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

歴史

実行ファイル形式のプログラムを成果物(最終出力)とする方式のソフトウェア開発では、まずソースファイル(ソースコード)をコンパイルしてオブジェクトファイル(オブジェクトコード)に変換した後、そのオブジェクトファイルをリンクし、コンピュータ(オペレーティングシステム)が直接実行できるバイナリ形式のファイルを生成する作業が必要となる。ソースファイルが1つしかないならば、それらの作業をコマンドラインから実行するのも簡単だが、ソースファイルが多数存在するプロジェクトでは、正しい順序とオプションで手作業するのは至難の業である。この問題を解決する手段としてmakeのようなスクリプト言語が登場した。それにより、コンパイルやリンクを正しい順序で行うスクリプトを書くことができる。GNU Make[3]では更にソースコードの依存関係を管理でき、変更された部分だけをコンパイルするインクリメンタルビルドが可能になった。これがビルドの自動化の始まりである。その第一の目的はコンパイラやリンカの呼び出しを自動化することだった。ビルドプロセスが複雑化するに従い、コンパイラ呼び出しの前後に様々な作業(バージョン管理システムからのチェックアウトや生成した実行ファイルのテスト環境への投入など)を追加するようになった。

さらに、ビルドツールは進化し、スクリプト(Makefile)自体を生成するものが登場した。これらのツールは、頻繁にビルドを行う継続的インテグレーションで特に便利である。また、複数のターゲットプラットフォームや異なる開発環境に応じたビルドスクリプトを必要に応じて自動生成するのにも役立つ。

高度なビルドツールは分散ビルドや分散処理が可能である。「分散ビルド」とは、実際のコンパイルやリンクをそれぞれ別々のマシン上で行い、ビルドを高速化する手法である。一方、分散処理とは例えば、テスト用スクリプトを複数のマシンに配置し、新たな実行ファイルのテストを分散環境で自動的に行うことなどを指す。分散ビルドを行うには、ソースコードの依存関係を自動的に把握することが必須である。一部のビルドツールは依存関係を自動的に発見でき(Rational ClearMake[4]、Electric Cloud ElectricAccelerator[5]など)、別のビルドツールではユーザーが定義した依存関係のみを扱う(Platform LSF lsmake[6]など)。ソースコードの依存関係を把握できるビルドツールは、コンパイルおよびリンクを並行モードで実行するよう設定できる。すなわち、コンパイラやリンカを複数コアのマシン上でマルチスレッドモードで実行することができる。全てのビルドツールが分散ビルドを実施できるわけではない。

分散ビルドの例として Xoreax の IncrediBuild[7]がある。

インクリメンタルビルド

複数のソースファイルから成るソフトウェアの開発プロセスにおいて、ソースファイルにちょっとした変更を加えただけで、毎回すべてのソースファイルを無条件にコンパイルし直すのは効率が悪い。自動化されたビルドシステムでは、タイムスタンプなどを利用して変更のあったファイルのみを検出し、そのファイル自身とそれに依存する関連ファイルのみをコンパイルし直してリンクする「インクリメンタルビルド」(増分ビルド)をサポートしている[8][9]。これにより、コード編集・ビルド・実行・テストの開発サイクルを高速化することができる。

さらに、変更のあったモジュールのみをリンクし直す「インクリメンタルリンク」(増分リンク)をサポートする処理系も存在する[10]。実行時に個別のライブラリモジュールをロードして結合する動的リンクライブラリ方式の場合、リンク処理はシンボル情報のみが書かれたインポートライブラリを実行ファイルにリンクするだけなので高速だが、ビルド時にすべてのモジュールを結合して1つのファイルを生成する静的リンクライブラリ方式の場合、リンク処理には時間がかかるため、インクリメンタルリンクが特に効果を発揮する。

ビルドシステムではなく、コンパイラモジュール自身が「インクリメンタルコンパイル」(増分コンパイル)をサポートしている言語もある。例えばRustのコンパイラはバージョン1.24以降でインクリメンタルコンパイルをサポートする[11][12]。Rustコンパイラは、最初のステップとして抽象構文木 (abstract syntax tree, AST) を構築し、次にASTを解析することで型情報 (type information) および個々の関数に関する中位の中間表現 (mid-level intermediate representation, MIR) を生成する。その後、エラーが見つからなければ、ソースレベルのモジュールごとにオブジェクトファイルを生成しながら、MIRから機械語コードに変換される。これらの型情報やMIR、およびオブジェクトファイルの要素を中間結果 (intermediate result) とみなし、ディスクにキャッシュとして保存しておき、2回目以降のコンパイルではキャッシュからロードする。また依存関係グラフをもとに、変更のあった要素だけを更新する。ただしRustのインクリメンタルコンパイルは2回目以降のビルドサイクルを高速化させるものの、最終的に生成されるバイナリの実行速度を若干低下させるデメリットがあるため、リリースビルドでは有効化されない。

Go

Go言語のコマンドラインツールは、ソースファイルのコンパイル[13]とパッケージのビルド[14]をそれぞれ別々にサポートするが、Go 1.10以降のgo buildコマンドは、純粋にソースファイルの内容、ビルドフラグ、およびコンパイル済みパッケージ内に保存されているメタデータに基づいて、無効になったパッケージを検出してインクリメンタルビルドするようになり、ファイルの更新日時は無関係となった[15]

Makefile生成

ビルド自動化の一形態として、Makefileの自動生成がある。例えば、次のようなツールがMakefileを自動生成する。

脚注

[脚注の使い方]

参考文献

関連項目


「ビルド (ソフトウェア)」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。



ビルド (ソフトウェア)と同じ種類の言葉


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ビルド (ソフトウェア)」の関連用語

ビルド (ソフトウェア)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ビルド (ソフトウェア)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのビルド (ソフトウェア) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS