Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Claude Code × Databricks Apps ワークショップ

Claude Code × Databricks Apps ワークショップ

Claude Codeを使ってDatabricks Appsを開発するハンズオンワークショップです。

説明記事: https://qiita.com/taka_yayoi/items/c4fedfe82b89d07ec837
リポジトリ: https://github.com/taka-yayoi/databricks-apps-workshop/tree/main

Avatar for Takaaki Yayoi

Takaaki Yayoi

February 25, 2026
Tweet

More Decks by Takaaki Yayoi

Other Decks in Technology

Transcript

  1. 自己紹介 弥生 隆明 (やよい たかあき) シニア スペシャリスト ソリューションアーキテクト ▪ 2020年からデータブリックス

    ジャパンにお いて、プレセールス、POCに従事 ▪ 生成AI、データエンジニアリング、 アプリが専門領域です。 ▪ 前職はコンサル、総合電機メーカー にてデータ分析・Webサービス構築 などに従事。インド赴任経験あり。 ▪ Databricks Certified (Data Engineer | Machine Learning) Professional, Generative AI Engineer Associate ▪ Qiitaでいろいろ書いています。 2 @taka_aki
  2. 今日のゴールとアジェンダ Claude Codeの使い方を理解し、Databricks Apps開発に活用できるようになる 座学(50分) • Claude Codeとは・比較 8分 •

    Claude Codeの使い方 15分 • CLAUDE.md 7分 • DABs / app.yaml 10分 • デモ 10分 ハンズオン (60分) • Phase 1-2: 基本生成・エラー対応 20分 • Phase 3: 機能追加 25分 • Phase 4-5: 更新・デプロイ 15分 環境確認 $ claude --version && databricks --version && python --version ⚠ SQL Warehouse IDをメモ: databricks warehouses list 3
  3. Claude Code とは Anthropicが開発したターミナルベースのAIコーディングアシスタント 「エージェント型」 = 自律的に行動する 単なるコード補完ツールではありません。 指示を受けると、ファイルを読み書きし、コマンドを実行し、エラーを見て修正し、 目標達成まで自律的に作業を続けます。

    できること • ファイルの作成・編集・削除 • シェルコマンドの実行 • エラー解析と自動修正 $ claude > Databricks Appsで動くSQLクエリ実行アプリを作って # Claude Codeが自律的に: # ファイル構成を考え → コード生成 → 設定ファイル作成 → デプロイまで 5
  4. 他のツールとの比較 Claude Codeの位置づけを理解する GitHub Copilot IDE補完 コード補完に特化、提案ベース Cursor IDE統合 VSCode

    fork、チャット+編集、IDE内で完結 Cline / Roo Code VSCode拡張 エージェント型だがVSCode依存 Claude Code ターミナル IDE非依存、シェル統合、CLIを直接実行 💡 Claude Codeはターミナル型 = databricks CLIを直接実行できる 6
  5. なぜターミナル型が有利なのか Databricks開発との相性 IDE型の制約 • エディタ内で完結 • 特定のIDEに依存 • CLI操作は手動で別途実行 ターミナル型のメリット

    • databricks CLIを直接実行 • どのIDEでも使える • CI/CDパイプラインに統合可能 # Claude Codeに「デプロイして」と言うだけ > このアプリをDatabricksにデプロイして # Claude Codeが databricks bundle deploy を実行 7
  6. Claude Desktop × Claude Code 連 携 仕様ドリブン開発: 「考える」と「作る」を分離 Claude

    Desktop 仕様策定 What/Why → CLAUDE.md 仕様書 → Claude Code 実装 How このワークフローのメリット 要件の明確化: Desktopで対話しながら仕様を詰める。曖昧さを事前に排除 コンテキスト分離: 仕様策定と実装で別セッション。コンテキストを効率的に使用 再現性の担保: CLAUDE.mdに仕様を残すことで、誰でも同じ品質のコードを生成 8
  7. Claude Code × VSCode 連携 ターミナルとエディタを並べて使う VSCode コードの確認・手動編集 Git操作・差分確認 デバッグ・ブレークポイント

    + Claude Code (Terminal) コード生成・大規模編集 CLI実行(databricks等) エラー解析・修正提案 連携のメリット リアルタイムで変更を確認 : Claude Codeがファイルを編集 → VSCodeで即座に反映を確認 ✏ 細かい修正は手動で: 生成されたコードの微調整はVSCodeで直接編集 Gitとの連携: VSCodeのGit機能で差分確認、必要な変更だけコミット 9
  8. 基本操作: 起動と終了 起動方法 # 新規セッション開始 $ cd my-project # 必ずプロジェクトで

    $ claude # 直前のセッションを継続 $ claude -c # 非対話モード(1回だけ実行) $ claude -p "プロンプト" 終了と中断 # 終了 > /exit または Ctrl+C # 処理を中断(重要!) > Escキー → 今の処理を止めて 方向転換できる ⚠ 必ずプロジェクトのディレクトリで起動すること (CLAUDE.mdが自動で読み込まれる) claude -c を使う場面: 作業途中でターミナルを閉じた時、昨日の続きから再開したい時 11
  9. スラッシュコマンド コマンドと「いつ使うか」を理解する /init CLAUDE.md生成 使うタイミング: 新規プロジェクト開始時 /context コンテキスト確認 使うタイミング: 応答が遅くなった時、長い会話の途中で

    /clear リセット 使うタイミング: 話が脱線した時、同じエラーが繰り返される時 /compact 会話圧縮 使うタイミング: コンテキスト50-80%で継続したい時 💡 迷ったら /context で確認 → 80%超えていたら /clear 12
  10. @ファイル参照 「このファイルを見て」と明示的に指示する なぜ@参照が重要か Claude Codeは必要に応じてファイルを 読みますが、明示的に指定すると : • 確実にそのファイルを参照する •

    意図が明確に伝わる • 無駄な探索を防ぐ 使い方 # ファイルを指定して修正 > @app.py のエラー処理を改善して # 複数ファイルを参照 > @app.py と @app.yaml が 整合しているか確認して # ルールを強制適用 > @CLAUDE.md に従って作成して 💡 @CLAUDE.md に従って は最も重要なパターン。プロジェクトルールを強制適用できる 13
  11. 軌道修正: いつ、どうやって Claude Codeが間違った方向に進んだ時の対処 軌道修正が必要なサイン • 同じエラーが2回以上繰り返される • 意図と違う方向に実装が進んでいる •

    不要なファイルを大量に生成し始めた 対処法 Esc 中断して指示を修正 Esc×2 巻き戻して別アプローチ /clear リセットして再開 重要: /clear後は「より具体的なプロンプト」で再開 ❌「さっきのエラーを直して」→ ✅「@app.py のDB接続部分でタイムアウト処理を追加して」 14
  12. 効果的なプロンプトの書き方 良いプロンプトの4要素 1 対象を明確に @app.py の〇〇関数を... 2 やりたいことを具体的に エラーハンドリングを追加... 3

    期待する結果を示す エラー時はメッセージを表示 4 制約があれば伝える 既存のUIは変更しないで 悪い例 vs 良い例 ❌ アプリを作って ❌ エラーを直して ✅ SQLクエリ実行アプリを作成。 @CLAUDE.md のルールに従って 15
  13. プロンプト例 : Databricks Apps 開発 新規作成 SQLクエリ実行アプリを作成して。 @CLAUDE.md のルールに従って。 機能追加

    @app.py にグラフ表示機能を追加。 Plotly使用。既存UIは維持。 エラー対応 以下のエラーが出ました: [エラーメッセージを貼り付け ] 原因を特定して修正して。 デプロイ このアプリをDatabricksに デプロイして。DABs使用。 💡 CLAUDE.mdにルールを書いておけば、毎回細かく指示しなくてもルール通りに生成される 16
  14. エラー発生時の対処フロー 「貼り付けて相談」が基本 1 エラー発生 ターミナルにエラーメッセージ ↓ 2 コピー エラーメッセージ全体をコピー ↓

    3 貼り付け 「このエラーが出ました」と共に ↓ 4 確認・実行 提案された修正を実行 ⚠ 修正しても同じエラーが2回出たら → /clear してより具体的なプロンプトで再開 17
  15. CLAUDE.md とは プロジェクト固有のルールをClaude Codeに伝えるファイル なぜ必要か ? CLAUDE.mdがない場合 毎回説明が必要: 「app.yamlはリスト形式で... ポート指定は禁止で...」

    CLAUDE.mdがある場合 自動で読み込まれる: 「アプリを作って」だけで ルール通りに生成 CLAUDE.mdの効果 • コンテキスト節約: 毎回の説明が不要 • 品質の一貫性: コーディング規約が統一される • チーム共有: Gitで管理、全員が同じルールで開発 18
  16. CLAUDE.md に書くべきこと Databricks Apps開発の場合 プロジェクト概要 何を作るか、目的 技術スタック Streamlit、Databricks SDK等 app.yamlルール

    command形式、env形式 認証パターン WorkspaceClient()で自動認証 禁止事項 ポート指定禁止、SparkSession禁止 デプロイ方法 DABs使用、databricks.yml構造 💡 app.yamlルールと禁止事項は必須 - これがないとエラーの原因に 19
  17. 今日のCLAUDE.md の中身 # Databricks Apps Workshop ## 概要 Databricks Apps用Streamlitアプリを開発するプロジェクト

    ## 技術スタック - Streamlit, Databricks SDK, Plotly ## app.yaml ルール(重要) - command: リスト形式で記述 [streamlit, run, app.py] - env: name/valueFrom形式で記述 - ポート・アドレス指定禁止 ## 認証 WorkspaceClient() # 引数なしで自動認証 ## 禁止事項 - SparkSession使用禁止 - --server.port, --server.address 指定禁止 - ハードコードされた認証情報 20
  18. Databricks Asset Bundles(DABs) DatabricksリソースをYAMLで管理するIaCツール なぜDABsを使うのか databricks apps deploy • 1回のデプロイには十分

    • 設定が残らない、再現性がない databricks bundle deploy • 設定をYAMLで管理 • Gitでバージョン管理、環境分離 基本的なファイル構成 my-app/ ├── src/ │ ├── app.py # アプリ本体 │ ├── app.yaml # Apps設定 │ └── requirements.txt # 依存関係 └── databricks.yml # DABs設定 21
  19. app.yaml の正しい記述方法 よくあるエラーの原因 ❌ 間違い # 文字列で書く command: "streamlit run

    app.py" # 辞書形式 env: WAREHOUSE_ID: "xxx" # ポート指定 --server.port=8080 ✅ 正しい # リスト形式 command: - streamlit - run - app.py # name/valueFrom形式 env: - name: WAREHOUSE_ID valueFrom: sql-warehouse ⚠ ポート/アドレス指定は禁止(Databricks Appsが自動設定する) 認証 # app.py内 - 引数なしで自動認証 w = WorkspaceClient() 22
  20. ローカル実行時の valueFrom 問題 ハンズオンで必ず遭遇するエラー Error: DATABRICKS_WAREHOUSE_ID defined in app.yaml with

    valueFrom property and can't be resolved locally. 原因 valueFromはDatabricks Apps環境でのみ解決される。ローカルでは値が取得できない。 対処法: --env フラグで環境変数を渡す $ databricks apps run-local --env DATABRICKS_WAREHOUSE_ID=your_warehouse_id 💡 Claude Codeにこのエラーを貼り付けると、原因と対処法を教えてくれる これが「対話的デバッグ」の実践例 23
  21. デプロイの流れ 手動でやる場合 # 1. 設定の検証 $ databricks bundle validate #

    2. デプロイ実行 $ databricks bundle deploy -t dev Claude Codeに任せる場合 > このアプリをDatabricksに デプロイして # Claude Codeが # databricks bundle deploy を実行 💡 「デプロイして」と言うだけ。Claude CodeがCLIを実行する 24
  22. デモ 1 Hello Databricks (5 分) 最小構成のアプリでClaude CodeとDABsの動作を確認 最小構成のDatabricks Appsを作成して。

    - Streamlitで「Hello from Databricks!」を表示 - @CLAUDE.md のルールに従って 見てほしいポイント 1. CLAUDE.mdの自動読み込み 2. ファイル生成(app.py, app.yaml, databricks.yml) 3. databricks bundle deployの実行 26
  23. デモ 2 SQL Query Runner (5 分) エラー発生時の対話的デバッグを実演 SQL Query

    Runnerアプリを作成して。 SQLを入力して実行結果を表示。@CLAUDE.md に従って。 見てほしいポイント 1. valueFromエラーの発生 2. エラーをClaude Codeに貼り付けて相談 3. --envフラグでの解決 27
  24. 座学のまとめ Claude Code ターミナル型エージェント。/clear, /context, @参照を使いこなす プロンプト 対象・やりたいこと・期待結果を明確に 軌道修正 同じエラー2回

    → /clear して具体的に再開 CLAUDE.md プロジェクトルールを定義。チームで共有 DABs 設定をYAMLで管理。bundle deployでデプロイ ☕ 10分休憩の後、ハンズオンを開始します 28
  25. ハンズオン : Unity Catalog ブラウザー 1 基本生成 10分 Claude Codeでアプリを生成、ローカル実行

    2 エラー対応 10分 valueFromエラーをClaude Codeと対話して解決 3 機能追加 25分 統計表示、グラフ、エラーハンドリングを追加 4 CLAUDE.md更新 5分 学んだことをCLAUDE.mdに追記 5 デプロイ 10分 DABsでDatabricks Appsにデプロイ 💡 詰まったらエラーをClaude Codeに貼り付けて相談! 30
  26. トラブルシューティング streamlit: executable file not found → --prepare-environment を付けて実行 valueFrom

    can't be resolved locally → --env DATABRICKS_WAREHOUSE_ID=xxx CLAUDE.mdの内容を説明できない → プロジェクトディレクトリでclaude起動 コンテキスト超過 → /clear でリセット アプリが起動しない(デプロイ後) → --server.port等の指定を削除 bundle deploy で権限エラー → databricks auth describe で認証確認 34
  27. 37