コンテンツにスキップ

クイックスタート

このウォークスルーでは、ゼロから、あなたが理解できる稼働中の Kozou スタックまでを案内します。あなたは PostgreSQL スキーマを書き、 Kozou はそれを一度読み込んで、同じ DDL と COMMENT から Admin UI、 REST レイヤー、MCP コンテキストを提供します — 定義の重複はありません。

所要時間は約 10 分を見込んでください。終わるころには、ローカルで 稼働するスタックと、MCP 経由であなたのスキーマを読む AI エージェントが 手元にあります。

  • PostgreSQL — スキーマの単一の信頼できる情報源。
  • REST レイヤー — v0.1 では PostgREST が提供し、並列の コンテナとして起動されます。
  • Admin UI — あなたのテーブルとビューから生成される、ブラウザ 上の CRUD インターフェース。ポート 3333 で動作します。
  • MCP エンドポイント — AI エージェント向けの読み取り専用スキーマ コンテキスト。ポート 3334 の HTTP 経由、またはエージェントを直接 接続する stdio 経由で利用できます。
  • PostgreSQL 16 以降 — 正準的な信頼できる情報源。scaffold された スタックは独自の PostgreSQL コンテナを起動するため、このウォーク スルーではローカルへのインストールは不要です。
  • Docker 24 以降docker compose up スタックのために推奨します。
  • Node.js 20 以降 — 公開パッケージを npx で直接実行するために 必要です。

npx を使う代わりに CLI をグローバルにインストールしたい、あるいは ランタイムイメージを pull したい場合は、インストール を参照してください。

create-kozou は単体の npm パッケージではなく、kozou パッケージの セカンダリ bin として配布されています。そのため、クリーンなマシンで npx がそれを見つけるには -p kozou が必要です:

Terminal window
npx -p kozou create-kozou my-project
cd my-project

これにより、バンドルされたテンプレートからプロジェクトディレクトリが 書き出されます。生成された内容を見てみましょう:

my-project/
├── docker-compose.yml # PostgreSQL + PostgREST + a `kozou` service
├── kozou.config.yaml # database URL, adapter, and UI-hints path
├── ui-hints.yaml # optional per-column label / widget overrides
├── .env.example # template for the env vars the stack reads
└── migrations/ # your schema; starts with a placeholder 0001_init.sql

一行ずつ説明します:

  • docker-compose.yml — PostgreSQL、PostgREST(REST レイヤー)、 そして kozou dev を実行して Admin UI と MCP HTTP サーバーをホスト する kozou サービスを起動します。
  • kozou.config.yaml — Kozou をあなたのデータベース (${DATABASE_URL})に向け、REST アダプターを選択し、UI ヒントを 参照します。${VAR}${VAR:-default} は読み込み時に環境変数 から展開されます。
  • ui-hints.yaml — データベースに触れずに、カラムのラベル、入力 ウィジェット、表示フィールドを上書きするためのオプションファイル です。ヒューリスティクスと COMMENT タグでほとんどのケースをカバー できるため、これは最初はほぼ空です。
  • .env.exampleDATABASE_URL を含む、スタックが読み込む環境 変数のテンプレートです。次のステップで .env にコピーします。

スターターの migrations/0001_init.sql は空のプレースホルダーです。 そこにあなた自身の CREATE TABLE / CREATE VIEW / COMMENT ON … ステートメントを追加してください — 例えば products テーブル、 orders テーブル、authors/books のリレーションなどです。Kozou は そのスキーマを、以下で見ていく Admin UI と MCP コンテキストに変換 します。

env テンプレートをコピーし、すべてを起動します:

Terminal window
cp .env.example .env
docker compose up

kozou サービスは kozou dev(バンドルされた SvelteKit Admin UI と MCP HTTP サーバー)を実行するため、docker compose up は一つの コマンドでフルスタックをオンラインにします。デフォルトのポートは 次のとおりです:

  • Admin UIhttp://localhost:3333
  • MCP HTTPhttp://localhost:3334

これらを変更するには、kozou.config.yamlserver.ui / server.mcp.http を設定します。バックグラウンドで実行するには -d を追加します。

http://localhost:3333 を開きます。Admin UI は完全にあなたのスキーマ から生成されます — 書くべき UI コードはありません。

  1. ダッシュボード — すべてのテーブルを一覧し、別のセクションで すべてのビューを一覧します。それぞれにラベルと説明の抜粋が付き ます。エントリをクリックすると開きます。
  2. リストビュー — テーブルについて、表示フィールドを先頭に、 主要なカラムを並べて行を表示します。検索(カラムをまたいだ 大文字小文字を区別しないマッチ)、ソート(カラムヘッダーを クリックして昇順/降順を切り替え)、ページネーション(1 始まり、 デフォルトで 1 ページあたり 50 行)に対応しています。
  3. 作成・編集フォーム — テーブルのカラムから生成され、ウィジェット を意識した入力を備えます: enum カラムはドロップダウンとして、 boolean はチェックボックスとして、日付は日付ピッカーとして描画され、 以下同様です。データベースのデフォルト(created_at など)のみで 埋められるカラムは、編集フォームでは読み取り専用になります。
  4. 外部キーのリレーションピッカー — 外部キーのカラムは、参照先の 行のラベルを解決する検索可能なコンボボックスとして描画されるため、 関連するレコードを id ではなく名前で選べます。
  5. 読み取り専用ビュー — ビューは、同じ検索、ソート、ページネーション を備えたリストとして開きますが、作成、編集、削除のコントロールは ありません。

4. MCP 経由で AI エージェントを接続する

Section titled “4. MCP 経由で AI エージェントを接続する”

Kozou は Model Context Protocol 経由で、あなたのスキーマを AI エージェント に公開します。Claude Code や Claude Desktop からの直接接続には、 kozou mcp --stdio を MCP サーバーとして登録します。

エージェントの MCP 設定にエントリを追加します。バンドルされた kozou.config.yaml 内の ${DATABASE_URL} プレースホルダーは DATABASE_URL 環境変数を消費するため、ここで渡します:

{
"mcpServers": {
"kozou": {
"command": "npx",
"args": ["-y", "kozou", "mcp", "--stdio"],
"env": {
"DATABASE_URL": "postgres://kozou:kozou@localhost:5432/kozou"
}
}
}
}

登録すると、エージェントは 6 つの読み取り専用ツールを呼び出せます。 これらはコンテキストプロバイダーにすぎません — SQL を生成したり、 SQL を実行したり、データを書き込んだりは決してしません:

  • list_tables — テーブル名と、そのラベルおよび説明。
  • describe_table — 一つのテーブルの完全なスキーマと COMMENT
  • list_views — ビュー名と、その目的。
  • describe_view — ビューのカラム、目的、基となるテーブル。
  • list_concepts — ビュー 1 つにつき 1 つのビジネス概念。
  • get_concept_context — 概念に関連するテーブルと、推奨される クエリパス。

ステップ 2 で起動したスタックも、ポート 3334 の HTTP 経由でこれらと 同じツールを提供します。これは、エージェントが自前のプロセスを 起動するのではなく、稼働中のコンテナに接続するときに使うトランス ポートです。

Kozou は通常の PostgreSQL の COMMENT テキストを読み込みます。いくつ かの接頭辞タグは構造化されたヒントとして抽出されます — @ai@widget@policy@example です。カラムにコメントを追加します:

COMMENT ON COLUMN products.status IS
'Lifecycle state of the product.
draft: not yet visible
published: visible in public listings
archived: retired from sale
@ai: prefer the published view for public listings
@widget: enum-select';

このひとつのコメントから、2 つのことが起こります:

  • @widget: enum-select は Admin UI の入力を変えます。プレーンな テキストフィールドの代わりに、products.status はドロップダウンと して描画されるようになります。@widget はカラムコメントでのみ 尊重されます。(これがなくても、Kozou は CHECK 制約が status IN ('draft','published','archived') のような値リストである カラムに対して enum-select を推論します — このタグはそれを明示的に 上書きするものです。)
  • @ai: … は MCP コンテキストに届きます。このメモは describe_tableget_concept_context といったツールを通じて surface されるため、クエリを書くエージェントはあなたのガイダンスを 目にします。@ai 行は人間が読める本文にも残るので、コメントは 依然として自然に読めます。

規約の全体については、 COMMENT 規約を参照してください。

  • ポートが既に使用中 — 別のプロセスが 3333 または 3334 にバインド されています。それを停止するか、kozou.config.yamlserver.ui / server.mcp.http(および docker-compose.yml の対応するマッピング) でポートを再マッピングしてください。
  • データベースに到達できない.envDATABASE_URLdocker-compose.yml の PostgreSQL サービスと一致していること、 そしてデータベースコンテナが healthy であること(docker compose ps) を確認してください。初回起動が遅い場合、PostgreSQL が接続を受け付ける 準備が整う前に他のサービスが起動することがあります。
  • Admin UI のフォーム POST が拒否される — Admin UI はプレーンな HTTP で提供されるため、SvelteKit は ORIGIN を必要とします。scaffold は ORIGIN=${KOZOU_ORIGIN:-http://localhost:3333} を設定します。 Admin UI のポートを再マッピングした場合は、それと同期を保ってください。
  • create-kozou が見つからないnpx -p kozou create-kozou … として実行したことを確認してください。これは kozou パッケージの セカンダリ bin であり、単体のものではありません。
  • COMMENT 規約 — すべてのタグ (@ai@widget@policy@example)と、それぞれがどう解析 されるか。
  • 出力されるサーフェス — Admin UI、 REST レイヤー、MCP がそれぞれ何を公開するか、そしてなぜか。
  • インストール — グローバルインストール、ランタイム イメージ、そしてワークスペースパッケージ(@kozou/core@kozou/introspect@kozou/mcp@kozou/svelte-ui)をライブラリと して使う方法。

v0.1 の REST レイヤーは PostgREST が提供します。v0.2 系では、実験的な 自社製 REST レイヤー @kozou/api が追加され、kozou dev --adapter api で有効化できます。これは実験的なものであり、デフォルトではありません。