Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
Hide categories

Categories

  • Heroku のアーキテクチャ
    • コンピューティング (dyno)
      • dyno の管理
      • dyno の概念
      • dyno の動作
      • dyno の参照資料
      • dyno のトラブルシューティング
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • 開発者ツール
    • コマンドライン
    • Heroku の VS Code 拡張機能
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Node.js アプリのトラブルシューティング
      • Heroku での Node.js の動作
      • Node.js の操作
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Ruby の操作
      • Heroku での Ruby の動作
      • Ruby アプリのトラブルシューティング
    • Python
      • Python の操作
      • Python でのバックグラウンドジョブ
      • Heroku での Python の動作
      • Django の使用
    • Java
      • Heroku での Java の動作
      • Java の操作
      • Maven の使用
      • Spring Boot の使用
      • Java アプリのトラブルシューティング
    • PHP
      • PHP の操作
      • Heroku での PHP の動作
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Heroku Postgres への移行
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Vector Database
    • Working with AI
    • Heroku Inference
      • AI Models
      • Inference Essentials
      • Heroku Inference Quick Start Guides
      • Inference API
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • Heroku のアーキテクチャ
  • buildpack の管理

buildpack の管理

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2025年01月08日(水)

Table of Contents

  • buildpack を追加またはカスタマイズするタイミング
  • アプリに buildpack を設定する
  • クラシック buildpack を設定する
  • Cloud Native Buildpack を設定する
  • buildpack を表示する
  • buildpack を削除する
  • 複数の buildpack を使用する
  • サードパーティの buildpack の使用
  • CNB アプリのベースイメージまたはビルダーを変更する
  • CNB ビルドの環境変数を設定する
  • buildpack リファレンス
  • クラシック buildpack と CNB を使用してアプリを移行する
  • その他の資料

Heroku でサポートされている言語のいずれかを使用する多くのアプリでは、使用するのに適切な buildpack が自動的に検出されます。buildpack は必要なバイナリのインストール、必要な依存関係のダウンロード、ソースコードのコンパイルなどを行います。こうしたケースでは、ビルドに使用する buildpack をカスタマイズする必要はありません。

この記事では、アプリの buildpack を管理およびカスタマイズする方法とそのタイミングについて説明します。クラシック buildpack​ とCloud Native Buildpack (CNB)​ では管理の方法が異なります。

クラシック buildpack は Cedar​ 世代のアプリでのみ使用できます。CNB は Fir でのみ使用できます。

buildpack を追加またはカスタマイズするタイミング

buildpack を手動で追加する必要がある理由はさまざまです。たとえば、アプリが次の条件に当てはまる場合などです。

  • ffmpeg​ などの Heroku ベースイメージにデフォルトで含まれていないバイナリが必要である。
  • Rust などの Heroku で直接サポートされていない言語を使用している。
  • nx​ や task​ などの Heroku の buildpack には用意されていないカスタムビルドツールが必要である。
  • Ruby、Python、または PHP アプリケーションと Node.js ライブラリを組み合わせて使用するときにアセットを処理するために複数の buildpack が必要である。

通常は使用する正しい buildpack が検出されますが、失敗​する場合もあります。失敗した場合は、buildpack を手動で設定​することもできます。

アプリに buildpack を設定する

アプリに公式の Heroku buildpack​ または サードパーティの buildpack​ を設定できます。 クラシック buildpack​ と CNB​ では設定の方法が異なります。

クラシック buildpack を設定する

​ buildpack 値を設定して、Cedar 世代のアプリで使用されるクラシック buildpack を変更します。 クラシック buildpack は[さまざまな方法](#buildpack-references)​で参照できます。次の例では、常に buildpack の最新リリースバージョンを参照する、推奨される短縮形式の [buildpack Registry](buildpack-registry)​ 名を使用しています。

アプリケーションの作成時

アプリの作成中に buildpack を指定するには: “`term $ heroku create example-app –buildpack heroku/python ”`

既存アプリの場合

既存アプリの場合は `heroku buildpacks:set`​ を使用します。 “`term $ heroku buildpacks:set heroku/php –app example-app Buildpack set. Next release on example-app will use heroku/php. Run `git push heroku main` to create a new release using this buildpack. ”`

複数の buildpack を追加する

`buildpacks:add`​ コマンドでアプリケーションにさらに buildpack を追加できます。 たとえば、Scala buildpack を備えたアプリがあり、Node.js buildpack を追加する必要がある場合は、次のようになります。 “`term $ heroku buildpacks:add –index 1 heroku/nodejs –app example-app ”` このコマンドは、buildpack 実行の順序で最初の位置に Node.js buildpack を挿入し、その上にある他の buildpack を 1 つ下の位置に移動させます。すでに設定されていた Scala buildpack は 2 番目に実行される buildpack になります。 このコマンドの具体的なユースケースの例については、「[Node.js を使用した Play および Scala アプリケーションの JavaScript 最適化の実行](https://devcenter.heroku.com/articles/using-node-js-to-perform-javascript-optimization-for-play-and-scala-applications)​」を参照してください。 > note > アプリの**第一言語**​の buildpack は、常にリストの**最後**​の buildpack になるよう配置してください。この順序付けにより、別の言語のデフォルトではなく、その第一言語のデフォルトが確実に適用されます。Heroku でアプリの第一言語を正しく検出することも可能になります。 オプションの `–index`​ 引数を指定した `heroku buildpacks:set`​ コマンドを使用して単一の buildpack を挿入し、実行順序におけるその位置を設定することもできます。`–index`​ が指定された場合、コマンドは所定の位置で buildpack を上書きします。

app.json を使用する

[Heroku Buttons](heroku-button)​、[Heroku CI](heroku-ci)​、または [Review Apps](github-integration-review-apps)​ によってアプリケーションが作成されるように、`app.json`​ でクラシック buildpack を明示的に設定できます。詳細については、「[`app.json`​スキーマ](app-json-schema#buildpacks)​」を参照してください。 `app.json`​ を変更しても既存アプリの設定は更新されません。既存のアプリにこれらを設定するには、代わりに [`heroku buildpacks`​ コマンドを使用](managing-buildpacks#set-a-classic-buildpack)​する必要があります。

Cloud Native Buildpack を設定する

Fir 世代のアプリ用のCloud Native Buildpack を選択するには、アプリリポジトリのルートディレクトリの project.toml​ で設定します。ファイルに 1 つまたは複数の buildpack を追加して、特定の順序で実行できます。詳細については、CNB 仕様を参照してください。

たとえば、同じ CNB ビルドで Node.js と Go の両方が必要な場合は、project.toml​ に次の内容を含めます。

[_]
schema-version = "0.2"

[[io.buildpacks.group]]
id = "heroku/nodejs"

[[io.buildpacks.group]]
id = "heroku/go"

次に、ファイルを git にコミットし、Heroku にプッシュします。

$ git add project.toml
$ git commit -m "Set custom CNB"
$ git push heroku main

この場合も、アプリは指定された buildpack の検出に合格する必要があります。たとえば、heroku/ruby が指定されている場合は Gemfile が存在している必要があり、存在しない場合はビルドが失敗します。

インライン buildpack

アプリ専用のスクリプトを実行するには、ID とスクリプトを指定して buildpack を project.toml​ に直接インライン化します。

[[io.buildpacks.group]]
id = "my-inline-buildpack"

 [io.buildpacks.group.script]
 api = "0.10"
 inline = "echo 'Hello World'"

TOML """​ heredoc 区切り文字を使用して複数行のスクリプトを追加します。

[[io.buildpacks.group]]
id = "my-inline-buildpack"

 [io.buildpacks.group.script]
 api = "0.10"
 inline = """
echo 'Hello World'
echo 'Goodbye'
"""

project.toml の要件と制限

project.toml​ プロジェクト記述子​は CNB フレームワークの一部です。Heroku Fir では含めることができる構成のほとんどをサポートしていますが、すべてのタイプの構成をサポートしているわけではありません。

  • スキーマ バージョンは 0.2 にするか省略する必要があります。
  • Platform API バージョンは 0.12 である必要があります。
  • ビルダーは heroku/builder​ リポジトリからのものである必要があります。Heroku では現在、Heroku-24 ビルダー heroku/builder:24​ のみをサポートしています。
  • include​ と exclude​ はサポートされていません。

buildpack を表示する

次のコマンドを実行すると、アプリの buildpack の完全なリストを表示できます。

$ heroku buildpacks
=== nameless-brushlands-4859 Buildpack
1. heroku/nodejs
2. heroku/ruby

リストの最後の buildpack は、アプリケーションのプロセスタイプ​を決定するために使用されます。以前の buildpack から定義されたプロセスタイプは無視されます。

heroku help buildpacks​ を実行して、コマンドのオプションの完全なリストを取得できます。

buildpack を削除する

クラシック buildpack を削除する

buildpack はアプリから削除できます。

$ heroku buildpacks:remove heroku/nodejs

buildpack がアプリケーションに設定されていない場合、次回の git push heroku​ の実行時に検出プロセス​が再実行されます。

アプリからすべての buildpack を消去するには:

$ heroku buildpacks:clear --app example-app

Cloud Native Buildpack を削除する

project.toml​ から buildpack を削除し、コードをコミットして Heroku にプッシュします。

複数の buildpack を使用する

アプリケーションのビルド時に単一の buildpack では十分ではないシナリオが多数存在します。これには、次の操作が必要な場合が含まれます。

  • アプリで使用する言語ごとに buildpack を実行する。たとえば、アセットには JavaScript buildpack を、アプリケーションには Ruby buildpack を実行する場合です。
  • アプリケーションでデーモンプロセスを実行する。
  • apt​ でシステム依存関係を取得する。

アプリが必要とする特定の buildpack と、それらの実行順序を定義できます。詳細については、buildpack の設定手順​を参照してください。

サードパーティの buildpack の使用

buildpack を探す

Heroku のクラシック buildpack と CNB のリストについては、「公式にサポートされる buildpack​」を参照してください。

Heroku で公式にサポートされている buildpack の対象とならない言語またはフレームワークをサポートするために、カスタムサードパーティ buildpack を使用できます。

カスタムクラシック buildpack

サードパーティ buildpack には Heroku で管理されていないソフトウェアが含まれており、これらは Heroku によってサポートされていません。使用する buildpack のソースを検査し、作業を慎重に進めてください。

厳選されたカスタムサードパーティクラシック buildpack のリストについては、Elements marketplace​ をご覧ください。

何百種類ものカスタム buildpack を CLI から検索することもできます。検索するには、次を実行します。

$ heroku buildpacks:search elixir
Buildpack        Category   Description
───────────────  ─────────  ───────────────────────────
hashnuke/elixir  languages  Heroku Buildpack for Elixir

$ heroku buildpacks:info hashnuke/elixir
description: Heroku Buildpack for Elixir
category:    languages
license:     MIT License
support:     https://github.com/HashNuke/heroku-buildpack-elixir/issues
source:      https://github.com/HashNuke/heroku-buildpack-elixir
readme:

buildpack の名前空間/名前または Git URL を使用して、公式のクラシック buildpack と同じコマンド​でカスタム buildpack を追加できます。

カスタム Cloud Native Buildpack

サードパーティ buildpack には Heroku で管理されていないソフトウェアが含まれており、これらは Heroku によってサポートされていません。使用する buildpack のソースを検査し、作業を慎重に進めてください。

公式にサポートされている Heroku CNB とサードパーティ CNB はどちらも、Cloud Native Buildpack Registry (https://registry.buildpacks.io) にあります。Heroku が公式にサポートしている buildpack は、レジストリの heroku​ スコープに一覧表示されています (例: ​heroku/go​)。レジストリに一覧表示されているサードパーティ CNB の多くは Heroku の CNB ビルダーと Heroku Fir で動作しますが、Heroku では公式にサポートされていません。project.toml​ 内の他の CNB と同様に追加​できます。

CNB アプリのベースイメージまたはビルダーを変更する

CNB のベースイメージはビルダーの一部であるため、直接変更することはできません。デフォルトでは、Heroku Fir プラットフォーム上の CNB ビルドは、Heroku-24 ベースイメージを使用する heroku/builder:24 CNB ビルダーを使用します。Heroku では heroku/builder リポジトリのビルダーのみを使用できます。現在、Heroku では heroku-24​ ビルダーのみをサポートしています。

heroku stacks:set​ でクラシック buildpack​を使用するアプリの場合は、Heroku のベースイメージのバージョンを設定する必要があります。

CNB ビルドの環境変数を設定する

アプリの環境設定はビルド中に使用できませんが、ビルド中に使用する環境変数を設定できます。これらの環境変数は project.toml​ にあるため、リポジトリにコミットされます。project.toml​ 経由で機密データやシークレットを設定しないでください。

[_]
schema-version = "0.2"

[[io.buildpacks.build.env]]
name = "NODE_ENV"
value = "production"

buildpack リファレンス

クラシック buildpack リファレンス

Heroku では、heroku/…​ 短縮名​経由で最新の安定リリースを使用する場合にのみ、公式な buildpack のサポートを提供します。 公式な buildpack の GitHub URL を使用すると、パフォーマンスが低下したりドキュメントにない動作を行ったりする可能性があります。

buildpack の値は次のいずれかで設定できます。

  • heroku/python​ など、短縮形式の Buildpack Registry​ 名 (公開済みの buildpack の場合)
  • Git リポジトリの URL (例: ​https://github.com/heroku/heroku-buildpack-nodejs.git​)
  • gzip で圧縮された tarball の URL

使用する buildpack のソースが Git リポジトリにある場合、Git オブジェクト​ (タグ名、ブランチ名、40 文字のコミット SHA など) を URL に追加することによって、使用する buildpack の特定のタグまたはブランチを指定できます。たとえば、次のようになります。

  • https://github.com/heroku/heroku-buildpack-nodejs.git#somedevbranch
  • https://github.com/heroku/heroku-buildpack-nodejs.git#v9861
  • https://github.com/heroku/heroku-buildpack-nodejs.git#a2113e0671bc132310ff9f85ad07f5a19f217313

Heroku Support によって一時的な手段として明示的に指示されない限り、….git#ref​ 表記を使用してブランチ名またはコミットリファレンスを設定しないでください。 この操作により、アプリケーションが最新の安全な依存関係を使用しなかったり、ビルドに失敗したり、実行時に未定義の動作を行ったりする可能性があります。

Cloud Native Buildpack リファレンス

CNB を参照できるすべての方法については、Buildpacks.io​ の公式ドキュメントを参照してください。

クラシック buildpack と CNB を使用してアプリを移行する

クラシック buildpack と CNB を使用してアプリを移行することはできません。

Cedar 世代のアプリを Fir に再デプロイする必要があります。そうすると、クラシック buildpack の代わりに CNB が自動的に使用されるようになります。

Fir 世代のアプリを Cedar に再デプロイする必要があります。そうすると、CNB の代わりにクラシック buildpack が自動的に使用されるようになります。

その他の資料

  • buildpack
  • 公式にサポートされる buildpack
  • buildpack エラーのトラブルシューティング

関連カテゴリー

  • Heroku のアーキテクチャ
設定と環境設定 Heroku アプリのライフサイクル

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices