第5章 CI/CDの実装 / 想定学習時間:30〜40分 / 最終確認:2026年8月

5-3. Databricks CLIとCI/CD自動化

🎯 この節の学習目標

1. Databricks CLI と bundle コマンド群

5-2 で学んだ Automation Bundle(旧 Databricks Asset Bundles)を実際にデプロイ・実行するための道具が Databricks CLI です(各ページ初出の対応関係として、Git 連携は Databricks Git Folders〈旧 Repos〉が担います)。CLI はローカル端末でも CI/CD の実行環境でも同じように動くため、「開発者が手元で試したコマンドを、そのまま自動化パイプラインに書ける」のが特長です。Bundle 操作の基本コマンドは次の4つです。

コマンド役割使う場面
databricks bundle validatedatabricks.yml の構文・構成を検証する(デプロイはしない)PR 時の自動チェック、デプロイ前の事前確認
databricks bundle deployBundle の資産(ジョブ・パイプライン・コード)を対象ワークスペースへデプロイするdev への展開、マージ後の test / prod への昇格
databricks bundle runデプロイ済みのジョブやパイプラインを実行するデプロイ後の動作確認、テスト用ジョブの起動
databricks bundle destroyBundle でデプロイした資産を対象環境から削除する検証環境の後片付け、プロジェクト廃止時

いずれのコマンドも --target(または -t)でデプロイ先ターゲットを指定します。5-2 の databricks.yml に定義した targets(dev / test / prod)がここで効きます。

📘 試験対策(旧名称でも出題されうる)

試験問題では「Databricks Asset Bundles(DABs)を CLI でデプロイする」のように旧称のまま出題される可能性があります。また、Bundle に含まれるパイプラインが旧称 Delta Live Tables、Git 連携が旧称 Databricks Repos と表記されることもあります。いずれもコマンド体系は本節と同じ databricks bundle ... なので、名称の読み替えだけで対応できます。

🚀 現行Databricks(2026年8月)

現行名称は Declarative Automation Bundles / Automation Bundle ですが、CLI のコマンド名は改名後も databricks bundle のままです。validate / deploy / run / destroy のサブコマンド、--target による環境指定も従来どおりで、旧称時代に書かれた CI/CD パイプラインはそのまま動作します。

💡 具体例:手元での典型的な操作の流れ

# 1. 構成の検証(デプロイ前に必ず実行する習慣をつける)
databricks bundle validate

# 2. dev 環境へデプロイ(databricks.yml で default: true なら --target 省略可)
databricks bundle deploy --target dev

# 3. デプロイしたジョブを実行して動作確認
databricks bundle run daily_sales_job --target dev

# 4. 検証が終わった一時環境の資産を削除
databricks bundle destroy --target dev

validate は「YAML の書き間違い・必須項目の欠落・変数解決の失敗」をデプロイ前に検出する門番です。デプロイして初めてエラーに気づくのではなく、validate を CI の最初の段に置いて早期に失敗させるのが定石です。

2. CI/CD からの認証:サービスプリンシパルと環境変数

開発者が手元で CLI を使うときは自分のユーザー認証で構いませんが、CI/CD パイプラインからの操作は個人アカウントに依存させないのが原則です。担当者の退職や権限変更でパイプラインが止まるのを防ぐため、自動化にはサービスプリンシパル(自動処理専用の ID)を使います。

📝 試験のポイント

「CI/CD パイプラインから Databricks へデプロイする際の認証として適切なのは?」→ 正解の方向性は「サービスプリンシパルの認証情報を CI/CD のシークレット機能に保存し、環境変数経由で CLI に渡す」です。「開発者個人のトークンをリポジトリのコードにハードコードする」「パスワードを YAML に書く」といった選択肢は、セキュリティと継続性の両面で誤答になります。

3. CI/CD パイプラインへの組み込み:GitHub Actions の例

5-1 の開発フロー(feature ブランチ → PR → main へマージ)に、CLI による Bundle 操作を接続すると、CI/CD パイプラインが完成します。典型的な構成は次のとおりです。

  1. PR 作成時databricks bundle validate を自動実行し、構成の誤りをマージ前に検出する
  2. main へのマージ時databricks bundle deploy --target test で test 環境へ自動デプロイし、bundle run で統合テスト用ジョブを実行する
  3. 承認後 — 手動承認ステップ(リリース承認)を挟んで databricks bundle deploy --target prod で本番へ昇格する

💡 具体例:GitHub Actions ワークフローの骨格

# .github/workflows/deploy.yml(骨格のみ)
name: deploy-bundle
on:
  pull_request:            # PR では検証のみ
  push:
    branches: [main]       # main マージで test へデプロイ

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: databricks/setup-cli@main   # Databricks CLI を導入
      - run: databricks bundle validate
        env:
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}   # サービスプリンシパルのトークン

  deploy_test:
    if: github.ref == 'refs/heads/main'
    needs: validate
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: databricks/setup-cli@main
      - run: databricks bundle deploy --target test
        env:
          DATABRICKS_HOST: ${{ secrets.TEST_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN_TEST }}
      - run: databricks bundle run integration_test_job --target test
        env:
          DATABRICKS_HOST: ${{ secrets.TEST_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN_TEST }}

  deploy_prod:
    needs: deploy_test
    environment: production   # 手動承認ステップを設定した environment
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: databricks/setup-cli@main
      - run: databricks bundle deploy --target prod
        env:
          DATABRICKS_HOST: ${{ secrets.PROD_HOST }}
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN_PROD }}

認証情報はすべて GitHub の Secrets に置き、環境変数で CLI に渡しています(この例は PAT 方式。OAuth M2M なら DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET を渡します)。prod への昇格は environment: production の承認設定により、人間の承認を経てから実行されます。なお例では簡潔さのため databricks/setup-cli@main を参照していますが、実運用ではアクションのバージョンを固定(例:@v1 のようなタグや commit SHA へのピン留め)することが推奨されます。

4. dev → test → prod 昇格フローの全体像

第5章で学んだ3つの部品(Git Folders・Automation Bundle・CLI)を組み合わせると、昇格フローは次のようにつながります。

開発者:Git Folders で feature ブランチ開発5-1 / dev 環境で動作確認(bundle deploy --target dev)
コミット&プッシュ → PR 作成(Git プロバイダ側)
CI:PR 検証databricks bundle validate で構成チェック+自動テスト
レビュー承認 → main へマージ
CD:test 環境へ自動デプロイdatabricks bundle deploy --target test → bundle run で統合テスト
リリース承認(手動承認ステップ)
CD:prod 環境へ昇格databricks bundle deploy --target prod(サービスプリンシパルで実行)

図:dev → test → prod の昇格フロー(Git Folders + Automation Bundle + CLI)

この構成の要点は、どの環境にも「同じ databricks.yml から、同じ deploy コマンドで」デプロイしていることです。環境ごとの違いは --target の指定と Secrets(接続先・認証情報)だけに閉じ込められており、5-2 で学んだ「コードは1つ、設定は環境ごと」が CLI レベルでも貫かれています。

✅ この節のまとめ

練習問題

問1. CI パイプラインで、Automation Bundle の databricks.yml に構成ミスがないかを「デプロイせずに」チェックしたい。使用すべきコマンドはどれか。

  1. databricks bundle deploy
  2. databricks bundle validate
  3. databricks bundle run
  4. databricks bundle destroy
解答と解説を見る

正解:B

validate は Bundle 定義の構文・構成をデプロイせずに検証するコマンドで、PR 時の自動チェックに最適です。Aの deploy は実際に資産を展開してしまうため「デプロイせずに」という要件に反します。Cの run はデプロイ済みジョブの実行、Dの destroy は資産の削除で、いずれも検証の用途ではありません。

問2. databricks.yml に dev / test / prod の3つの targets が定義されている。CI/CD パイプラインから test 環境へデプロイするコマンドとして正しいものはどれか。

  1. databricks bundle deploy --target test
  2. databricks bundle run --env test
  3. databricks bundle validate test
  4. databricks bundle deploy をそのまま実行する(ターゲットは自動判別されるため指定不要)
解答と解説を見る

正解:A

デプロイ先の環境は deploy コマンドに --target(または -t)で指定します。Bの run はデプロイではなくジョブの実行であり、オプション名も誤りです。Cの validate は検証のみでデプロイしません。Dはターゲット指定を省略すると default: true のターゲット(通常は dev)が使われるため、test へは展開されません。

問3. CI/CD パイプラインから Databricks へデプロイする際の認証方法として、最も適切なものはどれか。

  1. 開発リーダー個人のアクセストークンをワークフローの YAML ファイルに直接記載する
  2. サービスプリンシパルのトークンを CI/CD の Secrets に保存し、環境変数(DATABRICKS_HOST / DATABRICKS_TOKEN)として CLI に渡す
  3. パイプライン実行のたびに開発者が手動でユーザー名とパスワードを入力する
  4. 認証を省略できるよう、ワークスペースを誰でも書き込み可能に設定する
解答と解説を見る

正解:B

自動化にはサービスプリンシパル(自動処理専用の ID)を使い、認証情報は Secrets に保存して環境変数経由で CLI に渡すのが原則です。なお認証方式としては、PAT よりも OAuth M2M(DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET)が第一候補として推奨されます。Aは認証情報の漏えいリスクに加え、個人アカウント依存(退職・権限変更で停止)の問題があります。Cは手動介入が必要で自動化になりません。Dはセキュリティとガバナンスの放棄であり論外です。

問4. チームは「PR 作成時に構成を検証し、main へのマージで test 環境に自動デプロイして統合テストを実行、リリース承認後に prod へ昇格する」フローを構築したい。各段階で使う仕組みの組み合わせとして最も適切なものはどれか。

  1. PR 時:bundle deploy --target prod / マージ時:bundle validate / 承認後:bundle destroy
  2. PR 時:bundle validate / マージ時:bundle deploy --target test と bundle run / 承認後:bundle deploy --target prod
  3. すべての段階で bundle run のみを使い、デプロイはワークスペース UI で手動実行する
  4. PR 時:bundle destroy / マージ時:bundle validate / 承認後:bundle run --target prod
解答と解説を見る

正解:B

「検証は validate、環境への展開は deploy(--target で環境指定)、ジョブの実行は run」という役割に沿った組み合わせはBだけです。Aは PR の段階で prod へデプロイしてしまい、承認後に資産を削除するという逆転した構成です。Cはデプロイが手動なので再現性のある自動化になりません。Dは PR で資産を削除し、prod へのデプロイをどこでも行っていないため、フローとして成立しません。