ディレクトリの概要
アプリを作成する と、直接編集できるソースコードが手に入ります。以下は、既定のアプリテンプレートでよく使う開発の場所です。設定、インストールされた依存関係、ビルドの出力は、それぞれのセットアップ手順のあとに現れます。
my-app/
├── client/ # ページ、コンポーネント、クライアントのロジック
├── server/ # API と業務のサービス
├── database/ # 接続ごとにまとめたマイグレーションとシード
├── cli/ # アプリのコマンドと CLI のプラグイン
├── tests/ # テストとテストのヘルパー
├── public/ # 静的アセット
├── packages/ # ローカルの workspace のパッケージ(任意)
├── .agents/
│ ├── rules/ # プロジェクトが所有するエージェントのルール
│ └── skills/ # 依存関係から同期したスキル(生成)
├── AGENTS.md # エージェント向けガイダンスの入口
├── config.example.yml # 設定の例
├── config.yml # ローカルの設定(セットアップ時に生成)
├── package.json # スクリプトと依存関係
├── pnpm-lock.yaml # 解決済みの依存関係のバージョン
├── pnpm-workspace.yaml # workspace の設定
├── node_modules/ # インストール済みの依存関係(生成)
├── dist/ # ビルドの出力(生成)
└── storage/ # 実行時のデータディレクトリはテンプレートのバージョンやアプリの機能によって異なります。packages/ などの任意のディレクトリは、ツリーに合わせて空のディレクトリを追加するのではなく、必要になったときに作成してください。
ページ、API、データの置き場所
| 変更内容 | 主な場所 | アプリへの接続方法 |
|---|---|---|
| ページやメニュー項目を追加する | client/pages/ | client/routes.ts でルートとナビゲーションを登録する |
| UI コンポーネントや操作のロジックを再利用する | client/components/、client/hooks/ | ページやほかのコンポーネントからインポートする |
| レイアウト、テーマ、画面の文言を変更する | client/layouts/、client/theme/、client/locales/ | 対応するレイアウト、テーマ、言語のリソースを編集する |
| 画像などの静的アセットを追加する | public/ | ページやスタイルから URL で参照する |
| HTTP API を追加する | server/routes/ | server/routes/index.ts で登録する |
| 業務サービスを切り出す | 必要に応じて server/services/ を作成する | ルートから呼び出す。サービスの登録とライフサイクルの管理が必要な場合は server/providers/ を使う |
| データベースのテーブルを作成・変更する | database/main/migrations/ | アプリが実行するマイグレーションを追加する |
| 初期データを用意する | database/main/seeds/ | 初期化のロジックを追加する |
| アプリのコマンドを追加する | 必要に応じて cli/commands/ を作成する | アプリの CLI コマンドのディレクトリ規約に従う |
ページと API は登録の入口に接続します。ファイルを追加するだけではアクセスできるようになりません。client/extensions/ にインストールした UI のソースもアプリのものであり、インポートでページやコンポーネントに接続します。
database/ はリソースを接続名ごとにまとめます。main が既定の接続です。実行済みのマイグレーションは残し、以降のスキーマの変更には新しいマイグレーションを追加します。実装の詳細は テーブルと初期データ を参照してください。
たとえば顧客管理では、通常、テーブルのマイグレーション、API のルート、ページ、対応する登録ファイルがかかわります。最初の機能を開発する に沿って進めると、これらの場所が動く機能の中でどう組み合わさるかがわかります。
設定、依存関係、プラグイン
設定ファイル
| 場所 | 役割 |
|---|---|
config.example.yml | コミットする設定の例。実際の認証情報は含めない |
config.yml | 現在の環境のデータベースの接続、シークレットなどの設定。Git には入れない |
server/config/ | コードで定義する設定の既定値、検証、環境変数との対応 |
現在の環境の接続情報を変えるには config.yml を使います。業務ロジック用の設定項目を追加するときは、server/config/ の定義を更新します。読み込みの動作とコマンドについては、アプリの設定 を参照してください。
依存関係とプラグインの登録
package.json には、依存関係の宣言とともに、開発、テスト、ビルドのスクリプトが含まれます。pnpm-lock.yaml は解決された依存関係のバージョンを記録し、ソース管理に含めます。
テンプレートは、ユーザー、認証、認可、ファイルなどの機能をプラグインで提供します。package.json はどのパッケージがインストールされているかを、登録ファイルはどの提供内容が接続されているかを示します。
| ファイル | 登録するもの |
|---|---|
client/plugins.ts | クライアントプラグイン |
server/plugins.ts | サーバープラグイン |
cli/plugins.ts | CLI プラグイン |
プラグインが 3 つの入口すべてを提供するとは限らず、開発用のスキルだけを提供するパッケージもあります。依存関係のインストール、プラグインの登録、ページへの組み込みは、それぞれ別のステップです。手順は プラグインを管理する を、個々の機能は プラグイン一覧 を参照してください。
ローカルのプラグインや共有パッケージは packages/ に置き、ワークスペースのパッケージのディレクトリは pnpm-workspace.yaml で設定します。UI のソースアセットを独立して配布する場合は、そこで UI Registry のパッケージを管理することもできます。詳しい構成は プロジェクトのディレクトリとファイルの規約 を参照してください。
テストの置き場所
テストは tests/ に置き、検証するコードごとに整理します。
| ディレクトリ | 内容 |
|---|---|
tests/client/ | ページ、コンポーネント、クライアントのロジック |
tests/server/ | API、サービス、権限 |
tests/database/ | マイグレーション、初期データ、データベースの動作 |
tests/cli/ | アプリのコマンド。必要に応じて作成する |
tests/project/ | プロジェクトの設定とビルド |
tests/fixtures/、tests/helpers/、tests/setup/ | テストデータ、共有のヘルパー、環境のセットアップ |
tests/playwright/ | ブラウザーでの操作のテスト。必要に応じて作成する |
Vitest のテストは、アプリのルートで pnpm test を実行します。ブラウザーのテストは pnpm test:e2e を使い、テストの設定で指定された、動作中のアプリとサインイン情報が必要です。セットアップの手順は テスト を参照してください。
既存のプロジェクトでは別のディレクトリを使っていることがあります。その場合は、プロジェクトの vitest.config.ts と playwright.config.ts に従ってください。レポートで実際のテスト数を確認します。テストが 1 件もないまま正常終了しても、機能が検証されたことにはなりません。
エージェントが読むガイダンス
AGENTS.md は、アプリ開発のガイダンスの入口です。プロジェクトが所有する規約と、依存関係が提供するスキルを区別します。
| 場所 | 管理方法 |
|---|---|
AGENTS.md、.agents/rules/ | プロジェクトの開発規約として、ソースと一緒に管理してコミットする |
.agents/skills/ | 依存関係から同期される。これらのコピーは編集もコミットもしない |
業務の規約は、アプリの開発を続ける の説明に従ってプロジェクトのガイダンスに追加します。依存関係からスキルを更新するには、アプリのディレクトリで pnpm nocobase skills sync を実行します。その他のオプションは CLI リファレンス を参照してください。
生成されるファイルと実行時のデータ
次のものは、業務のソースコードとしては管理しません。
| 場所 | 管理方法 |
|---|---|
node_modules/ | パッケージマネージャーでインストール・更新する。依存関係のファイルを直接編集しない |
dist/ | pnpm build で生成する。ソースコードを変更してビルドし直す |
database/<connection>/collections/ | データベース構造のスナップショット。手で編集せず、pnpm nocobase collections generate で更新する |
storage/ | アップロード、ログ、データベースファイルを含む可能性がある実行時のデータ。設定に従って保持し、バックアップする |
SQLite がデータベースを保存する場所は接続の設定で決まり、アプリのルートにあることもあります。storage/ 内のデータベースファイルや業務データを、ビルドのキャッシュのように削除しないでください。パスの完全なリファレンスは プロジェクトのディレクトリとファイルの規約 を参照してください。