目次
汎用ビルドツール
Make
Makeは最も古くからある汎用ビルドツールの一つで、特にC/C++プロジェクトで広く使われています。
主要コマンド
# 基本的なビルド実行(デフォルトターゲット)
make
# 特定のターゲットをビルド
make target_name
# クリーンビルド(通常は生成物を削除するターゲット)
make clean
# 並列ビルド(8つのジョブを同時実行)
make -j8
# ドライラン(実際のコマンドを実行せず表示のみ)
make -n
# デバッグ情報を表示
make --debug
# 特定のMakefileを使用
make -f specific_makefile
よくあるはまりポイント
- インデントはタブ文字を使用する必要があり、スペースでは機能しない
- 依存関係の誤った定義によるビルドスキップ
- シェルコマンドは別々の独立したシェルで実行される(環境変数等の状態は継承されない)
- マルチコアビルドでの競合状態
- 条件分岐が直感的でない
CMake
CMakeはビルドシステムジェネレータで、異なるプラットフォームやIDEのためのビルドファイルを生成します。
主要コマンド
# ビルドディレクトリの作成と初期設定
mkdir build && cd build
cmake ..
# 特定のジェネレータを指定してCMakeを実行
cmake -G "Unix Makefiles" ..
cmake -G "Visual Studio 16 2019" ..
cmake -G "Xcode" ..
# ビルド設定を指定
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake -DCMAKE_BUILD_TYPE=Debug ..
# ビルド実行
cmake --build .
# 特定のターゲットをビルド
cmake --build . --target target_name
# インストール
cmake --install .
cmake --build . --target install
# クリーン
cmake --build . --target clean
# CMakeキャッシュを削除してリセット
rm -rf CMakeCache.txt CMakeFiles/
よくあるはまりポイント
- CMakeのバージョン間の非互換性
- プロジェクトやライブラリの検出に関する問題
- 変数スコープの理解不足
- ソースディレクトリとビルドディレクトリの混同
- クロスコンパイル設定の複雑さ
Ninja
Ninjaは高速ビルドのために設計された、低レベルなビルドシステムです。
主要コマンド
# ビルド実行
ninja
# 特定のターゲットをビルド
ninja target_name
# クリーンビルド
ninja clean
# 再ビルド
ninja -t clean && ninja
# 依存関係の表示
ninja -t deps
# ターゲット一覧の表示
ninja -t targets
# 詳細な出力
ninja -v
よくあるはまりポイント
- 通常は直接使うよりもCMakeなどから生成して使う
- 構文が厳格でエラーメッセージが簡素
- 大規模プロジェクトでのメモリ使用量
- デバッグ情報が限られている
Bazel
Googleによるスケーラブルでクロスプラットフォームなビルドシステムです。
主要コマンド
# プロジェクトのビルド
bazel build //path/to:target
# 全てのターゲットをビルド
bazel build //...
# テスト実行
bazel test //path/to:test_target
# 全てのテストを実行
bazel test //...
# アプリケーション実行
bazel run //path/to:binary
# クリーン
bazel clean
# 完全クリーン(キャッシュも含む)
bazel clean --expunge
# 依存関係の可視化
bazel query --noimplicit_deps "deps(//path/to:target)" --output graph
よくあるはまりポイント
- 初期の学習曲線が急
- WORKSPACE設定とリポジトリルールの複雑さ
- Sandboxingによる問題(特に外部リソースへのアクセス)
- キャッシュの不適切な使用によるビルドの再現性問題
- ビルドパスとターゲット仕様の理解
Buck
Facebookによる高速で再現性のあるビルドシステムです。
主要コマンド
# ターゲットのビルド
buck build //path/to:target
# 複数ターゲットのビルド
buck build //path/to:target1 //path/to:target2
# テスト実行
buck test //path/to:test
# アプリケーション実行
buck run //path/to:binary
# クリーン
buck clean
# キャッシュの無効化
buck clean --cache
# ターゲットの依存関係可視化
buck query "deps(//path/to:target)"
よくあるはまりポイント
- セルの概念とマルチリポジトリ設定の複雑さ
- 設定ファイル(BUCK)の構文エラー
- パッケージとエイリアスルールの理解
- キャッシュと増分ビルドの問題
- 複数プラットフォーム向けビルドの設定
言語固有のビルドツール
JavaScript/Node.js系
npm
Node.jsのデフォルトパッケージマネージャです。
主要コマンド
# プロジェクト初期化
npm init
npm init -y # デフォルト値ですべて承認
# パッケージインストール
npm install package_name
npm i package_name # 短縮形
# 開発依存関係としてインストール
npm install package_name --save-dev
npm i -D package_name # 短縮形
# グローバルインストール
npm install -g package_name
# package.jsonの依存関係をすべてインストール
npm install
npm i
# パッケージの更新
npm update
npm update package_name
# package.jsonのスクリプト実行
npm run script_name
npm start # npm run startの短縮形
npm test # npm run testの短縮形
# アウトデートパッケージの確認
npm outdated
# パッケージの削除
npm uninstall package_name
npm remove package_name # 別名
# npmキャッシュのクリア
npm cache clean --force
# package-lock.jsonの再生成
npm i --package-lock-only
よくあるはまりポイント
- package-lock.jsonの競合
- 異なるnpmバージョン間の非互換性
- ライブラリバージョン間の依存関係の衝突
- グローバルvsローカルインストールの混同
- 権限問題(特にLinux/MacOSでのグローバルインストール)
Yarn
Facebookによる代替NPMクライアントです。
主要コマンド
# プロジェクト初期化
yarn init
yarn init -y # デフォルト値ですべて承認
# パッケージインストール
yarn add package_name
# 開発依存関係としてインストール
yarn add package_name --dev
yarn add -D package_name # 短縮形
# グローバルインストール
yarn global add package_name
# package.jsonの依存関係をすべてインストール
yarn
yarn install
# パッケージの更新
yarn upgrade
yarn upgrade package_name
# package.jsonのスクリプト実行
yarn run script_name
yarn start # yarn run startの短縮形
yarn test # yarn run testの短縮形
# アウトデートパッケージの確認
yarn outdated
# パッケージの削除
yarn remove package_name
# キャッシュのクリア
yarn cache clean
よくあるはまりポイント
- npmとyarnの混合使用によるロックファイルの不整合
- Yarn 1.xとYarn 2.x+(Berry)の大きな違い
- workspacesの設定ミス
- resolutionsフィールドの正しい使用方法
- オフラインモードでの問題
pnpm
ディスク容量を節約するパッケージマネージャです。
主要コマンド
# プロジェクト初期化
pnpm init
# パッケージインストール
pnpm add package_name
# 開発依存関係としてインストール
pnpm add -D package_name
# グローバルインストール
pnpm add -g package_name
# package.jsonの依存関係をすべてインストール
pnpm install
# パッケージの更新
pnpm update
pnpm update package_name
# package.jsonのスクリプト実行
pnpm run script_name
pnpm start
pnpm test
# パッケージの削除
pnpm remove package_name
# キャッシュのクリア
pnpm store prune
よくあるはまりポイント
- シンボリックリンクとハードリンクに関連する問題
- npmやyarnからの移行時の互換性
- フラットな依存関係構造ではなく厳格な依存関係ツリーを使用
- 一部のツールやフレームワークとの互換性問題
- workspacesの設定と理解
Webpack
モジュールバンドラーで、Webアプリケーションのアセットをバンドルします。
主要コマンド
# 開発モードでビルド
npx webpack --mode=development
# 本番モードでビルド
npx webpack --mode=production
# 設定ファイルを指定してビルド
npx webpack --config webpack.specific.config.js
# 開発サーバーの起動
npx webpack serve
# ウォッチモードでビルド(変更を監視)
npx webpack --watch
# バンドルの分析
npx webpack --analyze
よくあるはまりポイント
- ローダーとプラグインの区別と適切な設定
- コード分割とチャンキングの最適化
- 大きなバンドルサイズと長いビルド時間
- 開発環境と本番環境の設定差分管理
- ソースマップの適切な設定
- 複雑な設定ファイルの管理
Vite
次世代フロントエンド開発ツールで、非常に高速な開発体験を提供します。
主要コマンド
# プロジェクト作成
npm create vite@latest my-app
npm create vite@latest my-app -- --template react
# 開発サーバー起動
npm run dev
# プロジェクトビルド
npm run build
# ビルド結果のプレビュー
npm run preview
# 依存関係の最適化
npx vite optimize
よくあるはまりポイント
- Webpackからの移行時の設定の違い
- 開発環境と本番環境での動作の違い
- レガシーブラウザ対応の設定
- プラグイン設定のミス
- 特定フレームワークとの統合時の問題
Gulp
ストリームベースのタスクランナーです。
主要コマンド
# デフォルトタスク実行
npx gulp
# 特定のタスク実行
npx gulp task_name
# 複数タスクの逐次実行
npx gulp task1 task2
# タスク一覧表示
npx gulp --tasks
# 詳細情報表示
npx gulp --verbose
よくあるはまりポイント
- Node.jsストリームの理解不足
- 古いGulp 3.xとGulp 4.xのタスク定義の違い
- 非同期タスクの正しい終了処理
- プラグインのバージョン互換性
- エラーハンドリングの不備
Grunt
設定ベースのタスクランナーです。
主要コマンド
# デフォルトタスク実行
npx grunt
# 特定のタスク実行
npx grunt task_name
# 複数タスクの実行
npx grunt task1 task2
# 詳細情報表示
npx grunt --verbose
# 特定の設定ファイルを使用
npx grunt --gruntfile specific-gruntfile.js
よくあるはまりポイント
- 冗長な設定ファイルの管理
- タスク間のデータ受け渡し
- エラーハンドリングの複雑さ
- パフォーマンスの問題(ディスクI/Oの多用)
- ファイルパスの正規表現理解
Java系
Maven
Javaプロジェクト管理とビルドツールです。
主要コマンド
# プロジェクトビルド
mvn clean install
# テスト実行
mvn test
# テストスキップしてビルド
mvn clean install -DskipTests
# 特定フェーズを実行
mvn compile
mvn package
# 依存関係ツリーの表示
mvn dependency:tree
# プロジェクト作成
mvn archetype:generate
# ローカルリポジトリの依存関係を強制更新
mvn clean install -U
# 特定のプロファイルを有効化
mvn clean install -P profile_name
# Mavenラッパーの生成
mvn wrapper:wrapper
よくあるはまりポイント
- 複雑なpom.xml構造の管理
- 依存関係の衝突解決
- スコープ(compile, test, provided, runtime)の理解不足
- マルチモジュールプロジェクトの管理
- プラグインのバージョン指定がないことによる予期せぬ動作
Gradle
柔軟でパワフルなJVM言語向けビルドツールです。
主要コマンド
# プロジェクトビルド
./gradlew build
# テスト実行
./gradlew test
# クリーンビルド
./gradlew clean build
# 特定のタスク実行
./gradlew taskName
# タスク一覧表示
./gradlew tasks
# 依存関係の表示
./gradlew dependencies
# プロジェクト情報の表示
./gradlew projects
# デーモンの停止
./gradlew --stop
# 特定のプロジェクトのタスク実行(マルチプロジェクト)
./gradlew :subproject:taskName
# デバッグモード
./gradlew taskName --debug
よくあるはまりポイント
- Groovy DSLとKotlin DSLの混同
- タスク依存関係と実行順序の理解不足
- configurationとtaskの違いの理解
- Gradle Daemonの問題
- キャッシュとインクリメンタルビルドの仕組み理解
- Mavenとの互換性問題
Ant
XMLベースの古いJavaビルドツールです。
主要コマンド
# デフォルトターゲット実行
ant
# 特定のターゲット実行
ant target_name
# ビルドファイルを指定
ant -f specific-build.xml
# プロパティを設定
ant -Dproperty=value
# 詳細表示
ant -verbose
# デバッグモード
ant -debug
よくあるはまりポイント
- XMLの冗長性と可読性の低さ
- 依存関係管理機能の欠如(Ivy併用が必要)
- タスク間のデータ共有の複雑さ
- プロジェクト構造の標準化がない
- エラーメッセージの不明瞭さ
.NET系
MSBuild
Microsoft .NETアプリケーションのビルドプラットフォームです。
主要コマンド
# プロジェクトのビルド
msbuild Project.csproj
# ソリューションのビルド
msbuild Solution.sln
# リリースビルド
msbuild Project.csproj /p:Configuration=Release
# 特定ターゲットの実行
msbuild Project.csproj /t:Target
# 複数ターゲットの実行
msbuild Project.csproj /t:Clean;Build
# 詳細表示
msbuild Project.csproj /v:detailed
# プロパティの設定
msbuild Project.csproj /p:Property=Value
# 最大CPUカウント使用
msbuild Project.csproj /m
よくあるはまりポイント
- 複雑なXML構造の理解と管理
- カスタムターゲットとタスクの実装の複雑さ
- プロパティとアイテムの違いの理解
- ビルド順序の制御の難しさ
- 条件付きビルドロジックの複雑な構文
dotnet CLI
.NET Coreアプリケーションのビルドとランタイム管理ツールです。
主要コマンド
# プロジェクト作成
dotnet new console
dotnet new webapi
dotnet new classlib
# プロジェクトビルド
dotnet build
# プロジェクト実行
dotnet run
# テスト実行
dotnet test
# パッケージ発行
dotnet publish
# NuGetパッケージの追加
dotnet add package PackageName
# プロジェクト参照の追加
dotnet add reference ../OtherProject/OtherProject.csproj
# ソリューションにプロジェクトを追加
dotnet sln add Project/Project.csproj
# NuGetパッケージの復元
dotnet restore
# クリーン
dotnet clean
よくあるはまりポイント
- .NET Frameworkと.NET Core/.NET 5+の違いの理解
- グローバルツールとローカルツールの混同
- ターゲットフレームワークバージョンの理解不足
- パッケージ参照とプロジェクト参照の管理
- 異なるランタイム環境での動作の違い
Python系
setuptools
Pythonのパッケージング標準ライブラリです。
主要コマンド
# パッケージのインストール
pip install .
# 開発モードでのインストール
pip install -e .
# ソースディストリビューションの作成
python setup.py sdist
# ホイールの作成
python setup.py bdist_wheel
# egg形式の作成
python setup.py bdist_egg
# クリーン
python setup.py clean
よくあるはまりポイント
- setup.pyとPyproject.toml、setup.cfgの関係理解
- パッケージデータファイルの含め方
- 依存関係の適切な指定方法
- 開発依存関係と実行時依存関係の区別
- エントリーポイントの正しい定義
pip
Pythonパッケージのインストールと管理ツールです。
主要コマンド
# パッケージインストール
pip install package_name
# 特定バージョンのインストール
pip install package_name==1.0.0
# 要件ファイルからインストール
pip install -r requirements.txt
# パッケージのアップグレード
pip install --upgrade package_name
# パッケージのアンインストール
pip uninstall package_name
# インストール済みパッケージ一覧
pip list
# アウトデートパッケージの確認
pip list --outdated
# パッケージの詳細情報
pip show package_name
# ホイールのインストール
pip install some_package-1.0-py3-none-any.whl
# キャッシュのクリア
pip cache purge
よくあるはまりポイント
- 仮想環境外でのグローバルインストール
- 依存関係の衝突解決の複雑さ
- バージョン指定の書式ミス
- システム依存パッケージのビルド失敗
- プロキシ/ネットワーク関連問題
Poetry
モダンなPythonの依存関係管理とパッケージングツールです。
主要コマンド
# プロジェクト初期化
poetry init
# パッケージインストール
poetry add package_name
# 開発依存関係のインストール
poetry add --dev package_name
# 全依存関係のインストール
poetry install
# 依存関係のアップデート
poetry update
# パッケージの削除
poetry remove package_name
# スクリプト実行
poetry run python script.py
# 仮想環境のシェルを開く
poetry shell
# ビルド(wheel & sdist)
poetry build
# 発行
poetry publish
よくあるはまりポイント
- pipとの併用による混乱
- 複雑な依存関係解決の遅さ
- pyproject.tomlの正しい構成
- 既存プロジェクトへの移行の複雑さ
- 仮想環境管理の理解
Rust系
Cargo
Rustの公式パッケージマネージャとビルドツールです。
主要コマンド
# 新規プロジェクト作成
cargo new project_name
cargo init # 既存ディレクトリ内で初期化
# ビルド
cargo build
cargo build --release # 最適化ビルド
# 実行
cargo run
cargo run --release
# テスト実行
cargo test
# ドキュメント生成
cargo doc
cargo doc --open # 生成して開く
# 依存関係の更新確認
cargo update
# コード整形
cargo fmt
# リントチェック
cargo clippy
# クレートの公開
cargo publish
# クリーン
cargo clean
よくあるはまりポイント
- 依存関係のバージョン指定の書式
- features(機能フラグ)の理解と指定
- クロスコンパイル設定
- ワークスペースの適切な構成
- 条件付きコンパイルの設定
- ビルドスクリプトの複雑さ
Go系
Go Build
Go言語の標準ビルドツールです。
主要コマンド
# ビルド
go build
go build ./... # すべてのパッケージをビルド
# 実行
go run main.go
go run .
# テスト実行
go test
go test ./... # すべてのパッケージをテスト
go test -v # 詳細表示
# パッケージのインストール
go install
# 依存関係の取得
go get package_name
go get -u package_name # 更新も含む
# モジュール初期化
go mod init module_name
# 依存関係の整理
go mod tidy
# モジュール情報の表示
go list -m all
# クロスコンパイル
GOOS=linux GOARCH=amd64 go build
よくあるはまりポイント
- GOPATHとGO111MODULEの理解
- プライベートリポジトリからの依存関係取得
- バージョン選択アルゴリズムの理解
- クロスコンパイルでのCGO関連問題
- ビルドタグと条件付きコンパイル
- ベンダリングの管理
CI/CD自動化ツール
Jenkins
拡張性の高いオープンソースの自動化サーバーです。
主要コマンド
# Jenkinsファイルの検証
curl --user username:password -X POST -F "jenkinsfile=<Jenkinsfile" http://jenkins-url/pipeline-model-converter/validate
# ジョブのビルド実行
curl -X POST http://jenkins-url/job/job_name/build
# パラメータ付きジョブの実行
curl -X POST http://jenkins-url/job/job_name/buildWithParameters?PARAM=value
# ジョブのステータス取得
curl http://jenkins-url/job/job_name/lastBuild/api/json
# Jenkins CLIの利用
java -jar jenkins-cli.jar -s http://jenkins-url/ command
よくあるはまりポイント
- 権限と認証の複雑な設定
- プラグイン互換性と更新問題
- パイプラインスクリプトの複雑さ
- マスタ/エージェントの設定と管理
- リソース消費の最適化
- 並行ビルドでの競合状態
GitHub Actions
GitHubリポジトリに統合されたCI/CDプラットフォームです。
主要構成
# 基本的なワークフロー
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: ステップ名
run: echo "コマンド実行"
# マトリックスビルド
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node: [14, 16, 18]
# 環境変数の設定
env:
GLOBAL_VAR: value
jobs:
build:
env:
JOB_VAR: value
# シークレットの使用
steps:
- name: シークレットを使用
env:
SECRET_KEY: ${{ secrets.SECRET_NAME }}
# アーティファクトの保存
steps:
- uses: actions/upload-artifact@v3
with:
name: artifact-name
path: path/to/artifact
# キャッシュの利用
steps:
- uses: actions/cache@v3
with:
path: path/to/cache
key: ${{ runner.os }}-key
よくあるはまりポイント
- ワークフローYAML構文エラー
- 実行環境の違いによる問題(Linux vs Windows vs macOS)
- シークレット管理とセキュリティ設定
- ジョブ間でのデータ共有の複雑さ
- アクション権限の設定ミス
- レート制限と実行時間制限の理解
GitLab CI/CD
GitLabに組み込まれたCI/CDシステムです。
主要構成
# 基本的なパイプライン
stages:
- build
- test
- deploy
build-job:
stage: build
script:
- echo "ビルド実行"
# キャッシュの設定
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
# アーティファクトの設定
job:
artifacts:
paths:
- build/
expire_in: 1 week
# 環境変数
variables:
VARIABLE_NAME: "value"
# 条件付き実行
job:
rules:
- if: $CI_COMMIT_BRANCH == "main"
# マトリックスビルド
job:
parallel:
matrix:
- PYTHON_VERSION: ["3.8", "3.9", "3.10"]
よくあるはまりポイント
- YAMLの構文エラーと空白の扱い
- 変数スコープの理解(グローバルvsジョブレベル)
- ランナー設定と管理
- キャッシュ戦略の最適化
- 複雑なルールと条件式の評価
- ジョブ依存関係の正しい定義
CircleCI
クラウドベースのCI/CDサービスです。
主要構成
# 基本設定
version: 2.1
jobs:
build:
docker:
- image: cimg/base:2022.06
steps:
- checkout
- run: echo "ビルド実行"
# ワークフロー定義
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build
# オーブの使用
orbs:
node: circleci/node@5.0.0
# キャッシュの設定
steps:
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
# 並列テスト
steps:
- run:
command: |
circleci tests glob "test/**/*.js" | circleci tests split --split-by=timings
parallelism: 4
よくあるはまりポイント
- コンテキストとシークレット管理
- 複数ジョブ間のデータ共有
- 正しいDockerイメージの選択
- ワークフロー設計と依存関係の設定
- パフォーマンスとクレジット最適化
- オーブとカスタムコマンドの適切な使用