Skip to content

FT6: CLI tooling (initSQLite.php, setupDatabase.php) against post-FT5 baseline #292

@hideyukiMORI

Description

@hideyukiMORI

概要

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 を演じる:

  1. `php cli/initSQLite.php` の対話 UX (Y/N prompt、DB ファイル location、再実行時の idempotency)
  2. `php cli/setupDatabase.php` の挙動 (env 必要 / オプション、何を作るのか、MySQL 接続の前提)
  3. 両者の使い分け - `composer.json` / docker.md / tutorial で説明されているか
  4. CLI script を中断 (`Ctrl-C` シミュレート) した場合の rollback / 中途半端状態
  5. 環境変数の影響 (`NENE_DB_TYPE=SQLite3` vs MySQL での挙動分岐)
  6. CI / Docker から自動実行する場合 (`printf 'Y\n' | php cli/initSQLite.php` 等の noninteractive pattern)
  7. 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 用)

Metadata

Metadata

Assignees

No one assigned

    Labels

    field-trialSpawned from a field trial finding, or part of the FT methodology / process

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions