Visual Studio Code + Cline + Databricks extensionを用いたローカル開発環境整備

# はじめに
本記事では、Visual Studio Codeと2つの拡張機能（ClineおよびDatabricks extension）を用いたDatabricksのローカル開発環境の整備に関する情報や簡単な手順をまとめる。実際の動作イメージは以下GIFの通り。

![output_high_quality.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/d7efb48e-d6bd-3c8f-c6e1-ae851254e25c.gif)

# 環境前提
本記事は以下の環境を前提とする。

- MacBook Pro (Apple M2 Pro)
    - macOS: Sonoma 14.7.1
- Visual Studio Code
    - バージョン: 1.96.0
- AWS CLI (`aws --version`)
    - aws-cli/2.15.24 Python/3.11.6 Darwin/23.6.0 exe/x86_64 prompt/off
- Databricks CLI (`databricks --version`)
    - Databricks CLI v0.224.1
- pyenv
    - 2.4.11

# 参考
VS CodeとDatabricksを用いた開発フローについて、以下の記事が分かりやすい。

https://qiita.com/manabian/items/d6187a08752dec17b3e0

VS CodeのDatabricks拡張のセットアップ手順について、以下の記事はWindows PCを対象にしたものだが、大変参考になる。

https://qiita.com/manabian/items/48ea58ab80cee27c0d78

以下のXポストを見て、Clineを使ってみたくなった。

https://x.com/takahiroanno/status/1876295157026607439

ということで、以下の構成のセットアップ手順のメモをまとめていく。

1. VS CodeのCline拡張セットアップ
    - Amazon Bedrockを利用
    - Databricksのサンプルノートブックの作成
2. VS CodeのDatabricks拡張セットアップ
    - Databricks on AWSのワークスペースを作成
    - VS Codeから接続、コードを実行
    - DatabricksワークスペースでGitHubリポジトリの更新

# 1. VS CodeのCline拡張セットアップ
以下の記事を参考。

https://qiita.com/watany/items/468313c602860f82fdde

## Amazon Bedrockの設定
1. 本記事では、東京リージョン (ap-northeast-1) のClaude 3.5 Sonnet v1 (モデルID `anthropic.claude-3-5-sonnet-20240620-v1:0`) を利用するため、アクセス許可があることを確認する。ない場合はアクセス許可をリクエストする
    - 備考：本記事執筆時点 (2025-01-07) ではClaude 3.5 Sonnet 
 v2 (モデルID `anthropic.claude-3-5-sonnet-20241022-v2:0`) はオレゴンリージョン (us-west-2) でのみ利用可能
    - [AWS リージョン別のモデルサポート - Amazon Bedrock](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/models-regions.html)
2. 任意のIAMユーザーを作成、IAMポリシー`AmazonBedrockFullAccess`をアタッチ
3. 当該IAMユーザーのアクセスキーID、シークレットアクセスキーをダウンロードし、AWS CLIのデフォルトプロファイル (`~/.aws/credentials` > `[default]`) に保存する
    - 備考：ClineのSettingsでアクセスキーIDやシークレットアクセスキーの入力が可能なので、AWS CLIのデフォルトプロファイルに保存するかどうかは好みの問題

## Clineのインストール
VS CodeのExtensionで、Clineと検索してインストールするだけ。

## Clineの設定
歯車アイコンを押し、以下を選択・入力し、[Done]をクリックする。

- API Provider: AWS Bedrock
- AWS Region: ap-northeast-1
- Model: `anthropic.claude-3-5-sonnet-20240620-v1:0`

AWSの認証情報はAWS CLIのデフォルトプロファイルから読み取るため、アクセスキー/シークレットキー/セッショントークンは空白でOK。
Custom Instructionsは好みの内容を設定する。日本語で返して欲しい場合には`Speak in Japanese`などと入れておくと良い。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/67c7fb57-3f41-29cb-336e-6b3935c74dbe.png)

## Databricksのサンプルノートブックの作成
Auto-approve設定は好み、まずはReadぐらいを設定しておく。Clineでサンプルノートブック作成のタスクを開始する。

```
Databricksのサンプルノートブックを作成して。displayを実施するだけのシンプルな内容で良いです。
```

以下のように簡単なノートブックが作成される。ちゃんとファイルの先頭に`# Databricks notebook source`という行が追加されており、Databricksワークスペースにインポートするとノートブックとして認識される。内容も問題ないため[Save]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/323f2b12-1f41-b758-d3d1-7739d3e1522b.png)

これでClineのセットアップは完了。

# 2. VS CodeのDatabricks拡張セットアップ
基本的な流れは以下を参考。

https://qiita.com/manabian/items/48ea58ab80cee27c0d78

## Databricks on AWSワークスペースを作成
テスト用のDatabricksワークスペースをon AWSで作成する。Azure DatabricksやDatabricks on GCPでも手順的には問題ない。

Databricksアカウントコンソールで[ワークスペースを作成]をクリック、任意のワークスペース名などを入力して作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/e5b99ce2-e690-8a5a-05e2-809956f94da9.png)

## Databricks CLIにプロファイルを登録
`databricks configure`を実行、または直接`~/.databrickscfg`を編集し、ワークスペースURLと認証方式を記載する。

```bash:~/.databrickscfgの例
[DEFAULT]
host      = https://example.cloud.databricks.com/
auth_type = databricks-cli
```

## Databricks拡張のインストール
VS CodeのExtensionで、Databricksと検索してインストールするだけ。拡張機能IDは`databricks.databricks`

## Databricksプロジェクトの作成
VS Codeの左側メニューにDatabricksのアイコンが追加されるのでクリックし、以下を実施。

1. [Create a new Databricks Project]をクリック
1. ワークスペースを聞かれるので[DEFAULT]を選択
1. 認証方式を聞かれるので[DEFAULT] (Authenticate using OAuth (User to Machine)) を選択
    - ブラウザが開いて`Authenticated`と表示されれば認証成功
1. 任意のパスを指定

## Databricksプロジェクトの作成 (DAB)
上記を実施するとVS CodeのターミナルにDatabricks Asset Bundles (DAB) のInitが表示される。

1. `default-python`を選択
1. 任意のプロジェクト名 (`my_project`など)を入力
1. Include a stub (sample) notebook: [no]を選択
1. Include a stub (sample) DLT: [no]を選択
1. Include a stub (sample) Python package: [no]を選択
1. コマンドパレットで作成したプロジェクト名が表示されるのでクリック、VS Codeがそのプロジェクトを開く

## サンプルノートブックをDatabricksプロジェクトに配置
上記で作成したサンプルノートブックを`src`フォルダなどに配置する。

## クラスターの設定
以下を実施。

https://qiita.com/manabian/items/48ea58ab80cee27c0d78#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A

## Pythonバージョン確認・アップデート
ターミナルでpyenvでPythonのバージョン確認、3.10未満の場合は新しいものを入れる。

```bash:pyenvでのPythonバージョン確認
%pyenv versions      
  system
  3.11.7
* 3.12.3 (set by /Users/hiroyuki.nakazato/.pyenv/version)
```

```bash:pyenvでのPythonインストール
pyenv install --list
pyenv install 3.12.5
pyenv global 3.12.5
```

## Python環境設定
Databricks拡張のコードの実行のPython Environmentの部分がエラーになるので、Pythonの環境を設定する。

- Create new environment > Venvを選択
- Python 3.10以上を選択
- インストールする依存関係でrequirement-dev.txtを選択
- Databricks拡張の表示でPython Environmentのエラーが解消されていればOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/213b5658-829f-c65b-b086-5e2ba4a89430.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/71ec1aba-4c0f-42aa-69ff-281828f048ab.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/afdb54c7-514e-cf53-06ef-e1a601b5c515.png)

## セルの実行
`.py`のノートブックを開くと、[セルの実行]が表示されるのでクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/ee1be36c-35d4-b45d-09ca-5a22e959a8d2.png)

`ipykernel`パッケージのインストールが求められるので、インストールを実施する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/555ef0d0-c4b5-7702-cbcc-484344adccda.png)

次の画面のように、Databricksクラスターで実行したセルの結果がVS Codeに表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/834d5aaa-dc34-a43b-65bf-84b9bbcf10e9.png)

以上です。