Heroku API の使い方:完全統合ガイド (2026年)

Ashley Innocent

Ashley Innocent

25 3月 2026

Heroku API の使い方:完全統合ガイド (2026年)

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

TL;DR

Heroku API を利用すると、開発者はデプロイの自動化、アプリケーションの管理、アドオンの構成、インフラストラクチャのプログラムによるスケーリングが可能になります。この API は OAuth 2.0 とトークンベースの認証を使用し、アプリケーション、ダイノ、ビルド、パイプラインのための RESTful エンドポイントを提供します。アカウントあたり1時間あたり10,000リクエストのレート制限があります。このガイドでは、認証設定、コアエンドポイント、CI/CD統合、本番デプロイ戦略について説明します。

はじめに

Heroku は170以上の国で400万以上のアプリケーションを支えています。デプロイの自動化、CI/CDパイプライン、または複数のアプリケーションを管理するツールを構築する開発者にとって、Heroku API の統合はオプションではなく、必須です。

現実を見てみましょう。10以上の Heroku アプリを管理しているチームは、手動でのデプロイや設定変更に毎週8~12時間も費やしています。Heroku API をしっかり統合することで、デプロイを自動化し、トラフィックに基づいてダイノをスケーリングし、複数の環境間で設定を同期させることができます。

このガイドでは、Heroku API 統合の全プロセスを順を追って説明します。トークン認証、アプリケーションとダイノの管理、ビルドパイプライン、アドオンのプロビジョニング、およびエラーのトラブルシューティングについて学びます。このガイドを読み終える頃には、本番環境に対応した Heroku 統合が完成していることでしょう。

💡
Apidog は API 統合テストを簡素化します。Heroku エンドポイントのテスト、認証フローの検証、API レスポンスの検査、設定問題のデバッグを1つのワークスペースで行えます。API 仕様のインポート、モックレスポンス、テストシナリオのチームとの共有も可能です。

Heroku API とは?

Heroku は、Heroku プラットフォーム上のアプリケーションとインフラストラクチャを管理するための RESTful プラットフォーム API を提供しています。この API で処理できるのは以下のとおりです。

主な機能

機能 説明
RESTful デザイン JSON レスポンスを備えた標準的な HTTP メソッド
トークン認証 OAuth 2.0 をサポートするベアラートークン
レンジリクエスト 大規模な結果セットのためのページネーション
レート制限 アカウントあたり1時間あたり10,000リクエスト
멱等な作成 書き込みに対する安全なリトライ動作
Gzip 圧縮 帯域幅節約のためのレスポンス圧縮

API アーキテクチャの概要

Heroku はバージョン管理された REST API 構造を使用しています。

https://api.heroku.com/

API は、一貫したリソースパターンと関係性を持つ JSON:API 仕様に準拠しています。

API バージョンの比較

バージョン ステータス 認証 ユースケース
プラットフォーム API (v3) 現在 ベアラートークン すべての新しい統合
GitHub 統合 現在 OAuth 2.0 GitHub 連携アプリ
コンテナレジストリ 現在 Docker 認証 コンテナデプロイ

はじめに:認証設定

ステップ1:Heroku アカウントの作成

API にアクセスする前に、Heroku アカウントが必要です。

Herokuサインアップページ
  1. Heroku ウェブサイトにアクセスします
  2. Sign Up」をクリックしてアカウントを作成します
  3. メールアドレスを確認します
  4. アカウント設定を完了します

ステップ2:Heroku CLI のインストール

CLI は API トークンの生成とコマンドのテストに役立ちます。

# macOS
brew tap heroku/brew && brew install heroku

# Windows
npm install -g heroku

# Linux
curl https://cli-assets.heroku.com/install.sh | sh

ステップ3:API トークンの生成

Heroku CLI で認証します。

# Heroku にログイン
heroku login

# これにより、認証のためにブラウザが開きます
# ログイン後、トークンはローカルに保存されます

API トークンを取得します。

# 現在の認証トークンを表示
heroku authorizations:create --short-lived

# または、有効期限の長いトークンを作成(CI/CD用)
heroku authorizations:create --description "CI/CD Pipeline" --expires-in "1 year"

セキュリティに関する注意:トークンは環境変数に保存し、コードには絶対に記述しないでください。

# .env ファイル
HEROKU_API_KEY="your_api_key_here"
HEROKU_APP_NAME="your-app-name"

ステップ4:トークン認証を理解する

Heroku はベアラートークン認証を使用します。

Authorization: Bearer {api_key}
Accept: application/vnd.heroku+json; version=3

すべての API リクエストにはこれらのヘッダーが必要です。

ステップ5:最初の API コールを行う

認証をテストします。

curl -n https://api.heroku.com/account \
  -H "Accept: application/vnd.heroku+json; version=3" \
  -H "Authorization: Bearer $HEROKU_API_KEY"

期待されるレスポンス:

{
  "id": "user-id-here",
  "email": "developer@example.com",
  "name": "Developer Name",
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2026-03-20T14:22:00Z"
}

ステップ6:コードに認証を実装する

再利用可能な API クライアントを作成します。

const HEROKU_API_KEY = process.env.HEROKU_API_KEY;
const HEROKU_BASE_URL = 'https://api.heroku.com';

const herokuRequest = async (endpoint, options = {}) => {
  const response = await fetch(`${HEROKU_BASE_URL}${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Bearer ${HEROKU_API_KEY}`,
      'Accept': 'application/vnd.heroku+json; version=3',
      'Content-Type': 'application/json',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Heroku API Error: ${error.message}`);
  }

  return response.json();
};

// 使用例
const account = await herokuRequest('/account');
console.log(`ログイン済みユーザー: ${account.email}`);

アプリケーション管理

新しいアプリケーションの作成

プログラムで Heroku アプリを作成します。

const createApp = async (appName, region = 'us') => {
  const response = await herokuRequest('/apps', {
    method: 'POST',
    body: JSON.stringify({
      name: appName,
      region: region
    })
  });

  return response;
};

// 使用例
const app = await createApp('my-awesome-app-2026');
console.log(`作成されたアプリ: ${app.name}`);
console.log(`Git URL: ${app.git_url}`);
console.log(`Web URL: ${app.web_url}`);

期待されるアプリケーションのレスポンス

{
  "id": "app-uuid-here",
  "name": "my-awesome-app-2026",
  "region": { "name": "us" },
  "created_at": "2026-03-25T10:00:00Z",
  "updated_at": "2026-03-25T10:00:00Z",
  "git_url": "https://git.heroku.com/my-awesome-app-2026.git",
  "web_url": "https://my-awesome-app-2026.herokuapp.com",
  "owner": { "email": "developer@example.com" },
  "build_stack": { "name": "heroku-24" }
}

アプリケーションのリスト表示

アカウント内のすべてのアプリケーションを取得します。

const listApps = async (limit = 50) => {
  const response = await herokuRequest(`/apps?limit=${limit}`);
  return response;
};

// 使用例
const apps = await listApps();
apps.forEach(app => {
  console.log(`${app.name} - ${app.web_url}`);
});

アプリケーションの詳細の取得

アプリケーションの詳細情報を取得します。

const getApp = async (appName) => {
  const response = await herokuRequest(`/apps/${appName}`);
  return response;
};

// 使用例
const app = await getApp('my-awesome-app-2026');
console.log(`スタック: ${app.build_stack.name}`);
console.log(`リージョン: ${app.region.name}`);

アプリケーション設定の更新

アプリケーション設定を変更します。

const updateApp = async (appName, updates) => {
  const response = await herokuRequest(`/apps/${appName}`, {
    method: 'PATCH',
    body: JSON.stringify(updates)
  });

  return response;
};

// 使用例 - アプリ名の変更
const updated = await updateApp('old-app-name', {
  name: 'new-app-name'
});

アプリケーションの削除

アカウントからアプリケーションを削除します。

const deleteApp = async (appName) => {
  await herokuRequest(`/apps/${appName}`, {
    method: 'DELETE'
  });

  console.log(`アプリケーション ${appName} が正常に削除されました`);
};

ダイノ管理

ダイノのスケーリング

アプリケーションをスケールアップまたはスケールダウンします。

const scaleDyno = async (appName, processType, quantity) => {
  const response = await herokuRequest(`/apps/${appName}/formation/${processType}`, {
    method: 'PATCH',
    body: JSON.stringify({
      quantity: quantity
    })
  });

  return response;
};

// 使用例 - Web ダイノを3にスケーリング
const formation = await scaleDyno('my-app', 'web', 3);
console.log(`Scaled to ${formation.quantity} ${processType} dynos`);

ダイノ構成の取得

現在のダイノ構成を表示します。

const getFormation = async (appName, processType = null) => {
  const endpoint = processType
    ? `/apps/${appName}/formation/${processType}`
    : `/apps/${appName}/formation`;

  const response = await herokuRequest(endpoint);
  return response;
};

// 使用例
const formation = await getFormation('my-app');
formation.forEach(proc => {
  console.log(`${proc.type}: ${proc.quantity} dynos (@ ${proc.size})`);
});

利用可能なダイノサイズ

ダイノタイプ ユースケース 月額費用
eco ホビープロジェクト、デモ 5ドル
basic 小規模な本番アプリ 7ドル
standard-1x 標準的なワークロード 25ドル
standard-2x 高性能アプリ 50ドル
performance 本番環境で重要なアプリ 250ドル以上
private エンタープライズ分離 カスタム

ダイノの再起動

アプリのすべてのダイノを再起動します。

const restartDynos = async (appName, processType = null) => {
  const endpoint = processType
    ? `/apps/${appName}/formation/${processType}`
    : `/apps/${appName}/dynos`;

  await herokuRequest(endpoint, {
    method: 'DELETE'
  });

  console.log(`ダイノが ${appName} で再起動されました`);
};

ワンオフダイノの実行

隔離されたダイノでコマンドを実行します。

const runCommand = async (appName, command) => {
  const response = await herokuRequest(`/apps/${appName}/dynos`, {
    method: 'POST',
    body: JSON.stringify({
      command: command,
      size: 'standard-1x'
    })
  });

  return response;
};

// 使用例 - データベースマイグレーションの実行
const dyno = await runCommand('my-app', 'npm run migrate');
console.log(`ダイノが開始されました: ${dyno.id}`);

設定変数

環境変数の取得

環境変数を取得します。

const getConfigVars = async (appName) => {
  const response = await herokuRequest(`/apps/${appName}/config-vars`);
  return response;
};

// 使用例
const config = await getConfigVars('my-app');
console.log(`DATABASE_URL: ${config.DATABASE_URL}`);
console.log(`NODE_ENV: ${config.NODE_ENV}`);

環境変数の設定

環境変数を更新します。

const setConfigVars = async (appName, variables) => {
  const response = await herokuRequest(`/apps/${appName}/config-vars`, {
    method: 'PATCH',
    body: JSON.stringify(variables)
  });

  return response;
};

// 使用例
const updated = await setConfigVars('my-app', {
  NODE_ENV: 'production',
  API_SECRET: 'your-secret-key',
  LOG_LEVEL: 'info'
});

環境変数のベストプラクティス

  1. シークレットをコミットしない - すべての機密データには環境変数を使用する
  2. 環境ごとに異なる設定を使用する - ステージングと本番で異なる変数を使用する
  3. シークレットを定期的にローテーションする - API キーとパスワードを四半期ごとに更新する
  4. 関連する変数にプレフィックスを付ける - STRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRET

ビルドとリリース管理

ビルドの作成

API 経由でコードをデプロイします。

const createBuild = async (appName, sourceBlobUrl) => {
  const response = await herokuRequest(`/apps/${appName}/builds`, {
    method: 'POST',
    body: JSON.stringify({
      source_blob: {
        url: sourceBlobUrl
      }
    })
  });

  return response;
};

// 使用例
const build = await createBuild('my-app', 'https://storage.example.com/source.tar.gz');
console.log(`ビルドが開始されました: ${build.id}`);
console.log(`ステータス: ${build.status}`);

ビルドステータスの取得

ビルドの進捗状況を確認します。

const getBuild = async (appName, buildId) => {
  const response = await herokuRequest(`/apps/${appName}/builds/${buildId}`);
  return response;
};

// 完了するまでポーリング
const checkBuildStatus = async (appName, buildId, maxAttempts = 30) => {
  for (let i = 0; i < maxAttempts; i++) {
    const build = await getBuild(appName, buildId);

    if (build.status === 'succeeded') {
      console.log('ビルドが成功しました!');
      return build;
    } else if (build.status === 'failed') {
      throw new Error(`ビルドが失敗しました: ${build.output}`);
    }

    console.log(`ビルド進行中... ${i + 1} 回目の試行`);
    await new Promise(resolve => setTimeout(resolve, 5000));
  }

  throw new Error('ビルドタイムアウト');
};

リリースのリスト表示

リリース履歴を表示します。

const listReleases = async (appName, limit = 10) => {
  const response = await herokuRequest(`/apps/${appName}/releases?limit=${limit}`);
  return response;
};

// 使用例
const releases = await listReleases('my-app');
releases.forEach(release => {
  console.log(`v${release.version} - ${release.description} - ${release.created_at}`);
});

以前のリリースへのロールバック

以前のバージョンに戻します。

const rollback = async (appName, releaseId) => {
  const response = await herokuRequest(`/apps/${appName}/releases`, {
    method: 'POST',
    body: JSON.stringify({
      rollback: releaseId
    })
  });

  return response;
};

// 使用例 - バージョン42へのロールバック
const rollbackRelease = await rollback('my-app', 42);
console.log(`v${rollbackRelease.version} にロールバックしました`);

パイプライン管理

パイプラインの作成

CI/CD パイプラインを設定します。

const createPipeline = async (pipelineName) => {
  const response = await herokuRequest('/pipelines', {
    method: 'POST',
    body: JSON.stringify({
      name: pipelineName
    })
  });

  return response;
};

// 使用例
const pipeline = await createPipeline('my-app-pipeline');
console.log(`パイプラインが作成されました: ${pipeline.id}`);

パイプラインへのアプリケーションの追加

アプリケーションをパイプラインステージに接続します。

const addAppToPipeline = async (pipelineId, appName, stage) => {
  const response = await herokuRequest('/pipeline-couplings', {
    method: 'POST',
    body: JSON.stringify({
      pipeline: pipelineId,
      app: appName,
      stage: stage // 'development', 'staging', 'production'
    })
  });

  return response;
};

// 使用例
await addAppToPipeline(pipelineId, 'my-app-dev', 'development');
await addAppToPipeline(pipelineId, 'my-app-staging', 'staging');
await addAppToPipeline(pipelineId, 'my-app-prod', 'production');

スラグを次のステージに昇格

パイプラインを通じてコードを移動させます。

const promoteSlug = async (slugId, toApp) => {
  await herokuRequest('/promotions', {
    method: 'POST',
    body: JSON.stringify({
      from: toApp, // ソースアプリ
      to: toApp,   // ターゲットアプリ(次のステージ)
      slug: slugId
    })
  });

  console.log(`スラグ ${slugId} を ${toApp} に昇格しました`);
};

アドオン管理

アドオンのプロビジョニング

Heroku アドオンをインストールします。

const provisionAddon = async (appName, addonPlan, config = {}) => {
  const response = await herokuRequest('/addon-attachments', {
    method: 'POST',
    body: JSON.stringify({
      app: appName,
      plan: addonPlan,
      config: config
    })
  });

  return response;
};

// 使用例 - PostgreSQL のプロビジョニング
const db = await provisionAddon('my-app', 'heroku-postgresql:mini', {});
console.log(`データベースがプロビジョニングされました: ${db.addon.name}`);
console.log(`DATABASE_URL: ${db.addon.config_vars.DATABASE_URL}`);

人気のアドオン

アドオン プラン 開始価格 ユースケース
heroku-postgresql mini 月額5ドル 本番データベース
heroku-redis mini 月額5ドル キャッシュ、セッション
papertrail choklad 月額7ドル ログ集約
sentry developer 無料 エラートラッキング
mailgun sandbox 無料 メール配信
newrelic lite 無料 アプリケーション監視

アドオンのリスト表示

インストール済みのアドオンを表示します。

const listAddons = async (appName) => {
  const response = await herokuRequest(`/apps/${appName}/addons`);
  return response;
};

// 使用例
const addons = await listAddons('my-app');
addons.forEach(addon => {
  console.log(`${addon.plan.name} - $${addon.pricing.plan.price} - ${addon.state}`);
});

アドオンの削除

アドオンをアンインストールします。

const removeAddon = async (appName, addonId) => {
  await herokuRequest(`/apps/${appName}/addons/${addonId}`, {
    method: 'DELETE'
  });

  console.log(`アドオン ${addonId} が ${appName} から削除されました`);
};

ドメインとSSL管理

カスタムドメインの追加

カスタムドメインを設定します。

const addDomain = async (appName, domainName) => {
  const response = await herokuRequest(`/apps/${appName}/domains`, {
    method: 'POST',
    body: JSON.stringify({
      hostname: domainName
    })
  });

  return response;
};

// 使用例
const domain = await addDomain('my-app', 'api.example.com');
console.log(`CNAME ターゲット: ${domain.cname}`);

SSL証明書の設定

カスタムドメインに SSL を追加します。

const addSslCertificate = async (appName, domainId, certificateChain, privateKey) => {
  const response = await herokuRequest(`/apps/${appName}/domains/${domainId}/ssl_endpoint`, {
    method: 'PATCH',
    body: JSON.stringify({
      ssl_cert: {
        cert_chain: certificateChain,
        private_key: privateKey
      }
    })
  });

  return response;
};

ACMによる自動SSL

自動証明書管理を有効にします。

const enableACM = async (appName, domainName) => {
  const response = await herokuRequest(`/apps/${appName}/domains/${domainName}/sni_endpoint`, {
    method: 'POST',
    body: JSON.stringify({
      kind: 'acm'
    })
  });

  return response;
};

レート制限とクォータ

レート制限の理解

Heroku は API の安定性を保護するためにレート制限を課しています。

制限を超過すると、HTTP 429 (Too Many Requests) レスポンスが返されます。

レート制限処理の実装

リトライには指数バックオフを使用します。

const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await herokuRequest(endpoint, options);

      // レート制限ヘッダーの確認
      const remaining = response.headers.get('RateLimit-Remaining');
      const resetTime = response.headers.get('RateLimit-Reset');

      if (remaining < 100) {
        console.warn(`残りクォータが少ない:${remaining}、リセット時間:${resetTime}`);
      }

      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`レート制限に達しました。${delay}ms後に再試行します...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};

レート制限ヘッダー

Heroku はすべてのレスポンスに以下のヘッダーを含めます。

ヘッダー 説明
RateLimit-Limit 1時間あたりの最大リクエスト数
RateLimit-Remaining ウィンドウ内の残りのリクエスト数
RateLimit-Reset ウィンドウがリセットされるUnixタイムスタンプ

よくある問題のトラブルシューティング

問題:認証が 401 エラーで失敗する

症状: 「無効な認証情報」エラーが表示される。

解決策:

  1. API キーが正しいことを確認する: heroku authorizations
  2. トークンの有効期限が切れていないことを確認する(長期間有効なトークンは1年間有効です)
  3. 環境変数に余分な空白がないか確認する
  4. 必要に応じてトークンを再生成する: heroku authorizations:create

問題:アプリケーション名がすでに使用されている

症状: 「name is already taken」エラーが表示される。

解決策:

  1. グローバルに一意な名前を使用する - チーム名やランダムなサフィックスを含める
  2. UUID ベースの名前を生成する: app-${Date.now()}
  3. ネームスペースのプレフィックスを使用する: teamname-appname-env
const generateUniqueAppName = (baseName) => {
  const timestamp = Date.now().toString(36);
  const random = Math.random().toString(36).substring(2, 6);
  return `${baseName}-${timestamp}-${random}`;
};

問題:ダイノの構成が失敗する

症状: スケーリング操作がエラーを返す。

解決策:

  1. Procfile にプロセスの種類が存在することを確認する
  2. アカウントに利用可能なダイノクォータがあるか確認する
  3. アプリケーションが停止状態になっていないことを確認する
  4. ダイノの使用時間を確認する: heroku ps --app=my-app

問題:ビルドがタイムアウトで失敗する

症状: ビルドが30分後にハングアップするかタイムアウトする。

解決策:

  1. 使用している言語に最適なビルドパックを選択する
  2. 依存関係を適切にキャッシュする
  3. 大規模なビルドをより小さなデプロイメントに分割する
  4. 事前構築済みのスラグを使用してデプロイを高速化する

問題:レート制限を超過した

症状: HTTP 429 レスポンスを受け取る。

解決策:

  1. リクエストキューイングを実装する
  2. リトライには指数バックオフを使用する
  3. 可能な場合はリクエストをバッチ処理する
  4. レート制限ヘッダーを積極的に監視する
// シンプルなレートリミッター
class HerokuRateLimiter {
  constructor(requestsPerMinute = 150) {
    this.queue = [];
    this.interval = 60000 / requestsPerMinute;
    this.processing = false;
  }

  async add(requestFn) {
    return new Promise((resolve, reject) => {
      this.queue.push({ requestFn, resolve, reject });
      this.process();
    });
  }

  async process() {
    if (this.processing || this.queue.length === 0) return;

    this.processing = true;

    while (this.queue.length > 0) {
      const { requestFn, resolve, reject } = this.queue.shift();

      try {
        const result = await requestFn();
        resolve(result);
      } catch (error) {
        reject(error);
      }

      if (this.queue.length > 0) {
        await new Promise(r => setTimeout(r, this.interval));
      }
    }

    this.processing = false;
  }
}

本番デプロイチェックリスト

本番稼働前:

監視とアラート

これらのメトリクスを追跡します。

const metrics = {
  apiCalls: {
    total: 0,
    successful: 0,
    failed: 0,
    rateLimited: 0
  },
  dynoHours: {
    used: 0,
    quota: 1000
  },
  deployments: {
    successful: 0,
    failed: 0,
    avg_duration: 0
  }
};

// 高い失敗率でアラート
const failureRate = metrics.apiCalls.failed / metrics.apiCalls.total;

if (failureRate > 0.05) {
  sendAlert('Heroku API failure rate above 5%');
}

// ダイノ使用時間でアラート
if (metrics.dynoHours.used > metrics.dynoHours.quota * 0.8) {
  sendAlert('Dyno hour usage above 80%');
}

実際のユースケース

自動化された CI/CD パイプライン

SaaS チームが GitHub からのデプロイを自動化。

実装フロー:

  1. GitHub プッシュがワークフローをトリガー
  2. CI でテストを実行
  3. Heroku API がソースブロブからビルドを作成
  4. ステージングから本番への昇格
  5. 成功/失敗時にチームに通知

マルチ環境管理

コンサルティング会社が50以上のクライアントアプリを管理。

主要な統合ポイント:

トラフィックに基づく自動スケーリング

eコマースプラットフォームがトラフィックの急増に対応。

自動スケーリングロジック:

結論

Heroku API はプラットフォーム機能への包括的なアクセスを提供します。主なポイント:

button

FAQ セクション

Heroku API は何に使用されますか?

Heroku API は、アプリケーション、ダイノ、アドオン、インフラストラクチャのプログラムによる管理を可能にします。一般的なユースケースには、CI/CD の自動化、複数アプリケーション管理ツール、自動スケーリングシステム、インフラストラクチャ監視ダッシュボードなどがあります。

Heroku API キーはどのように取得しますか?

Heroku CLI をインストールし、heroku login を実行した後、heroku authorizations:create で認証を作成します。返されたトークンは環境変数に安全に保存してください。

Heroku API は無料で利用できますか?

はい、Heroku API は無料です。ただし、プロビジョニングしたリソース(ダイノ、アドオンなど)には料金がかかります。API のレート制限は、アカウントあたり1時間あたり10,000リクエストです。

Heroku API はどのような認証を使用しますか?

Heroku はベアラートークン認証を使用します。すべてのリクエストに Authorization: Bearer {api_key} ヘッダーを含めます。トークンは短期間(1時間)または長期間(最大1年)有効です。

Heroku API のレート制限はどのように処理しますか?

RateLimit-Remaining ヘッダーを監視し、リクエストキューイングを実装します。HTTP 429 レスポンスを受け取った場合は、指数バックオフを使用します。安全な運用のためには、1分あたり150リクエスト以下に抑えてください。

Git なしでデプロイできますか?

はい、可能です。Builds API を使用して、ソースブロブ URL からデプロイできます。コードをクラウドストレージ(S3、GCS など)にアップロードし、ビルドリクエストでその URL を参照します。

デプロイを自動化するにはどうすればよいですか?

Pipeline API を使用して CI/CD を設定します。ビルドを作成し、スラグをステージ間で昇格させ、GitHub やカスタム CI システムと統合します。

リリースとビルドの違いは何ですか?

ビルドはソースコードをスラグにコンパイルします。リリースはスラグと設定変数を組み合わせて、デプロイ可能なアプリケーションのバージョンを作成します。

失敗したデプロイをロールバックするにはどうすればよいですか?

Releases API を使用して最近のリリースをリストアップし、その後 /releasesrollback: <release_id> を指定して POST します。Heroku は以前のバージョンで新しいリリースを作成します。

複数の Heroku アカウントを管理できますか?

はい、可能です。アカウントごとに異なる API トークンを使用し、HEROKU_API_KEY 環境変数を変更することで切り替えることができます。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる

Heroku API の使い方:完全統合ガイド (2026年)