ビルドとは何か
ビルド(build)は、ソースコードや素材を入力として、実行や配布に使う成果物を作る工程です。コンパイルだけを指すとは限らず、変換、結合、最適化、ファイル生成など複数の処理を含むことがあります。
手元の開発画面が動くことと、本番向けのビルドが成功することは別です。
一文でいうと
ビルドとは、開発者が管理する元のファイルから、特定の環境で使う成果物を再現可能な手順で作ることです。
GNU Makeは、ソースファイルから実行ファイルなどの非ソースファイルを生成し、変更された入力に応じて必要な対象を更新する道具です。GNU C Language Manualでは、複数のソースをコンパイルしてオブジェクトファイルを作り、最後に結合して実行ファイルにする例が説明されています。
個人開発のどこで登場するか
Web開発のビルドでは、たとえば次の処理が行われます。
TypeScriptをJavaScriptへ変換する
複数のモジュールを配信用にまとめる
CSSや画像を最適化する
静的なHTMLページを生成する
本番では不要な開発用コードを除く
検索索引やサイトマップを生成する
実際の内容はプロジェクトの設定で決まります。build という同じ名前のコマンドでも、別のプロジェクトでは違う処理を実行します。
ソースから成果物ができるまで
一般的な流れを分けると次のようになります。
途中で警告を無視したり、ネットワークから毎回違う入力を取得したりすると、同じコミットから同じ成果物を再現しにくくなります。
コンパイル、テスト、デプロイと区別する
コンパイル:ある言語のソースを別の形式へ変換する処理
ビルド:配布・実行用の成果物を作る工程全体
テスト:期待する動作や条件を満たすか確かめること
デプロイ:成果物を特定の実行環境へ配置すること
リリース:配置した版を正式に利用者へ提供すること
ビルド手順にテストが含まれる場合もありますが、常に含まれるとは限りません。ビルド成功は、利用者の操作や本番接続先が正しいことまで保証しません。
同じ入力から作り直せる状態を保つ
ビルド成果物だけを保存し、元のコミット、依存関係、設定が不明になると、修正や再現が難しくなります。
ロックファイルで依存関係の版を管理する
ビルドに必要なコマンドと実行環境を記録する
Previewと本番で使う環境変数を区別する
生成物を手作業で修正しない
成果物と元のコミットを結び付ける
以前の成果物へ戻す手順を用意する
シークレットを成果物へ埋め込む構成では、公開後に誰でも読める可能性があります。どの処理がブラウザ配信用ファイルへ値を書き込むか確認します。
次に読む記事
入力となる元はソースコードとは何か、成果物を配置する工程はデプロイとは何かへ進みます。環境ごとの値は環境変数とは何か、公開直前の確認は公開前チェックリストで具体化できます。