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 統合が完成していることでしょう。
Heroku API とは?
Heroku は、Heroku プラットフォーム上のアプリケーションとインフラストラクチャを管理するための RESTful プラットフォーム API を提供しています。この API で処理できるのは以下のとおりです。
- アプリケーションの作成、設定、削除
- ダイノのスケーリングとプロセス管理
- ビルドとリリースの管理
- アドオンのプロビジョニングと構成
- パイプラインとプロモーションの管理
- ドメインとSSL証明書の管理
- ログドレインと監視設定
- チームと共同作業者の管理
主な機能
| 機能 | 説明 |
|---|---|
| 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 ウェブサイトにアクセスします
- 「Sign Up」をクリックしてアカウントを作成します
- メールアドレスを確認します
- アカウント設定を完了します
ステップ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'
});
環境変数のベストプラクティス
- シークレットをコミットしない - すべての機密データには環境変数を使用する
- 環境ごとに異なる設定を使用する - ステージングと本番で異なる変数を使用する
- シークレットを定期的にローテーションする - API キーとパスワードを四半期ごとに更新する
- 関連する変数にプレフィックスを付ける -
STRIPE_SECRET_KEY、STRIPE_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 の安定性を保護するためにレート制限を課しています。
- 標準制限: アカウントあたり1時間あたり10,000リクエスト
- ウィンドウ: 60分間のローリングウィンドウ
- リセット: ウィンドウ経過後に自動
制限を超過すると、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 エラーで失敗する
症状: 「無効な認証情報」エラーが表示される。
解決策:
- API キーが正しいことを確認する:
heroku authorizations - トークンの有効期限が切れていないことを確認する(長期間有効なトークンは1年間有効です)
- 環境変数に余分な空白がないか確認する
- 必要に応じてトークンを再生成する:
heroku authorizations:create
問題:アプリケーション名がすでに使用されている
症状: 「name is already taken」エラーが表示される。
解決策:
- グローバルに一意な名前を使用する - チーム名やランダムなサフィックスを含める
- UUID ベースの名前を生成する:
app-${Date.now()} - ネームスペースのプレフィックスを使用する:
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}`;
};
問題:ダイノの構成が失敗する
症状: スケーリング操作がエラーを返す。
解決策:
- Procfile にプロセスの種類が存在することを確認する
- アカウントに利用可能なダイノクォータがあるか確認する
- アプリケーションが停止状態になっていないことを確認する
- ダイノの使用時間を確認する:
heroku ps --app=my-app
問題:ビルドがタイムアウトで失敗する
症状: ビルドが30分後にハングアップするかタイムアウトする。
解決策:
- 使用している言語に最適なビルドパックを選択する
- 依存関係を適切にキャッシュする
- 大規模なビルドをより小さなデプロイメントに分割する
- 事前構築済みのスラグを使用してデプロイを高速化する
問題:レート制限を超過した
症状: HTTP 429 レスポンスを受け取る。
解決策:
- リクエストキューイングを実装する
- リトライには指数バックオフを使用する
- 可能な場合はリクエストをバッチ処理する
- レート制限ヘッダーを積極的に監視する
// シンプルなレートリミッター
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;
}
}
本番デプロイチェックリスト
本番稼働前:
- [ ] CI/CD には有効期間の長い API トークンを使用する
- [ ] トークンは安全なシークレット管理サービス(Vault、AWS Secrets Managerなど)に保存する
- [ ] レート制限とリクエストキューイングを実装する
- [ ] 包括的なエラー処理を追加する
- [ ] すべての API コールに対してロギングを設定する
- [ ] ダイノの使用時間を監視する
- [ ] 外部ロギングのためにログドレインを設定する
- [ ] CI/CD のためにパイプラインプロモーションを設定する
- [ ] 自動証明書管理を有効にする
- [ ] データベースのバックアップ戦略を設定する
監視とアラート
これらのメトリクスを追跡します。
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 からのデプロイを自動化。
- 課題: 手動デプロイはエラーと遅延の原因となっていた
- 解決策: GitHub Actions と Heroku API の統合
- 結果: ダウンタイムなしのデプロイ、リリースが90%高速化
実装フロー:
- GitHub プッシュがワークフローをトリガー
- CI でテストを実行
- Heroku API がソースブロブからビルドを作成
- ステージングから本番への昇格
- 成功/失敗時にチームに通知
マルチ環境管理
コンサルティング会社が50以上のクライアントアプリを管理。
- 課題: 環境間での手動設定同期
- 解決策: Heroku API を使用した中央設定管理
- 結果: 一貫した設定、週8時間の節約
主要な統合ポイント:
- 開発/ステージング/本番間で環境変数を同期
- 自動化されたアドオンのプロビジョニング
- クライアントオンボーディングのためのバルク操作
トラフィックに基づく自動スケーリング
eコマースプラットフォームがトラフィックの急増に対応。
- 課題: セールイベント中の手動スケーリング
- 解決策: Heroku API を使用した負荷ベースの自動スケーリング
- 結果: トラフィックが10倍に急増してもダウンタイムなし
自動スケーリングロジック:
- メトリクス API 経由で応答時間を監視
- p95 レイテンシが500msを超えたらスケールアップ
- トラフィックが少ない期間はスケールダウン
- 持続的な高利用率でアラート
結論
Heroku API はプラットフォーム機能への包括的なアクセスを提供します。主なポイント:
- ベアラートークン認証には安全な保存とローテーションが必要
- レート制限(1時間あたり1万件)には事前監視が必要
- パイプライン管理により堅牢な CI/CD ワークフローが可能になる
- 適切なエラー処理によりデプロイの信頼性が確保される
- Apidog は Heroku 統合の API テストとチームコラボレーションを効率化する
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 を使用して最近のリリースをリストアップし、その後 /releases に rollback: <release_id> を指定して POST します。Heroku は以前のバージョンで新しいリリースを作成します。
複数の Heroku アカウントを管理できますか?
はい、可能です。アカウントごとに異なる API トークンを使用し、HEROKU_API_KEY 環境変数を変更することで切り替えることができます。
