Struts to JSF マイグレーション Agent Skill
JSF設計の特徴
JSFは画面中心のサーバーサイドMVCフレームワークです:
- •画面グループ: 関連する画面群(一覧、入力、確認等)をまとめたもの
- •基本設計: 画面グループ単位(basic_design/{screen_group}/)
- •詳細設計: 画面単位(detailed_design/FUNC_XXX/)
- •設計の流れ: 画面グループ全体を設計 → 個別画面を詳細設計
REST APIとの違い:
- •REST API: ドメイン/リソース単位(orders, images等)
- •JSF: 画面グループ単位(person_management等)
使い方(7段階プロセス)
ステップ1: リバースエンジニアリング
code
@agent_skills/struts-to-jsf-migration/instructions/reverse_engineering.md @projects/legacy/struts-app 既存のStrutsプロジェクトからSPECを生成してください パラメータ * struts_project_root: projects/legacy/struts-app * spec_output_directory: projects/jsf-migration/struts-app-jsf/specs
AIが自動で以下を実行
- •Strutsコード(Action、ActionForm、JSP、EJB、DAO)を分析
- •テンプレートを参照してSPECを生成
- •@agent_skills/struts-to-jsf-migration/templates/basic_design/ から参照
- •共通設計:
specs/baseline/basic_design/common/ - •画面グループ単位の設計:
specs/baseline/basic_design/{screen_group}/
- •抽象的・論理的なSPECとして
specs/フォルダに保存
生成される構造:
- •画面グループ: 関連する画面群(一覧、入力、確認等)をまとめたもの
- •JSFは画面中心のサーバーサイドMVCフレームワーク
テンプレート:
- •architecture_design.md - アーキテクチャ設計書
- •data_model.md - データモデル仕様書
- •external_interface.md - 外部インターフェース仕様書
- •functional_design.md - 機能設計書(画面グループ)
- •screen_design.md - 画面設計書(JSF専用)
- •behaviors.md - 振る舞い仕様書(E2Eテスト用)
ステップ2: タスク分解
code
@agent_skills/struts-to-jsf-migration/instructions/task_breakdown.md 全タスクを分解してください パラメータ * project_root: projects/jsf-migration/struts-app-jsf * spec_directory: projects/jsf-migration/struts-app-jsf/specs/baseline
AIが自動で以下を実行
- •SPECを読み込み
- •タスクファイルを分解・生成
- •
tasks/フォルダに保存
ステップ3: 詳細設計(画面単位)
code
@agent_skills/struts-to-jsf-migration/instructions/detailed_design.md 画面の詳細設計書を作成してください パラメータ * project_root: projects/jsf-migration/struts-app-jsf * spec_directory: projects/jsf-migration/struts-app-jsf/specs/baseline * target_type: FUNC_001_PersonList
AIと対話しながら以下を実施(対話的プロセス)
- •画面グループの基本設計(basic_design/{screen_group}/)を読み込み
- •対象画面の理解内容を説明
- •不明点をユーザーに質問
- •対話で妥当性・充足性を確認
- •画面単位の
detailed_design/FUNC_XXX/detailed_design.mdを生成
ステップ4: コード生成(詳細設計→実装→単体テスト)
code
@agent_skills/struts-to-jsf-migration/instructions/code_generation.md セットアップタスクを実行してください パラメータ * project_root: projects/jsf-migration/struts-app-jsf * task_file: projects/jsf-migration/struts-app-jsf/tasks/setup.md
AIが自動で以下を実行
- •タスクと詳細設計を読み込み
- •JSFコードを生成(Managed Bean、Entity、Service、Facelets XHTML等)
- •タスク粒度内の単体テストを作成
- •タスク内のコンポーネント間は実際の連携をテスト
- •タスク外の依存関係のみモック化
- •タスクを完了としてマーク
ステップ5: 単体テスト実行評価
code
@agent_skills/struts-to-jsf-migration/instructions/unit_test_execution.md 単体テストを実行してください パラメータ * project_root: projects/jsf-migration/struts-app-jsf * target_type: FUNC_001_PersonList
AIが自動で以下を実行
- •テスト実行(gradle test jacocoTestReport)
- •テスト結果とカバレッジ分析
- •問題の分類(テスト失敗、必要な振る舞い、デッドコード、設計の誤り)
- •フィードバックレポート生成
- •ユーザーに推奨アクションを提示
重要:
- •問題を発見してもユーザー確認なしに修正しない
- •Managed Bean はカバレッジ除外推奨(UI層はE2Eで検証)
- •必要に応じてステップ3(詳細設計)に戻ってループ
フィードバックループ:
code
詳細設計 → コード生成 → テスト実行評価
↑ ↓
└──── フィードバック ←────┘
ステップ6: 結合テスト生成
code
@agent_skills/struts-to-jsf-migration/instructions/it_generation.md 結合テストを生成してください パラメータ * project_root: projects/jsf-migration/struts-app-jsf * spec_directory: projects/jsf-migration/struts-app-jsf/specs/baseline
AIが自動で以下を実行
- •basic_design/{screen_group}/behaviors.md(結合テストシナリオ)を読み込み
- •JUnit 5 + Weld SE を使用した結合テストを生成
- •Service層以下(Service + DAO + Entity + DB)の連携テスト
- •実際のDBアクセス(メモリDB)
- •画面グループの業務フローを検証
ステップ7: E2Eテスト生成
code
@agent_skills/struts-to-jsf-migration/instructions/e2e_test_generation.md E2Eテストを生成してください パラメータ * project_root: projects/jsf-migration/struts-app-jsf * spec_directory: projects/jsf-migration/struts-app-jsf/specs/baseline
AIが自動で以下を実行
- •requirements/behaviors.md(E2Eテストシナリオ)を読み込み
- •Playwright を使用したE2Eテストを生成
- •複数画面にまたがるフローをテスト
- •実際のブラウザ操作
- •テストデータのセットアップ/クリーンアップコードを生成
🔄 基本設計変更対応(手戻り・拡張案件)
code
@agent_skills/struts-to-jsf-migration/instructions/basic_design_change.md
基本設計の変更を適用してください
パラメータ
* project_root: projects/jsf-migration/struts-app-jsf
* spec_directory: projects/jsf-migration/struts-app-jsf/specs/baseline
* change_spec: <変更差分ファイルパス>(省略可、デフォルト: {spec_directory}/basic_design/CHANGES.md)
AIが自動で以下を実行
- •CHANGES.md(変更差分ファイル)を読み込み
- •変更の影響を受けるファイル(詳細設計、コード、XHTML、テスト)を特定
- •変更タスクファイル(
tasks/change_tasks.md)を生成 - •既存の指示書を呼び出して更新
- •CHANGES.mdをアーカイブ
使用方法:
- •基本設計SPECのマスターファイル(functional_design.md、screen_design.md等)を自由に編集
- •CHANGES.mdを作成して変更内容を明示的に記載
- •共通設計の変更:
basic_design/common/CHANGES.md - •画面グループ固有設計の変更:
basic_design/{screen_group}/CHANGES.md
- •共通設計の変更:
- •上記コマンドを実行
- •適用後、CHANGES.mdは自動的にchanges_archive/に移動
重要:
- •マスターファイルはMarkdown、EXCEL、PDF、Word等、任意の形式で管理可能
- •変更内容はCHANGES.mdに明示的に記載(形式非依存)
- •共通設計と画面グループ固有設計で別々のCHANGES.mdを管理
注意:
- •JSFは画面中心のサーバーサイドMVCフレームワーク
- •画面グループ: 関連する画面群(一覧、入力、確認等)をまとめたもの
実践例
code
@agent_skills/struts-to-jsf-migration/instructions/reverse_engineering.md @projects/master/person/struts-person 既存のstruts-personプロジェクトからSPECを生成してください パラメータ * struts_project_root: projects/master/person/struts-person * spec_output_directory: projects/master/person/jsf-person-migrated/specs
その後、SPEC検証とコード生成を実施する
マイグレーション対象
Strutsの構成要素
既存コード分析で対象となるStrutsの構成要素
- •ActionForm: リクエストパラメータの保持
- •Action: ビジネスロジックの呼び出し
- •struts-config.xml: マッピング設定
- •JSPタグライブラリ:
<logic:iterate>,<bean:write>,<html:form>等 - •EJB: ステートレスセッションBean(JNDIルックアップ)
- •DAO: JDBC + DataSource
JSFの構成要素
仕様駆動開発で生成されるJSFの構成要素
- •Managed Bean:
@Named,@ViewScoped - •CDI:
@Injectで依存性注入 - •JPA: EntityManager、JPQL
- •トランザクション:
@Transactional - •Facelets XHTML:
<h:dataTable>,<h:outputText>,<h:form>等
ディレクトリ構造
code
agent_skills/struts-to-jsf-migration/
├── SKILL.md # このファイル
├── README.md # クイックスタートガイド
├── principles/ # マイグレーション原則
│ ├── architecture.md # Jakarta EE APIアーキテクチャ標準
│ ├── security.md # セキュリティ標準
│ └── common_rules.md # マイグレーションルール、マッピング規則
├── templates/ # SPECテンプレート(リバースエンジニアリング用)
│ └── basic_design/ # 基本設計用テンプレート
│ ├── architecture_design.md # アーキテクチャ設計書
│ ├── data_model.md # データモデル仕様書
│ ├── external_interface.md # 外部インターフェース仕様書
│ ├── functional_design.md # 機能設計書(画面グループ)
│ ├── screen_design.md # 画面設計書(JSF専用)
│ ├── behaviors.md # 振る舞い仕様書(E2Eテスト用)
│ └── CHANGES_template.md # 変更管理テンプレート
└── instructions/
├── reverse_engineering.md # ステップ1: リバースエンジニアリング
├── task_breakdown.md # ステップ2: タスク分解
├── detailed_design.md # ステップ3: 詳細設計
├── code_generation.md # ステップ4: コード生成(実装+単体テスト)
├── unit_test_execution.md # ステップ5: 単体テスト実行評価
├── it_generation.md # ステップ6: 結合テスト生成(JUnit + Weld SE)
├── e2e_test_generation.md # ステップ7: E2Eテスト生成(Playwright)
└── basic_design_change.md # 基本設計変更対応(手戻り・拡張案件)
参考資料
- •マイグレーション原則 - マイグレーションルール、アーキテクチャ標準、セキュリティ標準
- •architecture.md - Jakarta EE APIアーキテクチャ標準
- •security.md - セキュリティ標準
- •common_rules.md - 共通ルール、マッピング規則
- •Jakarta EE 10仕様
- •Jakarta Faces 4.0仕様
- •Jakarta Persistence 3.1仕様
- •Apache Struts 1.x Documentation