コンテンツにスキップ

セットアップ

前提条件

ツール バージョン
Node.js v18 以上
npm Node.js 同梱のもの
Python v3.9 以上
pip Python 同梱のもの
Databricks サービスプリンシパル DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET を発行済みであること

手順

作業ディレクトリに注意

以下のコマンドはすべて nodejs-fastapi-hello-world-app/ で実行する(リポジトリのルートではない)。ディレクトリ名は Databricks のテンプレート由来で、アプリの内容とは無関係。

1. リポジトリのクローン

git clone https://github.com/fourdigit/databricks-apps-survey-analysis.git
cd databricks-apps-survey-analysis/nodejs-fastapi-hello-world-app

2. 依存関係のインストール

npm install
pip install -r requirements.txt

Python は仮想環境の利用を推奨する。

python -m venv venv
source venv/bin/activate   # Windows は venv\Scripts\activate
pip install -r requirements.txt

databricks-sdk は requirements.txt に含まれていない

テーブル一覧の取得(GET /api/catalogs/{catalog}/schemas/{schema}/tables)は databricks-sdk の WorkspaceClient を使う。未インストールでもアプリは起動するが、該当 API を呼んだ時点で 503 になる。必要なら pip install databricks-sdk を別途実行する。

3. 環境変数の設定

DATABRICKS_HOST と DATABRICKS_HTTP_PATH は databricks.yml / app.yaml から自動的に補われるため、.env には認証情報だけを書く。

touch .env

.env の各項目を設定する。

変数名 説明 例
DATABRICKS_CLIENT_ID サービスプリンシパルのクライアント ID xxxxxxxx-xxxx-...
DATABRICKS_CLIENT_SECRET サービスプリンシパルのシークレット dose...
DATABRICKS_HOST ワークスペースのホスト名。省略時は databricks.yml の default target から補完 dbc-46ba3922-f68b.cloud.databricks.com
DATABRICKS_HTTP_PATH SQL Warehouse の HTTP パス。省略時は app.yaml の env から補完 /sql/1.0/warehouses/e25d3da675c1b27b
APP_MODE local のとき yaml からの補完を有効にする(デフォルト local) local

読み込みの優先順位は .env > databricks.yml / app.yaml > システム環境変数(すでに設定済みの環境変数は上書きしない)。

.env はコミットしないこと。

4. 起動

フロントエンドとバックエンドを別々のターミナルで起動する。

# ターミナル 1: Vite dev server
npm run dev

# ターミナル 2: FastAPI
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000

http://localhost:5173 にアクセスして確認する。API のドキュメントは http://localhost:8000/api/docs(Swagger UI)。

Vite dev server は /api を localhost:8000 にプロキシする。バックエンドのポートを変える場合は frontend/vite.config.ts の server.proxy も合わせて変更する。

よくあるエラー

RuntimeError: databricks-sql-connector is not installed

原因: Python の依存がインストールされていない。SQL 層は import 失敗を握りつぶして遅延エラーにしているため、アプリ自体は起動してしまう。

解決策:

pip install -r requirements.txt

503 Service Unavailable(Databricks credential configuration is incomplete)

原因: DATABRICKS_HOST / DATABRICKS_HTTP_PATH / DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET のいずれかが未設定。

解決策:

# 読み込まれている値を確認する
python -c "from backend import settings; print(settings.DATABRICKS_HOST, settings.DATABRICKS_HTTP_PATH)"

不足している値を .env に追記する。SQL Warehouse が起動しているかも確認する。

400 Bad Request(Invalid identifier)

原因: catalog / schema / table 名が ^[A-Za-z0-9_]+$ に一致しない。SQL インジェクション対策の allowlist(backend/sql/utils.py)で弾かれている。

解決策: 識別子を確認する。記号やスペースを含む識別子は現状サポートしていない。

404 Not Found(Frontend not built. Please run 'npm run build' first.)

原因: backend/static/index.html がない。バックエンド単体で SPA を配信しようとした。

解決策:

npm run build

Port 8000 is already in use

原因: 既に別プロセスがポートを使用している。

解決策:

lsof -i :8000
# プロセスを終了するか、別ポートで起動する(vite.config.ts のプロキシ設定も合わせる)
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8001