0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ビルドツール完全ガイド

Last updated at Posted at 2025-03-08

目次


汎用ビルドツール

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イメージの選択
  • ワークフロー設計と依存関係の設定
  • パフォーマンスとクレジット最適化
  • オーブとカスタムコマンドの適切な使用
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?