← Works に戻る 業務委託 · 2026/5 - 現在 大学向け
大学向け LMS のリアーキテクチャ
- 作った
もの - メッセージ/
お知らせ機能の MVC 化 (完了)と、 テストの 実行画面の MVC 化 (進行中)。 - 担当
- 業務委託。
2 機能の 設計・実装・検証。 Controller の 再編と、 テスト画面の 実行系を 主に 担当。 - 難所
- PC と
スマホの 別実装、 古い 世代の コードとの 同居、 5 言語対応。 利用者の 操作を 保って 移す こと。 - どう
解いたか - 古い
処理を そのまま 呼び、 DB の 突き合わせと ブラウザの 自動巡回で 検証。 「消して よい 証明」を 作る。
紹介
大学で
Case study / 02
制作と担当
メッセージ/
長く
業務委託と
メッセージ/お知らせ機能の MVC 化
期間:2026-05〜07
- フレーム分割の
手続き型で、 PC と スマホが 別実装だった 機能を、 ルーターと 権限の 境界で 分けた 7 つの Controller と 3 つの 共通部品へ 移した。 - 1,514 行あった
巨大な 基底クラスを 撤廃。 - PC と
スマホを 1 つの テンプレートに 統合。 入力フォームは 1 つの DOM にし、 表示だけ CSS で 出し分ける。 - 5 言語
(日本語・英語・韓国語・簡体字・繁体字)の 文言を、 履歴を 保ったまま 移し、 13 の テンプレートを 翻訳関数 経由にした。 - 送信の
認可を 作り直した (管理者・閲覧者は 常に 可、 教員・学生は コースの 所属と 役割を 検証)。 設計判断を ADR と して 3 本残す運用を、 この チームで 初めて 入れた。 - 古い
画面を 削除する 前に 「消して よい 証明」を 作った :参照の 検索、 73 本の リモートブランチとの 突き合わせ、 回帰テスト、 テスト資産の 確認。 - 移行の
途中で、 実際の 不具合を 6 件 見つけて 直した (無限再帰、 PHP 8 での 致命的エラー、 通知の 未読件数、 言語ラベルの 欠落など)。
PC · 1 問ずつPC · 全問一括 スマホ
共通テンプレート既存の設問描画を、そのまま呼ぶ。
旧画面の回答後 DB ↔新画面の回答後 DB
新旧の
テストの実行画面の MVC 化
期間:2026-08〜・進行中
- 同じ
機能が 「PC で 1 問ずつ」 「PC で 全問一括」 「スマホ」の 3 つに 分かれて 実装され、 設問タイプを 1 つ 足すにも 3 か所の 修正と 3 回の テストが 要った。 これを 1 つの テンプレートへ まとめる。 条件は、 利用者の 体験を 変えない こと。 - 方針:
- 古い
処理を 正とし、 書き直さずに 呼ぶ (設問の 描画は 既存の 部品を そのまま 使う)。 - フレーム分割の
「枠割り」は 残し、 仕組みは 捨てる (1 ページ+flex で 同じ 配置)。 - 互換は
段階的に :旧 URL への 互換の 入口を 残し、 特殊な 教材は 古い 実装へ 委ねる (ストラングラー方式)。 - 「同じ」は
検証で 証明する :新旧で 回答した あとの DB を 突き合わせる。
- 古い
- 12 の
設問 タイプ × 一括/制限時間/未回答/一問 一答/しおりからの 再開/ランダム 出題/アンケート/レポート × PC/スマホ、 の 組み合わせを 実機で 検証。 - 着手前の
調査は、 AI の サブエージェント 4 本を 並列に 走らせて 1 日で 行った。 中核の 4 クラス(最大 4,579 行)、 テスト 9 本、 大学ごとの カスタマイズ 約 15 か所、 5 言語 × 66 キーの 文言などの 隠れた 依存を 台帳にし、 32 画面を 洗い 出した。 - スマホ画面から
古い jQuery Mobile を 外した。
検証のやり方
- 「HTTP 200 なら
正常」とは 見なさない。 致命的エラーの 画面も 200 を 返すため、 本文の 目印の 検査と、 画面写真の 差分を Playwright で 自動巡回する 仕組み (21 の URL)を 標準にした。 - アクセシビリティ
(WCAG 2.0 1.4.3 の コントラスト)の 検査を Playwright と Firefox で 自動化し、 Firefox の 検査パネルと 結果が 一致する ことを 確かめた。
現場での AI 駆動開発
- Claude Code の
スキルを 3 本 自作: - MR・CHANGELOG・コミットの
書式:マージ済みの MR 200 件と、 実際に 書かれた 66 件から 書式を 統計で 取り出した (最初の 版が 少数派の 書き方に 倣っていたのを、 自分で 見つけて 直した)。 - アクセシビリティの
自動検査 (上記)。 - 手動テストの
台本の 書式。
- MR・CHANGELOG・コミットの
- 設計判断を
ADR に 残し、 「なぜ他の 案を 捨てたか」を 必須にした。 - Notion・Figma と
Claude Code を つなぎ、 資料と ワイヤーフレーム (13 案 × PC/スマホ)を 作った。
規模
2026-10-15 時点
- 期間:2026-05〜
(約 5 か 月) - コミット:約 170 / 主に
触った モジュール:3 つ (メッセージ・ お知らせ・設問) - 品質の
仕組み:PHPUnit、 PHPStan、 Psalm、 PHP_CodeSniffer、 GitLab CI (PHP 7.4 と 8.2 の 両方で 実行)
構成
- 移行の
前:フレーム分割の 手続き型ページ (PC 用) +スマホ用の 別実装 + 巨大な 基底クラス - 移行の
後:ルーター → 権限の 境界で 分けた Controller 群 → 1 つの テンプレート (PC/スマホを CSS で 出し分け) → 5 言語の 文言 - テスト画面:3 実装
(PC 1 問ずつ/PC 一括/スマホ) → 1 テンプレート。 古い 設問描画は そのまま 呼ぶ。 新旧の DB を 突き合わせて 同じ ことを 確かめる。