LLM ガイド
LLM ガイド
このドキュメントは、Databricks AppKit でコードを生成する AI コーディングアシスタント向けの規範的なガイダンスです。一貫性があり本番環境で使えるコードを生成できるよう、あえて明確な方針を示しています。
このファイルに記載されているのは、LLM 向けガイダンスの一部のみです。
完全なガイダンスは、AppKit ドキュメントに基づく llms.txt ファイルを参照してください。
全体的なミッション
以下を使って Databricks 上で フルスタックの TypeScript アプリ を構築します。
- バックエンド:
@databricks/appkit - フロントエンド:
@databricks/appkit-ui - 分析: AppKit の Analytics プラグイン経由で実行される
config/queries/*.sql内の SQL ファイル
本ガイドは、AppKit のソースリポジトリにアクセスできない場合でも利用できるように設計されています。公開パッケージの API と移植性の高いプロジェクト構成のみを使うようにしてください。
厳守すべきルール (LLMガードレール)
- APIを勝手に作り出さないこと。不明な場合はドキュメントに示されたパターンに従い、
@databricks/appkitおよび@databricks/appkit-uiのドキュメント化されたエクスポートのみを使用してください。 createApp()は非同期です。トップレベルのawait createApp(...)を推奨します。それができない場合はvoid createApp(...)を使用し、Promiseのリジェクトを無視しないでください。- UIでは必ずローディング/エラー/空の状態を処理してください (
Skeleton、エラーテキスト、空状態の表示を使用) 。 - クエリパラメータには必ず
sql.*ヘルパーを使用してください (クエリがパラメータを必要としない場合を除き、生の文字列や数値をそのまま渡さないこと) 。 - SQL文字列を動的に組み立てないでください。
:paramNameを用いたパラメータ化クエリを使用します。 require()は決して使用しないでください。ESMのimport/exportを使用します。
TypeScript のインポートルール
tsconfig.json で "verbatimModuleSyntax": true を設定している場合は、型のみのインポートには必ず import type を使用してください (設定が厳格な環境では、ビルドが失敗することがあります) :
import type { ReactNode } from "react";
import { useMemo } from "react";API ドキュメント
API リファレンスを表示します (ドキュメント参照用のみ。スキャフォールディングには使用しません) :
# ドキュメントの閲覧専用 - init/スキャフォールディングには使用しないこと
npx @databricks/appkit docs <query>重要: 必ず最初に npx @databricks/appkit docs (query なし) を実行して、ドキュメントのインデックスを確認してください。パスを推測せず、インデックスから正しいパスを探してください。
例:
- ドキュメントのインデックス:
npx @databricks/appkit docs - セクションの表示:
npx @databricks/appkit docs "appkit-ui API reference" - 完全なインデックス (すべての API エントリ) :
npx @databricks/appkit docs --full - 特定のドキュメントの表示:
npx @databricks/appkit docs ./docs/plugins/analytics.md
LLM チェックリスト (コードを確定する前に)
プロジェクトのセットアップ
package.jsonに"type": "module"が設定されている- 開発サーバー用に
tsxが devDependencies に含まれている devスクリプトがNODE_ENV=development tsx watch server/server.tsを実行しているclient/index.htmlが存在し、<div id="root"></div>とclient/src/main.tsxを指すスクリプトが記述されている
バックエンド
await createApp({ plugins: [...] })を使用している (または意図的にvoid createAppを使用している)server()が含まれている (常に必須)- SQL を使用する場合:
analytics({})が含まれ、config/queries/*.sqlが存在する - クエリは
:paramプレースホルダーを使用し、パラメータはsql.*で UI から渡している - クエリをワークスペース単位に絞り込む必要がある場合:
:workspaceIdを使用している
フロントエンド
useMemoでパラメータオブジェクトをラップしている- ローディング/エラー/空の状態を明示的に扱っている
"json"/"arrow"を強制する理由がない限り、チャートはformat="auto"を使用している- チャートは children ではなく props (
xKey、yKey、colors) を使用している (Recharts ではなく ECharts ベースのため) - ツールチップを使う場合:ルートを
<TooltipProvider>でラップしている
禁止事項
- SQL文字列を手動で組み立てない
- 型注釈付きのクエリに型なしの生パラメータを渡さない
createApp()が返すPromiseを無視しない- ドキュメントに記載のないUIコンポーネントを勝手に作らない
- Rechartsの子要素 (
<Bar>、<XAxis>など) をAppKitのチャートコンポーネントに渡さない