ビルドとは何か

ビルド(build)は、ソースコードや素材を入力として、実行や配布に使う成果物を作る工程です。コンパイルだけを指すとは限らず、変換、結合、最適化、ファイル生成など複数の処理を含むことがあります。

手元の開発画面が動くことと、本番向けのビルドが成功することは別です。

一文でいうと

ビルドとは、開発者が管理する元のファイルから、特定の環境で使う成果物を再現可能な手順で作ることです。

GNU Makeは、ソースファイルから実行ファイルなどの非ソースファイルを生成し、変更された入力に応じて必要な対象を更新する道具です。GNU C Language Manualでは、複数のソースをコンパイルしてオブジェクトファイルを作り、最後に結合して実行ファイルにする例が説明されています。

個人開発のどこで登場するか

Web開発のビルドでは、たとえば次の処理が行われます。

  • TypeScriptをJavaScriptへ変換する

  • 複数のモジュールを配信用にまとめる

  • CSSや画像を最適化する

  • 静的なHTMLページを生成する

  • 本番では不要な開発用コードを除く

  • 検索索引やサイトマップを生成する

実際の内容はプロジェクトの設定で決まります。build という同じ名前のコマンドでも、別のプロジェクトでは違う処理を実行します。

ソースから成果物ができるまで

一般的な流れを分けると次のようになります。

  1. 対象のコミットと依存関係を決める

  2. 設定と必要な環境変数を読み込む

  3. ソースの構文や型を検査する

  4. 変換、結合、生成を行う

  5. 配布用ディレクトリへ成果物を出す

  6. 成果物が起動・表示できるか確認する

途中で警告を無視したり、ネットワークから毎回違う入力を取得したりすると、同じコミットから同じ成果物を再現しにくくなります。

コンパイル、テスト、デプロイと区別する

  • コンパイル:ある言語のソースを別の形式へ変換する処理

  • ビルド:配布・実行用の成果物を作る工程全体

  • テスト:期待する動作や条件を満たすか確かめること

  • デプロイ:成果物を特定の実行環境へ配置すること

  • リリース:配置した版を正式に利用者へ提供すること

ビルド手順にテストが含まれる場合もありますが、常に含まれるとは限りません。ビルド成功は、利用者の操作や本番接続先が正しいことまで保証しません。

同じ入力から作り直せる状態を保つ

ビルド成果物だけを保存し、元のコミット、依存関係、設定が不明になると、修正や再現が難しくなります。

  • ロックファイルで依存関係の版を管理する

  • ビルドに必要なコマンドと実行環境を記録する

  • Previewと本番で使う環境変数を区別する

  • 生成物を手作業で修正しない

  • 成果物と元のコミットを結び付ける

  • 以前の成果物へ戻す手順を用意する

シークレットを成果物へ埋め込む構成では、公開後に誰でも読める可能性があります。どの処理がブラウザ配信用ファイルへ値を書き込むか確認します。

次に読む記事

入力となる元はソースコードとは何か、成果物を配置する工程はデプロイとは何かへ進みます。環境ごとの値は環境変数とは何か、公開直前の確認は公開前チェックリストで具体化できます。

参考資料