cf-cli について
cf-cli は、Cloud Foundry CLI v8 を使うユーザー向けのスキルです。アプリのデプロイと運用に加え、サービス、マニフェスト、管理操作、トラブルシューティングの実行可能なコマンドを案内します。
主な機能
- 01Cloud Foundry CLI v8 コマンドの作成
- 02アプリのデプロイとライフサイクル操作
- 03マニフェストと変数の設定
- 04サービス、ルート、組織、スペースの管理
- 05ログ、イベント、API 呼び出しによる調査
活用シーン
- 01cf push とマニフェストでデプロイを準備
- 02アプリのログを確認してイベントを診断
- 03サービスをバインドしてアプリ設定を更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sap-samples/ joule-a2a-agent-toolkit --skill cf-cliインストール後、Claude Code で/cf-cliを入力して読み込まれたか確認します。
詳細
Cloud Foundry CLI スキル
Cloud Foundry CLI(v8)のエキスパートとして、ユーザーが正しい cf コマンドを作成し、マニフェストを記述し、デプロイを自動化し、サービスを管理し、問題をトラブルシューティングできるよう支援します。ユーザーが cf help を何度も実行せずに済むよう、正確ですぐに実行できるコマンドを提供することが目標です。
重要: v7 と v6 はメンテナンスが終了しています。常に v8 の構文を使用してください。v8 CLI は CC API v3 を基盤としています。
インストール
V8 Installation Guideからインストールします。パッケージマネージャー(Homebrew、apt、yum、Chocolatey)またはバイナリをダウンロードして利用できます。
確認:cf version
認証とターゲットの設定
cf api
Cloud Foundry インスタンスの API エンドポイントを設定します。
cf api https://api.example.com
cf api https://api.example.com --skip-ssl-validation # dev/self-signed certs only
cf api # show current API
cf login
対話形式でログインします。指定されていない情報がある場合は入力を求められます。
cf login # fully interactive
cf login -a https://api.example.com # set API + login
cf login -a https://api.example.com -u [email protected] # preset username
cf login -a https://api.example.com --sso # SSO via one-time passcode
cf login -o my-org -s dev # target org + space on login
| フラグ | 説明 |
|---|---|
-a | API エンドポイントの URL |
-u | ユーザー名 |
-p | パスワード(シェルの履歴に記録されるため、使用は避けてください) |
-o | ターゲットの組織 |
-s | ターゲットのスペース |
--sso | ログイン URL から取得したワンタイムパスコードによる SSO |
--sso-passcode <code> | SSO パスコードを直接指定 |
--origin <origin> | ID プロバイダーのオリジンを指定 |
--skip-ssl-validation | SSL 証明書の検証をスキップ |
cf auth
スクリプトや CI/CD 向けの非対話型認証です。
cf auth username password
cf auth username password --origin ldap
cf auth --client-credentials # uses CF_USERNAME and CF_PASSWORD env vars
cf target
ログイン後に組織とスペースのコンテキストを切り替えます。
cf target -o my-org -s dev
cf target -s staging # switch space only
cf target # show current target
cf logout
cf logout
アプリのライフサイクル
cf push(エイリアス:p)
最も重要なコマンドです。アプリをデプロイします。
cf push my-app # push from current dir
cf push my-app -p ./build # push specific path
cf push my-app -f manifest.yml # use specific manifest
cf push my-app -b nodejs_buildpack # explicit buildpack
cf push my-app -i 3 -m 512M -k 1G # 3 instances, 512MB RAM, 1GB disk
cf push my-app --no-start # stage but don't start
cf push my-app --no-route # no route (workers/tasks)
cf push my-app --random-route # generate random route
cf push my-app --strategy rolling # zero-downtime rolling deploy
cf push my-app --docker-image my-registry/my-image:tag # docker image
cf push -f manifest.yml --var host=my-host # variable substitution
cf push -f manifest.yml --vars-file vars.yml # vars from file
主なフラグ:-b ビルドパック、-c コマンド、-f マニフェスト、-i インスタンス数、-k ディスク容量、-m メモリ、-p パス、-s スタック、-t タイムアウト、-u ヘルスチェックの種類(port/http/process)、-o/--docker-image、--docker-username(パスワードは CF_DOCKER_PASSWORD で指定)、--droplet、--endpoint、--no-manifest、--no-route、--no-start、--no-wait、--random-route、--strategy(rolling/null)、--task、--var KEY=VALUE、--vars-file PATH。
Push の環境変数: CF_DOCKER_PASSWORD、CF_STAGING_TIMEOUT=15(分)、CF_STARTUP_TIMEOUT=5(分)。
アプリの管理
cf apps # list all apps in current space
cf app my-app # show app details (instances, memory, routes, state)
cf start my-app # start a stopped app
cf stop my-app # stop a running app
cf restart my-app # restart (re-containerize, same droplet)
cf restage my-app # restage (re-build droplet from source)
cf delete my-app # delete app (prompts for confirmation)
cf delete my-app -f # force delete (no confirmation)
cf delete my-app -r # also delete mapped routes
cf rename my-app new-name # rename an app
cf scale my-app -i 5 # scale to 5 instances
cf scale my-app -m 1G -k 2G # change memory and disk
cf scale my-app -i 5 -m 1G # scale instances and memory together
デプロイとロールバック
cf push my-app --strategy rolling # zero-downtime rolling deploy
cf cancel-deployment my-app # cancel an in-progress deployment
ログとイベント
cf logs my-app # tail live logs
cf logs my-app --recent # dump recent logs
cf events my-app # show recent app events (crashes, scaling, etc.)
SSH
cf ssh my-app # SSH into first instance
cf ssh my-app -i 2 # SSH into instance index 2
cf ssh my-app -c "cat /app/config.yml" # run a command and exit
cf enable-ssh my-app / cf disable-ssh my-app / cf ssh-enabled my-app
タスク
cf run-task my-app --command "rake db:migrate" # run a one-off task
cf run-task my-app -c "rake db:migrate" -m 512M # with memory limit
cf tasks my-app # list tasks
cf terminate-task my-app TASK_ID # cancel a running task
環境変数
cf env my-app # show all env vars (user + system)
cf set-env my-app DATABASE_URL "postgres://..." # set a var
cf unset-env my-app DATABASE_URL # remove a var
cf restage my-app # restage for changes to take effect
set-env または unset-env の実行後、変更を適用するにはアプリを再ステージするか、再起動する必要があります。
ヘルスチェック
cf get-health-check my-app
cf set-health-check my-app http --endpoint /health
cf set-health-check my-app port
cf set-health-check my-app process
パッケージとドロプレット
cf packages my-app / cf create-package my-app # list / upload packages
cf droplets my-app / cf set-droplet my-app GUID # list / set active droplet
cf download-droplet my-app / cf stage-package my-app --package-guid GUID
マニフェスト
マニフェスト(manifest.yml)にはアプリの設定を記述します。cf push の実行時に、CF は現在のディレクトリからマニフェストを自動的に読み込みます。
---
applications:
- name: my-app
memory: 512M
disk_quota: 1G
instances: 2
buildpacks:
- nodejs_buildpack
command: node server.js
health-check-type: http
health-check-http-endpoint: /health
timeout: 120
stack: cflinuxfs4
env:
NODE_ENV: production
LOG_LEVEL: info
routes:
- route: my-app.example.com
- route: my-app.example.com/api
services:
- my-database
- my-redis
processes:
- type: web
instances: 2
memory: 512M
- type: worker
instances: 1
memory: 256M
command: node worker.js
health-check-type: process
no-route: true
マニフェスト内の変数置換:
# manifest.yml
applications:
- name: ((app-name))
instances: ((instances))
cf push --var app-name=my-app --var instances=3
# or from a file:
cf push --vars-file production.yml
実行中のアプリからマニフェストを作成:
cf create-app-manifest my-app # generates manifest.yml from current state
cf create-app-manifest my-app -p ./out # write to specific directory
サービス
マーケットプレイス
cf marketplace # list all available services
cf marketplace -e SERVICE_NAME # show plans for a specific service
cf marketplace -s SERVICE_NAME # alias for -e
サービスインスタンス
cf services # list service instances in current space
cf service my-db # show details for a service instance
# Create
cf create-service SERVICE PLAN NAME # create from marketplace
cf create-service postgres standard my-db
cf create-service postgres standard my-db -c '{"storage":"50gb"}' # with params
cf create-service postgres standard my-db -c config.json # params from file
cf create-service postgres standard my-db -t "env:prod,team:api" # with tags
# Update
cf update-service my-db -p premium # change plan
cf update-service my-db -c '{"key":"val"}' # update params
cf upgrade-service my-db # upgrade to latest version
# Delete
cf delete-service my-db
cf delete-service my-db -f # no confirmation
cf rename-service my-db new-db-name
バインドとバインド解除
cf bind-service my-app my-db # bind service to app
cf bind-service my-app my-db -c '{"role":"admin"}' # with config
cf unbind-service my-app my-db # unbind
cf restage my-app # restage to pick up new bindings
バインドすると、認証情報が VCAP_SERVICES 環境変数に注入されます。
サービスキー
サービスキーを使うと、アプリにバインドせずに認証情報を取得できます。
cf create-service-key my-db my-key
cf create-service-key my-db my-key -c '{"permissions":"read-only"}'
cf service-keys my-db # list keys
cf service-key my-db my-key # show credentials
cf delete-service-key my-db my-key
ユーザー提供サービス
マーケットプレイスにない外部サービスの場合:
# Interactive (prompts for each param)
cf create-user-provided-service my-ext -p "host, port, username, password"
# Non-interactive (JSON)
cf cups my-ext -p '{"host":"db.example.com","port":"5432","user":"admin","password":"secret"}'
# Syslog drain
cf cups my-logger -l syslog://logs.example.com:514
# Route service
cf cups my-proxy -r https://proxy.example.com
# Update
cf update-user-provided-service my-ext -p '{"password":"new-secret"}'
cups は create-user-provided-service のエイリアス、uups は update-user-provided-service のエイリアスです。
サービス共有とルートサービス
cf share-service my-db -s other-space [-o other-org]
cf unshare-service my-db -s other-space
cf bind-route-service example.com my-proxy --hostname my-app
cf unbind-route-service example.com my-proxy --hostname my-app
ルートとドメイン
ドメイン
cf domains # list all domains
cf create-private-domain my-org apps.internal # internal/private domain
cf delete-private-domain apps.internal
cf create-shared-domain shared.example.com # shared across all orgs
cf delete-shared-domain shared.example.com
cf router-groups # list router groups
ルート
cf routes # list all routes in current space
cf route my-app.example.com # show route details
cf create-route example.com --hostname my-app # create route
cf create-route apps.internal --hostname backend # internal route
cf create-route example.com --hostname my-app --path /api # with path
cf map-route my-app example.com --hostname my-app # map route to app
cf unmap-route my-app example.com --hostname my-app # unmap
cf delete-route example.com --hostname my-app # delete route
cf delete-orphaned-routes # clean up unmapped routes
cf check-route example.com --hostname my-app # check if route exists
組織とスペース
組織
cf orgs # list orgs
cf org my-org # show org details (spaces, domains, quotas)
cf create-org my-org
cf delete-org my-org
cf rename-org my-org new-org
スペース
cf spaces # list spaces in current org
cf space dev # show space details
cf create-space staging
cf delete-space staging
cf rename-space staging production
cf apply-manifest -f manifest.yml # apply manifest to current space
スペースの SSH
cf allow-space-ssh SPACE / cf disallow-space-ssh SPACE / cf space-ssh-allowed SPACE
ユーザーとロールの管理
cf org-users my-org # list org users
cf space-users my-org dev # list space users
# Org roles: OrgManager, BillingManager, OrgAuditor
cf set-org-role [email protected] my-org OrgManager
cf unset-org-role [email protected] my-org OrgManager
# Space roles: SpaceManager, SpaceDeveloper, SpaceAuditor, SpaceSupporter
cf set-space-role [email protected] my-org dev SpaceDeveloper
cf unset-space-role [email protected] my-org dev SpaceDeveloper
管理
ビルドパック: cf buildpacks(一覧表示)、cf create-buildpack NAME PATH POSITION、cf update-buildpack NAME -p PATH、cf delete-buildpack NAME。
ネットワークポリシー: cf network-policies、cf add-network-policy APP DEST --protocol tcp --port 8080、cf remove-network-policy APP DEST --protocol tcp --port 8080。
セキュリティグループ: cf security-groups、cf create-security-group NAME rules.json、cf bind-security-group NAME ORG SPACE --lifecycle running、cf bind-running-security-group NAME(グローバルのデフォルト)。
クォータ: cf org-quotas、cf create-org-quota NAME -m 10G -i 100 -r 50 -s 20、cf set-org-quota ORG QUOTA。スペースのクォータ: cf space-quotas、cf create-space-quota NAME -m 5G、cf set-space-quota SPACE QUOTA。
機能フラグ: cf feature-flags、cf enable-feature-flag FLAG、cf disable-feature-flag FLAG。
高度なコマンド
cf curl
API を直接呼び出します。自動化やデバッグに非常に便利です。
cf curl /v3/apps # list apps via API
cf curl /v3/apps/APP_GUID # get specific app
cf curl /v3/apps -X POST -d '{"name":"my-app","relationships":{"space":{"data":{"guid":"SPACE_GUID"}}}}'
cf curl "/v3/apps?names=my-app" # query by name
cf config
cf config --trace true # enable API tracing (like CF_TRACE=true)
cf config --trace /tmp/cf-trace.log # trace to file
cf config --color false # disable colored output
cf config --locale en-US # set locale
cf oauth-token
cf oauth-token # print current access token (for scripting)
環境変数
| 変数 | 説明 |
|---|---|
CF_HOME | ~/.cf 設定ディレクトリの場所を上書きします |
CF_TRACE | API トレースを有効にする場合は true、トレースログのファイルパスを指定することもできます |
CF_COLOR | 色付き出力を無効にする場合は false を指定します |
CF_DOCKER_PASSWORD | cf push --docker-image 用の Docker レジストリパスワード |
CF_STAGING_TIMEOUT | ステージングを待つ最大時間(分)(デフォルト: 15) |
CF_STARTUP_TIMEOUT | アプリの起動を待つ最大時間(分)(デフォルト: 5) |
CF_DIAL_TIMEOUT | API 接続の最大待ち時間(秒)(デフォルト: 5) |
プラグイン
cf plugins # list installed plugins
cf install-plugin PLUGIN # install (local path, URL, or repo name)
cf install-plugin -r CF-Community my-plugin # from registered repo
cf uninstall-plugin my-plugin
cf repo-plugins # list available plugins
cf list-plugin-repos # list registered repos
cf add-plugin-repo CF-Community https://plugins.cloudfoundry.org
cf remove-plugin-repo CF-Community
プラグインのコードでは import "code.cloudfoundry.org/cli/v9/plugin" を使用します。
MTA / Multiapps プラグイン(cf deploy)
CAP アプリケーションと MTA プロジェクトは、multiapps CF CLI プラグインを使用して .mtar アーカイブとしてデプロイされます。これにより、cf deploy コマンド(cf push とは別)が利用可能になります。
プラグインとビルドツールをインストールする
mbt build または cf deploy を実行する前に、両方のツールが存在することを確認してください。次のチェックを実行し、見つからない場合はインストールします。
# Check and install mbt (MTA Build Tool)
if ! command -v mbt &>/dev/null; then
echo "mbt not found — installing..."
npm install -g mbt
else
echo "mbt $(mbt --version) already installed"
fi
# Check and install the multiapps CF CLI plugin
if ! cf plugins | grep -q multiapps; then
echo "multiapps plugin not found — installing..."
cf install-plugin multiapps -f
else
echo "multiapps plugin already installed"
cf plugins | grep multiapps
fi
MTA をビルドしてデプロイする
# Build the .mtar archive from mta.yaml
mbt build
# Deploy the archive to the targeted CF org/space
cf deploy mta_archives/<app>_1.0.0.mtar
# Deploy with verbose output
cf deploy mta_archives/<app>_1.0.0.mtar -e config.mtaext
# Check deploy status
cf mta-ops # list ongoing MTA operations
cf mta <mta-id> # show MTA status
cf mtas # list all deployed MTAs
cf undeploy <mta-id> --delete-services # remove an MTA + its services
cf deploy のトラブルシューティング
| エラー | 原因 | 対処方法 |
|---|---|---|
unknown command 'deploy' | multiapps プラグインがインストールされていません | cf install-plugin multiapps |
service plan 'extended' not available | AI Core の extended プランが付与されていないか、組織のプランが制限されています | BTP のエンタイトルメントを確認します。AI Core を使用する CAP には extended プランが必要です |
MTA ID already exists | 前回のデプロイで状態が不完全なまま残っています | cf undeploy <mta-id> を実行してから再試行します |
npm エラーでビルドが失敗する | mta.yaml の Node バージョンが一致していません | package.json の engines.node が CF ビルドパックのバージョンと一致していることを確認します |
トラブルシューティング
よくある問題
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
FAILED - Not logged in | トークンの期限切れ、または未認証です | cf login を再実行します |
FAILED - No org/space targeted | ターゲットのコンテキストが設定されていません | cf target -o ORG -s SPACE を実行します |
| push 時にアプリがクラッシュする | 起動コマンドに問題があるか、依存関係が不足しています | cf logs APP --recent でエラーを確認します |
| ステージングに失敗する | ビルドパックが間違っているか、ファイルが不足しています | -b でビルドパックを確認し、.cfignore を確認します |
CF_STAGING_TIMEOUT を超過する | アプリのステージングに時間がかかりすぎています | CF_STAGING_TIMEOUT を増やすか、ビルドを最適化します |
| SSL 証明書エラー | 自己署名証明書が使用されています | --skip-ssl-validation を使用する(開発環境のみ)か、証明書をインストールします |
| ルートがすでに存在する | 別のアプリまたはスペースがそのルートを所有しています | cf routes で確認するか、--random-route を使用します |
| サービスのバインドに失敗する | サービスの準備ができていないか、スペースが間違っています | cf service SERVICE のステータスを確認します |
デバッグの手順
- ログを確認する:
cf logs my-app --recent— まず最初に試してください - トレースを有効にする:
CF_TRACE=true cf push my-app— API のリクエスト/レスポンスを確認します - イベントを確認する:
cf events my-app— 最近のクラッシュ、再ステージ、スケーリングを確認します - SSH で接続する:
cf ssh my-app— 実行中のコンテナを調査します - 環境変数を確認する:
cf env my-app—VCAP_SERVICESとユーザー環境変数を確認します - API をデバッグする:
cf curl /v3/apps/GUID/processes— プロセスレベルの詳細を調査します
コマンドの成功を確認する
cf push my-app
echo $? # 0 = success, non-zero = failure
よくあるワークフロー
Postgres サービスを使用して Node.js アプリをデプロイする
cf login -a https://api.example.com --sso
cf target -o my-org -s dev
cf create-service postgres standard my-db
cf push my-app -b nodejs_buildpack
cf bind-service my-app my-db
cf restage my-app
ゼロダウンタイムでデプロイする
cf push my-app --strategy rolling
# If something goes wrong mid-deploy:
cf cancel-deployment my-app
CI/CD パイプラインのパターン
cf api https://api.example.com
cf auth "$CF_USERNAME" "$CF_PASSWORD"
cf target -o my-org -s production
cf push my-app -f manifest-prod.yml --strategy rolling --no-wait
負荷に基づいてスケーリングする
cf scale my-app -i 10 # scale out to 10 instances
cf scale my-app -m 1G # increase memory per instance