概要
NeNe フィールドトライアル FT6。FT1-5 が全て web/HTTP runtime を経由した surface を当てた一方、`cli/` 配下の setup スクリプト (`initSQLite.php`, `setupDatabase.php`) は一度も実走検証されていない。
post-FT5 baseline (PR #275/#283/#284/#285/#286/#287/#288/#289/#290/#291 merge 後の main、ADR-0004 + self-review checklists + unauthorizedRedirect hook 等を含む) から開始。
Goal
CLI 経由で fresh installer / database admin role を演じる:
- `php cli/initSQLite.php` の対話 UX (Y/N prompt、DB ファイル location、再実行時の idempotency)
- `php cli/setupDatabase.php` の挙動 (env 必要 / オプション、何を作るのか、MySQL 接続の前提)
- 両者の使い分け - `composer.json` / docker.md / tutorial で説明されているか
- CLI script を中断 (`Ctrl-C` シミュレート) した場合の rollback / 中途半端状態
- 環境変数の影響 (`NENE_DB_TYPE=SQLite3` vs MySQL での挙動分岐)
- CI / Docker から自動実行する場合 (`printf 'Y\n' | php cli/initSQLite.php` 等の noninteractive pattern)
- error path — 既存 DB / 権限不足 / 不正 env のメッセージ
Smarty / HTML / REST / auth は今回 out of scope。
Scope
| 項目 |
内容 |
| Clone path |
`../NeNe-FT/ft6-cli-tooling/` |
| Bootstrap |
`tools/nene-ft-new.sh cli-tooling` (port 8086/3313 自動) |
| Baseline |
NeNe `main` (post-FT5) |
| エンティティ |
なし (CLI のみ実走、新規 entity は作らない) |
| テスト |
既存 `composer test` + `composer test:http` 回帰確認のみ、CLI 自体への phpunit 追加は scope 外 |
| OpenAPI |
触らない |
| ドキュメント |
必要なら docs/development/cli.md (新規) や docker.md の更新を提案 |
Non-Goals
- 新規 `cli/` script の追加 (現状 2 本の振る舞いを当てる)
- composer scripts (`composer test`) の見直し
- Database migration tool 導入 (Phinx / Doctrine Migrations)
- `php cli/setupDatabase.php` 経由の DDL 自動同期 (`docker/mysql/init/001_schema.sql` との parity 議論は FT2/FT5 で touched 済み)
Expected friction surfaces (hypothesis)
| # |
仮説 |
Kind |
| H-A |
initSQLite.php の Y/N prompt が CI noninteractive で動かしづらい |
feature-gap |
| H-B |
setupDatabase.php の用途と initSQLite.php の使い分けが docs に無い |
docs-gap |
| H-C |
再実行時の idempotency が不明 (既存 row / table をどう扱うか) |
docs-gap |
| H-D |
`Initialize::init()` を CLI から呼ぶため一部の constants (DOCUMENT_ROOT 等) が web 前提の値で動く問題があるかも |
design-trade-off |
| H-E |
error message が「該当 user に書き込み権限なし」「DB host 名前解決失敗」等の典型ケースで親切でないかも |
docs-gap |
| H-F |
composer.json の scripts に CLI のショートカットが無い (e.g. `composer cli:init-sqlite`) |
feature-gap |
アウトプット
- Trial clone は独立、framework repo にはコミットしない
- friction は `F-N` 形式で `FT6-PLAN.md` に時系列記録
- 完了後 framework repo に `docs/field-trials/2026-05-field-trial-6.md` を新規 Issue + branch + PR で追加
- 各 finding は GitHub Issue として個別起票し、本 Issue から参照
- self-review checklist は適宜参照 (`docs/review/field-trial-report.md` 等)
関連
- 前回: FT5 (`docs/field-trials/2026-05-field-trial-5.md`)
- Methodology: `docs/field-trials/README.md`
- ADR 0002 (FT methodology) / ADR 0003 (envelope) / ADR 0004 (unauthorizedRedirect hook)
- `docs/review/field-trial-report.md` (本ループの self-review 用)
概要
NeNe フィールドトライアル FT6。FT1-5 が全て web/HTTP runtime を経由した surface を当てた一方、`cli/` 配下の setup スクリプト (`initSQLite.php`, `setupDatabase.php`) は一度も実走検証されていない。
post-FT5 baseline (PR #275/#283/#284/#285/#286/#287/#288/#289/#290/#291 merge 後の main、ADR-0004 + self-review checklists + unauthorizedRedirect hook 等を含む) から開始。
Goal
CLI 経由で fresh installer / database admin role を演じる:
Smarty / HTML / REST / auth は今回 out of scope。
Scope
Non-Goals
Expected friction surfaces (hypothesis)
アウトプット
関連