Migration Engine 設計仕様メモ
2026-07-19 JST

本メモは、ChatGPTさんとのレビュー（KSPHP Plus設計レビュー：Migration・
保守設計編）と、その後の基さんとの検討で固まった決定事項を記録する。
実装（migrate.php本体）はまだこれから。


1. プロジェクトの目的
------------------------------------------------------------
古いPHP5系掲示板をPHP8系へ安全に移行し、小規模コミュニティを存続
させること。単なる互換対応ではなく、コミュニティ継承支援プロジェ
クトである。


2. 最重要原則
------------------------------------------------------------
* 速い、軽い、確実に
* 利用者の利益最大
* 壊さない保守（リファクタリング目的の変更はしない、設計者の意図
  を尊重する、「きれいだから」では変更しない、動作互換最優先）
* 新規仕様は旧仕様をこわさずバックアップする
  （2026-07-19、基さんによる最優先構成の指定）
* 利用者が何もしなくても、安全にアップデートできること
  （手動インストーラー前提ではなく、自動移行が理念の中心）


3. ファイル構成の決定（2026-07-19）
------------------------------------------------------------
Migration Engineはbbs.php本体には組み込まず、独立したファイル
（例：migrate.php）として分離する。

  理由1：bbs.php本体に組み込むと、毎リクエストのたびに「旧ファイル
  を検索してバックアップを作ろうとする」構成になってしまい、
  「速い・軽い」の原則に反する。

  理由2：bbs.php自体は配布・上書きコピーの対象となるファイルであり、
  Migrationロジックを混在させると、コピー時に意図せず上書きされる
  危険がある。独立ファイルにすることでこのリスクを避ける。

呼び出しはbbs.php側から自動で行う。初回起動時のみmigrate.php相当の
処理をrequireして自動実行し、旧構成の検出・移行が完了していれば
以降はスキップする（「利用者が何もしなくていい」の原則に基づく、
手動実行前提のinstall.phpという発想ではなく、自動移行エンジンと
して設計する）。


4. ディレクトリ構成
------------------------------------------------------------
data/ ・ logs/ ・ config/ へ役割を分離する方向（ChatGPTさんのレビュー
案を採用）。各ディレクトリには.htaccessを標準添付し、外部からの
直接アクセスを禁止する（Secure by Default）。


5. バックアップ方式（2026-07-19 決定）
------------------------------------------------------------
Migration実行のたびに旧データを退避するが、同名ファイルによる上書き
衝突を避けるため、実行1回ごとに個別のフォルダへ格納する（リネーム
方式ではなく、フォルダ分離方式を採用）。各フォルダ内では元の
フォルダ構成をそのまま維持する。

  例： backup/YYYY-MM-DD-NN/ 以下に、旧構成のフォルダ構造をそのまま
  コピーする。

元ファイルは移行成功確認まで削除しない。問題が発生した場合は、
対応するbackupフォルダから即座に復元できる状態を保つ。


6. CSS（対応済み）
------------------------------------------------------------
css.phpにより既に対応済み。<style>内にあった共通CSSを外部化し、
"?c=" パラメータ経由で個人用環境設定の配色を動的に注入する構成に
なっている。HTMLとデザインの分離という点で、ChatGPTさんのレビュー
案と一致することを2026-07-19に確認済み。


7. 管理パス
------------------------------------------------------------
conf.phpから分離する方向。可能であれば公開領域外への配置を推奨し、
難しい環境ではconfig/.htaccessで保護する。


8. データベース（不採用、2026-07-19確認）
------------------------------------------------------------
本体では採用しない。KSPHP Plusは「軽量」「FTP設置」「小規模コミュ
ニティ向け」という性格を維持する。全文検索等の用途は、別プロジェクト
またはExport機能で対応する。


9. 未確定・今後の検討事項
------------------------------------------------------------
* config/管理パスの具体的な配置方法（次段階へ持ち越し、今回は
  着手しない）
* migrate.php本体の実装 → 2026-07-19に実施済み（本メモ末尾の
  「対応状況」参照）


10. 移行対象範囲の最終決定（2026-07-19）
------------------------------------------------------------
以下は移行対象から明確に除外する（バックアップも行わない、現状の
パスのまま流用する）。

* upload/（画像アップロード）：画像データは容量が大きく、バック
  アップのコストが重すぎるため対象外。
* archive/（過去ログzip、conf.phpのZIPDIR）：同様に容量が大きく
  なりうるため対象外。

一方、以下はテキストベースで容量が軽く、バックアップコストが低い
ため、引き続き移行対象に含める（現行実装のまま変更なし）。

* bbs.log ・ log/（ログ）
* bbs.cnt ・ count/（カウンタ）
* gikoneko_kotoba.dat（擬古猫のことばデータ）


11. 対応状況（2026-07-19時点）
------------------------------------------------------------
* migrate.php本体：実装・動作確認済み
* conf.php：LOGFILENAME/OLDLOGFILEDIR/COUNTFILE/CNTFILENAMEを
  新構成パスへ書き換え済み（実機conf.phpの他の設定値は保持）
* bbs.php：起動時のksphp_migrate()呼び出しを組み込み済み
* gikoneko.php/gikonekoadd.php：デフォルトデータパスをdata/へ変更済み
* 残タスク：公開に向けた最終レビュー・パッケージング（要go）


10. 開発体制
------------------------------------------------------------
* GitHub上の公式メンテナーが存在（「かぐや氏」らが公式保守を担当）
* 擬古猫（基さん）：公式外から設計・改善・検証を行い、クレジットに
  も記載
* Claude：実装担当
* ChatGPT：設計レビュー・保守性・将来設計担当
