ソフトウェアビルドとは、ソースコードファイルをコンピュータ上で実行可能なスタンドアロンのソフトウェア成果物に変換するプロセス、またはその結果として得られる成果物のことです。 [ 1 ] バージョン管理、コード品質分析、コンパイル、リンクなどの機能が含まれます。
ソフトウェア制作では、ビルドはパフォーマンスと配布のためにソフトウェアを最適化し、'. exe'、'.deb'、'.apk'などの形式にパッケージ化します。[ 2 ] [ 3 ]
ビルドプロセスでは、 CMake、Make、Gradleなどの専用ツールがよく使用され、JenkinsやGitHub Actionsなどの自動化システムと統合されます。進歩にもかかわらず、依存関係の競合、プラットフォームの互換性、コンパイル時間の長さなどの課題は依然として問題となっています。[ 4 ] [ 5 ] [ 6 ]
ソフトウェア開発において、ソフトウェアの構築は、多くの異なる機能を含むエンドツーエンドのプロセスです。これらの機能の一部を以下に説明します。
バージョン管理機能は、ワークスペースの作成と更新、ベースライン設定、レポート作成などの作業を実行します。また、ビルドプロセスを実行するための環境を構築し、ビルドプロセスの入力と出力に関するメタデータを取得することで、再現性と信頼性を確保します。
Git、AccuRev、StarTeamなどのツールは、履歴上の特定のポイントを重要なものとしてタグ付けする機能などを提供することで、これらの作業を支援します。
静的プログラム分析/静的コード分析とも呼ばれるこの機能は、開発者がコード品質の7つの軸(コメント、単体テスト、重複、複雑性、コーディング規則、潜在的なバグ、アーキテクチャと設計)を遵守しているかどうかを確認する役割を担っています。[ 7 ]
プロジェクトに高品質なコードを持たせることで、バグが減り、保守性、拡張性、可読性などの非機能要件にも影響を及ぼし、それが企業のROIに直接的な影響を与える。 [ 8 ]
これは、ビルドプロセス管理におけるごく一部の機能にすぎません。コンパイル機能は、ソースファイルを直接実行可能なオブジェクトまたは中間オブジェクトに変換します。すべてのプロジェクトでこの機能が必要になるわけではありません。
単純なプログラムの場合、コンパイルプロセスは単一のファイルで構成されるが、複雑なソフトウェアの場合、ソースコードは多数のファイルで構成され、さまざまな方法で組み合わせることで、多くの異なるバージョンが生成される可能性がある。

リンカまたはリンクエディタとは、オブジェクトファイルやライブラリファイルなどの中間ソフトウェアビルドファイルを、プログラムやライブラリなどの単一の実行可能ファイルに結合するコンピュータプログラムです。リンカは多くの場合、コンパイラやアセンブラを含むツールチェーンの一部であり、これらのツールチェーンはリンカが処理する中間ファイルを生成します。リンカは他のツールチェーンツールと統合されている場合があり、ユーザーがリンカと直接やり取りする必要はありません。
出力を直接メモリに書き込むよりシンプルなバージョンはローダーと呼ばれますが、ロードは通常、別のプロセスとみなされます。[ 9 ] [ 10 ]
コンピュータプログラムの構築プロセスは通常、ビルドツールと呼ばれる、他のプログラムを調整および制御するプログラムによって管理されます。このようなプログラムの例としては、 make、Gradle、Ant、Maven、Rake、SCons、Phingなどがあります。ビルドユーティリティは通常、さまざまなファイルを正しい順序でコンパイルする必要があります。特定のファイルのソースコードが変更されていない場合は、再コンパイルする必要がない場合があります(「必要ない」ではなく「必要ない」です。なぜなら、そのファイル自体が変更された他のファイルに依存している可能性があるからです)。高度なビルドユーティリティとリンカは、ビルドの完了に必要な時間を短縮するために、再コンパイルする必要のないコードの再コンパイルを回避しようとします。より複雑なプロセスでは、ビルドプロセスやソフトウェアの一部として、他のプログラムがコードやデータを生成する場合があります。
