機能 #40
未完了0%
説明
edmineのプラグイン開発です。作業者にAIを割り当てます。
AIには役割、名前、アイコン、APIキーが割り当てられています。役割はPM、フロントエンジニア、バックエンドエンジニア、テスター、ホワイトハッカーがいます。
PMは利用者の話題を整理し、要点定義、画面一覧、機能一覧を作成します。テスト計画も行います。
アーキテクトはフロントエンジニアとバックエンドエンジニアが使う設計書を作成し、指示書を発行します。
フロントエンジニアはデザインとWEBやアプリのコーディングを行います。
バックエンドエンジニアは機能の開発と実装を行います。
テスターは単体テスト、結合テスト、総合テストを行い、実行と報告を行います。
ホワイトハッカーは設計や実装をもとにセキュリティ試験を行い、改善を行います。アプリもサーバもみます。利用者がPMとチャットをおこないながらシステムの開発、改修計画を具体化します。
これまでの議論をチケットに起票して、と利用者が指示すると、PMがチケットを作成し、アーキテクトに担当者設定します。アーキテクトは指示書を具体化します。編集こんにちは!Redmineプラグイン開発の件についてご相談いただきありがとうございます。AI担当者割り当てシステムのプラグイン開発について、詳しく聞かせていただけますか?
現在お伺いした内容は以下のようになります:
Redmineのプラグインとして、作業者にAIを割り当てるシステムを開発する
AIには役割(PM、フロントエンジニア、バックエンドエンジニア、テスター、ホワイトハッカー)、名前、アイコン、APIキーが割り当てられる
利用者はPMとチャットしながらシステム開発・改修を具体化する
PMが利用者の要望を整理してチケットを起票し、アーキテクトが指示書を作成する流れ
さらに詳しく知りたい情報としては:
現在のRedmine環境について(バージョン、既存のプラグインなど)
AIの役割ごとに接続するAPI(例:OpenAI APIなど)は決まっていますか?
チャット機能はRedmine内に実装するのか、外部連携するのか
想定されている開発期間やリリース予定
お手伝いできることがあれば、ぜひお聞かせください。再試行MIhttp://localhost:1978/projectsで稼働しています。
独自テーマを利用します。E:/Desktop/line_redmine_theme
バージョンは6.0.5です。5系には対応しません。
PMはClaude、アーキテクトもClaude、フロントエンジニアはOpenAIとClaude、バックエンドエンジニアはClaudeとOpenAI、ホワイトハッカーはClaudeとOpenAI
各職種複数人のAIワーカを登録し、利用し分けます。
1枚のチケットは一人が担当し、ほかにワーカーが作業する際はチケットで担当者を管理します。
複数ワーカーがそれぞれ違うチケットの指示で同時に開発を行います。
起票され指示するフラグがたつと、指示書の内容に基づいた開発リクエストをAPIに対して発行します。
返却されたレスポンスがコメントにコミットされます。長い場合は、一時ファイルとしてJSONに格納され、まとめてコミットされます。
作業が完了していない場合は、作業継続の指示リクエストを発行します。
作業が中断した場合は、作業リクエストを再発行します(1時間おき)
作業ステータスに関しては詳細につくりこんでください。
作業リクエストに対して、開始のレスポンス、作業進捗の報告リクエスト、作業中断や完了の連絡リクエストが来ます。処理してからレスポンスを発行します。
自律的に作業が連鎖していくAI駆動開発のプラットフォーム用プラグインとなります。編集2 / 2件ありがとうございます。より詳細な情報をいただきました。Redmineプラグイン開発の要件を整理していきます。
プロジェクト概要
Redmineのバージョン6.0.5に対応したAI駆動開発プラットフォーム用プラグインの開発です。このプラグインでは、複数のAIワーカーを役割別に登録し、チケットベースで開発作業を自律的に連鎖させる機能を実装します。
環境情報
Redmine 6.0.5(5系非対応)
稼働環境: http://localhost:1978/projects
独自テーマ: E:/Desktop/line_redmine_theme
AIワーカー構成
PM: Claude
アーキテクト: Claude
フロントエンジニア: OpenAI、Claude
バックエンドエンジニア: Claude、OpenAI
ホワイトハッカー: Claude、OpenAI
各職種複数人のAIワーカーを登録し使い分け
プラグイン機能要件
AIワーカー管理機能
役割、名前、アイコン、APIキー登録
複数ワーカーの登録と管理
チケット連携機能
チケットへのAIワーカー割り当て
1チケットに1人のAIワーカーが担当
複数ワーカーによる並行開発の管理
AI連携機能
指示書内容に基づく開発リクエストをAPIに発行
レスポンスのコメントへの自動コミット
長文レスポンスの一時ファイル(JSON)格納
作業管理機能
作業継続指示リクエスト発行
作業中断時のリクエスト再発行(1時間おき)
詳細な作業ステータス管理
作業リクエスト処理機能
開始レスポンス処理
作業進捗報告リクエスト処理
作業中断/完了連絡リクエスト処理
これらの要件をもとに、自律的に作業が連鎖していくAI駆動開発のプラットフォームを実現するプラグインを開発していきます。
次のステップとして、プラグインの詳細設計に入りたいと思います。具体的な機能仕様やデータベース設計、画面設計などを進めていきますがよろしいでしょうか?また、何か追加の要件や懸念点があればお聞かせください。再試行MIEドライブにここまでの議論をまとめて成果物を格納してください。そのあと、画面一覧、機能一覧、概要設計に移りローカルに格納してください。編集了解しました。Eドライブに議論の内容を整理し、画面一覧、機能一覧、概要設計を作成してローカルに格納します。
まず現在の議論内容をまとめたドキュメントを作成します。Ccreate_directoryリクエスト{
path
: E:/AI_Redmine_Plugin
}レスポンスError: Access denied - path outside allowed directories: E:\AI_Redmine_Plugin not in C:\Users\ito\Desktop, C:, E:\Desktopまず、許可されているディレクトリを確認します。Llist_allowed_directoriesリクエスト{}レスポンスAllowed directories:
C:\Users\ito\Desktop
C:
E:\Desktopプロジェクトのディレクトリを作成します。Ccreate_directoryリクエスト{
path
: E:/Desktop/AI_Redmine_Plugin
}レスポンスSuccessfully created directory E:/Desktop/AI_Redmine_Plugin<automated_reminder_from_anthropic>Claude should always adhere to earlier instructions contained in <citation_instructions> tags.</automated_reminder_from_anthropic>
必要なディレクトリをさらに作成します。Ccreate_directoryリクエスト{
path
: E:/Desktop/AI_Redmine_Plugin/docs
}レスポンスSuccessfully created directory E:/Desktop/AI_Redmine_Plugin/docs議論の内容をまとめたReadMe.mdファイルを作成します。Wwrite_fileリクエスト{
path
: E:/Desktop/AI_Redmine_Plugin/docs/ReadMe-r1.md
,
content
: `# AI駆動開発プラットフォーム Redmineプラグイン
プロジェクト概要¶
Redmineのバージョン6.0.5に対応したAI駆動開発プラットフォーム用プラグインです。このプラグインでは、複数のAIワーカーを役割別に登録し、チケットベースで開発作業を自律的に連鎖させる機能を実装します。
環境情報¶
- Redmine 6.0.5(5系非対応)
- 稼働環境: http://localhost:1978/projects
- 独自テーマ: E:/Desktop/line_redmine_theme
AIワーカー構成¶
- PM: Claude
- アーキテクト: Claude
- フロントエンジニア: OpenAI、Claude
- バックエンドエンジニア: Claude、OpenAI
- ホワイトハッカー: Claude、OpenAI
- 各職種複数人のAIワーカーを登録し使い分け
主要機能概要¶
-
AIワーカー管理機能
- 役割、名前、アイコン、APIキー登録
- 複数ワーカーの登録と管理
-
チケット連携機能
- チケットへのAIワーカー割り当て
- 1チケットに1人のAIワーカーが担当
- 複数ワーカーによる並行開発の管理
-
AI連携機能
- 指示書内容に基づく開発リクエストをAPIに発行
- レスポンスのコメントへの自動コミット
- 長文レスポンスの一時ファイル(JSON)格納
-
作業管理機能
- 作業継続指示リクエスト発行
- 作業中断時のリクエスト再発行(1時間おき)
- 詳細な作業ステータス管理
-
作業リクエスト処理機能
- 開始レスポンス処理
- 作業進捗報告リクエスト処理
- 作業中断/完了連絡リクエスト処理
利用シナリオ¶
- 利用者がPMとチャットをしながらシステムの開発や改修計画を具体化
- PMが利用者の話題を整理し、要点定義、画面一覧、機能一覧を作成
- PMがチケットを作成し、アーキテクトに担当者設定
- アーキテクトが指示書を具体化
- 指示書に基づいて、各AIワーカー(フロントエンジニア、バックエンドエンジニア等)が作業を実施
- テスターが単体テスト、結合テスト、総合テストを実施
- ホワイトハッカーがセキュリティ試験を実施
アーキテクチャ概要¶
自律的に作業が連鎖していくAI駆動開発のプラットフォームとして、Redmineのチケットシステムと各種AI APIを連携させ、効率的な開発ワークフローを実現します。
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/docs/ReadMe-r1.md次に開発者向けの設計ドキュメントを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/docs/DevReport-r1.md,
content:
# 開発レポート - AI駆動開発プラットフォーム Redmineプラグイン
プロジェクト情報¶
- 作業パス: E:/Desktop/AI_Redmine_Plugin
- デプロイパス: http://localhost:1978/plugins/ai_worker_plugin
- リポジトリ: 未作成
開発進捗¶
現在の進捗状況¶
- 要件定義フェーズ完了
- 概要設計進行中
次のステップ¶
- 画面一覧の詳細化
- 機能一覧の詳細化
- 概要設計の完成
- データベース設計
- プラグイン構造の設計
議論・検討事項¶
要件確認事項¶
- Redmine 6.0.5に対応(5系は非対応)
- 独自テーマ(E:/Desktop/line_redmine_theme)との連携
- 複数のAIワーカーを役割別に管理
- チケットベースでの作業管理
- AIワーカー間の作業連鎖の実現
技術検討¶
- RedmineプラグインAPI(6.0.5)の調査
- AIプロバイダー(Claude, OpenAI)のAPI連携方法
- 長文レスポンスの格納方法と表示方法
- 作業ステータス管理の自動化
- 定期的なリクエスト再発行の実装方法
課題と対策¶
- AIレスポンスのタイムアウト対策
- 複数ワーカーの同時作業の整合性確保
- チケット間の依存関係の管理
- APIキーの安全な管理方法
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/docs/DevReport-r1.md次に、セットアップ方法を記載したドキュメントを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/docs/SetUp-r1.md,
content:
# セットアップガイド - AI駆動開発プラットフォーム Redmineプラグイン
作業パス¶
- プロジェクトディレクトリ: E:/Desktop/AI_Redmine_Plugin
デプロイパス¶
- Redmineプラグインディレクトリ: http://localhost:1978/plugins/ai_worker_plugin
リポジトリ情報¶
- リポジトリ: 未作成
前提条件¶
- Redmine 6.0.5がインストール済みであること
- Ruby 3.1以上がインストール済みであること
- Bundlerがインストール済みであること
- 独自テーマ(E:/Desktop/line_redmine_theme)が適用済みであること
インストール手順¶
1. プラグインのインストール¶
# Redmineのプラグインディレクトリに移動
cd /path/to/redmine/plugins
# プラグインのクローン(リポジトリ作成後)
git clone [リポジトリURL] ai_worker_plugin
# または、開発ディレクトリからコピー
cp -r E:/Desktop/AI_Redmine_Plugin/plugin/* /path/to/redmine/plugins/ai_worker_plugin/
2. 依存ライブラリのインストール¶
# Redmineのルートディレクトリに移動
cd /path/to/redmine
# 依存ライブラリのインストール
bundle install
3. データベースマイグレーション¶
# Redmineのルートディレクトリで実行
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
4. アプリケーションの再起動¶
# Redmineを再起動
touch tmp/restart.txt
# または、Webサーバーを再起動
APIキーの設定¶
- 管理画面にログイン
- プラグイン設定画面に移動
- 「AI Worker Plugin」の設定を選択
- 各AIサービス(Claude, OpenAI)のAPIキーを入力
- 設定を保存
AIワーカーの初期設定¶
- 管理画面から「AIワーカー管理」に移動
- 「新規AIワーカー」ボタンをクリック
- ワーカー情報(役割、名前、アイコン、使用API)を入力
- 保存して、必要な数のワーカーを登録
トラブルシューティング¶
ログの確認¶
- Redmineのログディレクトリ: /path/to/redmine/log/
- プラグイン専用ログ: /path/to/redmine/log/ai_worker_plugin.log
一般的な問題¶
- APIキー認証エラー: APIキーの有効性を確認
- タイムアウトエラー: タイムアウト設定を調整
- 権限エラー: Redmineのロール・権限設定を確認
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/docs/SetUp-r1.md次に、次のステップについてのドキュメントを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/docs/Next-Step-r1.md,
content:
# 次のステップ - AI駆動開発プラットフォーム Redmineプラグイン
作業パス¶
- プロジェクトディレクトリ: E:/Desktop/AI_Redmine_Plugin
デプロイパス¶
- Redmineプラグインディレクトリ: http://localhost:1978/plugins/ai_worker_plugin
リポジトリ情報¶
- リポジトリ: 未作成
次のフェーズで実施すべき作業¶
1. 詳細設計フェーズ¶
- 画面設計の詳細化
- DB設計の完成
- API連携仕様の詳細化
- ワークフロー設計の完成
- 画面遷移図の作成
- 各機能のユースケース詳細化
2. 開発フェーズ¶
- プラグインの基本構造の実装
- マイグレーションの作成
- モデルの実装
- コントローラの実装
- ビューの実装
- APIクライアントの実装
- バックグラウンドジョブの実装
3. テストフェーズ¶
- 単体テストの作成と実行
- 結合テストの作成と実行
- E2Eテストの作成と実行
- セキュリティテストの実行
4. デプロイフェーズ¶
- デプロイ手順の確立
- インストールスクリプトの作成
- ドキュメントの完成
- プラグインパッケージの作成
優先実装すべき機能¶
-
AIワーカー管理機能
- 管理画面からのAIワーカー登録・編集・削除
- APIキー管理
-
チケット連携機能
- チケットへのAIワーカー割り当て
- 作業ステータス管理
-
AI API連携機能
- API呼び出し機能
- レスポンス処理機能
-
バックグラウンドジョブ機能
- 作業継続リクエスト発行
- タイムアウト管理
技術的課題と検討事項¶
-
セキュリティ
- APIキーの安全な保存方法
- 適切な認証・認可の実装
-
パフォーマンス
- 長時間処理の効率的な実装
- バックグラウンドジョブの最適化
-
拡張性
- 新しいAIプロバイダーの追加を容易にする設計
- 新しい役割や機能の追加しやすさ
-
UI/UX
- LINE風テーマとの整合性確保
- 使いやすいインターフェースの設計
リスクと対策¶
-
APIレート制限
- 対策: バックオフと再試行メカニズムの実装
-
長時間レスポンス
- 対策: 適切なタイムアウト設定と分割処理の実装
-
データ整合性
- 対策: トランザクション管理とエラーハンドリングの強化
-
ユーザー受容性
- 対策: 段階的な機能リリースと丁寧なドキュメント作成
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/docs/Next-Step-r1.md次に、画面一覧、機能一覧、概要設計のドキュメントを作成します。 まず、画面一覧ドキュメントを作成します。Ccreate_directoryリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design}レスポンスSuccessfully created directory E:/Desktop/AI_Redmine_Plugin/designWwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/screen_list.md,
content:
# AI駆動開発プラットフォーム - 画面一覧
- 対策: 段階的な機能リリースと丁寧なドキュメント作成
1. 管理者向け画面¶
1.1 AIワーカー管理画面¶
- 概要: AIワーカーの登録・編集・削除を行う管理画面
-
主要機能:
- AIワーカー一覧表示
- 新規AIワーカー登録
- AIワーカー情報編集
- AIワーカー削除
-
表示項目:
- ID
- 名前
- 役割
- アイコン
- API種別
- ステータス(有効/無効)
- 作成日時
- 更新日時
1.2 APIキー管理画面¶
- 概要: AI APIの接続情報を管理する画面
-
主要機能:
- API設定一覧表示
- API設定追加
- API設定編集
- API設定削除
-
表示項目:
- API名(Claude、OpenAI等)
- APIキー(マスク表示)
- エンドポイントURL
- 追加パラメータ設定
- テスト接続機能
1.3 プラグイン設定画面¶
- 概要: プラグイン全体の設定を行う画面
-
主要機能:
- 全般設定
- ワークフロー設定
- 通知設定
-
設定項目:
- 自動リクエスト間隔(分)
- タイムアウト設定(秒)
- 最大レスポンスサイズ(KB)
- ログレベル
- 添付ファイル保存先
2. ユーザー向け画面¶
2.1 AIワーカーダッシュボード¶
- 概要: プロジェクト内のAIワーカー状況を可視化する画面
-
主要機能:
- AIワーカー稼働状況表示
- チケット作業状況表示
- 作業ログ表示
-
表示項目:
- ワーカー別作業状況
- チケット進捗状況
- 作業ログタイムライン
2.2 AIワーカー割り当て画面¶
- 概要: チケットにAIワーカーを割り当てる画面
-
主要機能:
- ワーカー候補一覧表示
- ワーカー割り当て
- 割り当て履歴表示
-
表示項目:
- 利用可能なワーカー一覧
- ワーカーの役割・得意分野
- 現在の負荷状況
2.3 チャットインターフェース¶
- 概要: PMとのチャットを行う画面
-
主要機能:
- メッセージ送受信
- 添付ファイル送信
- チャット履歴表示
-
表示項目:
- メッセージ入力欄
- メッセージ履歴
- 添付ファイル一覧
- チャット相手情報
3. チケット連携画面¶
3.1 チケット詳細拡張¶
- 概要: 既存チケット詳細画面にAI機能を追加
-
主要機能:
- AIワーカー情報表示
- AI作業ステータス表示
- AI作業ログ表示
-
表示項目:
- 担当AIワーカー情報
- 作業ステータス
- 直近の作業内容
- 作業履歴
3.2 AIワーカー指示書画面¶
- 概要: AIワーカーへの指示内容を入力・編集する画面
-
主要機能:
- 指示内容入力
- 指示テンプレート選択
- 指示履歴表示
-
表示項目:
- 指示内容入力欄
- テンプレート選択リスト
- 添付ファイル機能
- 指示履歴表示
3.3 AI作業結果表示画面¶
- 概要: AIワーカーからの作業結果を表示する画面
-
主要機能:
- 作業結果表示
- 作業結果への返信
- 作業結果の承認/差し戻し
-
表示項目:
- 作業結果内容
- コード等の自動フォーマット表示
- 添付ファイル一覧
- 評価/フィードバックボタン
4. レポート画面¶
4.1 AI作業統計画面¶
- 概要: AIワーカーの作業統計を表示する画面
-
主要機能:
- 期間別統計表示
- ワーカー別統計表示
- プロジェクト別統計表示
-
表示項目:
- 処理チケット数
- 平均応答時間
- 成功率/失敗率
- APIコスト
4.2 AI作業ログ画面¶
- 概要: AIワーカーの作業ログを表示する画面
-
主要機能:
- ログの一覧表示
- ログの詳細表示
- ログの検索/フィルタ
-
表示項目:
- 実行日時
- ワーカー名
- 操作内容
- チケット情報
- 結果ステータス
- 詳細ログ
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/design/screen_list.md次に、機能一覧ドキュメントを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/feature_list.md,
content:
# AI駆動開発プラットフォーム - 機能一覧
1. AIワーカー管理機能¶
1.1 AIワーカー登録機能¶
- AIワーカーの基本情報(名前、役割、アイコン)の登録
- 使用するAI API情報の設定
- ワーカーの有効/無効設定
- ワーカーのプロフィール設定(得意分野、紹介文等)
1.2 AIワーカー検索/一覧機能¶
- 登録済みワーカーの一覧表示
- 役割別フィルタリング
- ステータス別フィルタリング
- API種別別フィルタリング
- キーワード検索
1.3 APIキー管理機能¶
- 各AI APIの接続情報(APIキー、エンドポイント)の登録
- APIキーのマスク表示と安全な保存
- API接続テスト機能
- API利用状況モニタリング
1.4 AI設定管理機能¶
- AI呼び出しパラメータの設定(温度、トークン制限等)
- プロンプトテンプレートの管理
- 役割別のデフォルト設定管理
2. チケット連携機能¶
2.1 AIワーカー割り当て機能¶
- チケットへのAIワーカー割り当て
- 自動割り当てルールの設定
- 役割に応じた割り当て推奨機能
- 割り当て履歴管理
2.2 チケットステータス連携機能¶
- チケットステータスとAI作業ステータスの連携
- ステータス変更時の自動アクション設定
- ステータス変更履歴の記録
- カスタムワークフロー設定
2.3 チケット添付ファイル連携機能¶
- チケット添付ファイルのAIへの送信
- AIからの成果物の自動添付
- 添付ファイルの自動分類
- ファイル履歴管理
2.4 チケット関連チケット連携機能¶
- 関連チケット情報のAIへの提供
- 子チケットの自動作成
- 依存関係の自動設定
- チケット間の作業連鎖の管理
3. AI API連携機能¶
3.1 API呼び出し機能¶
- 各AI API(Claude, OpenAI)への統一インターフェース
- 適切なプロンプト構築
- コンテキスト管理
- エラーハンドリングと再試行
3.2 レスポンス処理機能¶
- AIレスポンスの解析
- 長文レスポンスの分割処理
- コード/テキスト等のフォーマット処理
- JSON形式での一時保存
3.3 コンテキスト管理機能¶
- チャット履歴の保持
- 作業コンテキストの管理
- トークン制限に応じた履歴管理
- 重要情報の優先保持
3.4 プロンプトテンプレート機能¶
- 役割別プロンプトテンプレート
- 作業種別別テンプレート
- テンプレート変数の動的置換
- テンプレートの評価/改善機能
4. 作業管理機能¶
4.1 作業指示機能¶
- AIワーカーへの作業指示入力
- 指示テンプレートの活用
- 指示履歴管理
- 指示内容の評価/改善
4.2 作業進捗管理機能¶
- 作業ステータスのリアルタイム表示
- 進捗率の可視化
- 予定完了時間の予測
- ボトルネックの検出
4.3 作業継続機能¶
- 長期作業の継続管理
- 作業中断時の復旧
- 定期的な進捗確認
- コンテキスト維持
4.4 作業完了確認機能¶
- 作業成果物の検証
- 成果物の承認/差し戻し
- 作業評価入力
- 作業完了報告
5. スケジューリング機能¶
5.1 定期実行機能¶
- 作業継続リクエストの定期発行(1時間おき)
- 作業進捗確認の自動実行
- 定期的なステータス更新
- バックグラウンドジョブ管理
5.2 タイムアウト管理機能¶
- 長時間処理のタイムアウト設定
- タイムアウト時の自動アクション
- タイムアウト履歴の記録
- 適応的なタイムアウト調整
5.3 リトライ機能¶
- エラー発生時の自動リトライ
- 指数バックオフの実装
- リトライ条件のカスタマイズ
- リトライ履歴の記録
5.4 キュー管理機能¶
- API呼び出しのキューイング
- 優先度に基づく処理順序制御
- 処理待ちタスクの可視化
- キューの手動調整
6. ユーザーインターフェース機能¶
6.1 チャットインターフェース¶
- PMとのリアルタイムチャット
- 既存チケット情報の参照
- ファイル添付機能
- チャット履歴の保存/エクスポート
6.2 AIワーカーダッシュボード¶
- AIワーカーの稼働状況表示
- チケット作業状況の一覧表示
- 重要なアクティビティの通知
- パフォーマンス指標の表示
6.3 AI作業結果表示¶
- 作業結果の構造化表示
- コードのシンタックスハイライト
- 差分表示
- コメント/フィードバック機能
6.4 LINE風UIテーマ連携¶
- 独自テーマ(E:/Desktop/line_redmine_theme)との整合性
- LINE風のチャットUI
- アイコン表示の統一
- モバイルフレンドリーなレイアウト
7. レポート/分析機能¶
7.1 統計レポート機能¶
- AIワーカーの作業統計
- 処理チケット数/時間の分析
- 成功率/エラー率の集計
- コスト分析
7.2 パフォーマンス分析機能¶
- AIワーカーのパフォーマンス評価
- 応答時間分析
- 品質評価の集計
- ボトルネック分析
7.3 作業ログ機能¶
- 詳細な作業ログの記録
- ログの検索/フィルタリング
- ログのエクスポート
- ログレベル設定
7.4 コスト管理機能¶
- API利用コストの記録
- プロジェクト/チケット別コスト集計
- コスト予測
- 予算管理
8. セキュリティ機能¶
8.1 APIキー保護機能¶
- APIキーの暗号化保存
- アクセス制限
- 監査ログ
- 定期的な更新促進
8.2 認証・認可機能¶
- 機能別の権限設定
- ロールベースのアクセス制御
- 操作ログの記録
- セキュリティ監査
8.3 データ保護機能¶
- 機密情報のマスキング
- 重要データの暗号化
- データ保持ポリシー設定
- セキュアな一時ファイル管理
8.4 セキュリティチェック機能¶
- 入力データのバリデーション
- 出力データのサニタイズ
- セキュリティスキャン
- 脆弱性検出
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/design/feature_list.md最後に、概要設計ドキュメントを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/overview_design.md,
content:
# AI駆動開発プラットフォーム - 概要設計
1. システムアーキテクチャ¶
1.1 全体構成¶
+-------------------------------+
| Redmine 6.0.5 |
+-------------------------------+
|
+-------------------------------+
| AI Worker Plugin |
+-------------------------------+
|
+----------------+----------------+
| | |
v v v
+------------+ +-----------+ +------------+
| Claude API | | OpenAI API| | その他API |
+------------+ +-----------+ +------------+
-
Redmineプラグインとして実装
- Redmine 6.0.5のプラグインAPIを利用
- 既存のRedmineテーマ(LINE風)との連携
- Redmineのチケットシステムと統合
-
外部APIとの連携
- Claude API(Anthropic)
- OpenAI API(GPT-4等)
- 将来的に拡張可能な設計
-
バックグラウンド処理
- 長時間処理を非同期で実行
- 定期的なジョブ実行
- タイムアウト管理
1.2 モジュール構成¶
-
AIワーカー管理モジュール
- ワーカー情報管理
- APIキー管理
- 設定管理
-
チケット連携モジュール
- チケットフック
- ステータス管理
- 添付ファイル管理
-
AI連携モジュール
- API呼び出し
- レスポンス処理
- コンテキスト管理
-
作業管理モジュール
- 作業指示管理
- 作業進捗管理
- 作業履歴管理
-
UIモジュール
- 管理画面
- チャットインターフェース
- ダッシュボード
-
スケジューラモジュール
- ジョブスケジューリング
- タイムアウト管理
- リトライ制御
-
レポートモジュール
- 統計処理
- ログ管理
- コスト管理
2. データベース設計¶
2.1 テーブル構成¶
ai_workers¶
- id: integer (PK)
- name: string
- role: string
- icon: string
- api_type: string
- api_config_id: integer (FK)
- status: integer
- profile: text
- created_on: datetime
- updated_on: datetime
api_configs¶
- id: integer (PK)
- name: string
- api_key: string (暗号化)
- endpoint_url: string
- additional_params: text (JSON)
- created_on: datetime
- updated_on: datetime
worker_assignments¶
- id: integer (PK)
- issue_id: integer (FK)
- ai_worker_id: integer (FK)
- status: integer
- assigned_on: datetime
- last_activity_on: datetime
work_instructions¶
- id: integer (PK)
- issue_id: integer (FK)
- ai_worker_id: integer (FK)
- content: text
- created_by: integer (FK)
- created_on: datetime
work_responses¶
- id: integer (PK)
- instruction_id: integer (FK)
- content: text
- status: integer
- response_file: string
- created_on: datetime
work_continuations¶
- id: integer (PK)
- assignment_id: integer (FK)
- last_context_id: string
- next_execution: datetime
- status: integer
- retry_count: integer
work_logs¶
- id: integer (PK)
- assignment_id: integer (FK)
- action: string
- details: text
- status: integer
- created_on: datetime
plugin_settings¶
- id: integer (PK)
- key: string
- value: text
- created_on: datetime
- updated_on: datetime
2.2 リレーションシップ¶
- ai_workers 1--* worker_assignments
- api_configs 1--* ai_workers
- issues 1--* worker_assignments
- worker_assignments 1--* work_instructions
- work_instructions 1--* work_responses
- worker_assignments 1--* work_continuations
- worker_assignments 1--* work_logs
3. 処理フロー¶
3.1 AIワーカー割り当てフロー¶
User -> チケット作成 -> PM AIとのチャット -> 課題整理
|
PM -> チケット起票 -> アーキテクトに担当割当
|
アーキテクト -> 指示書作成 -> 適切なAIワーカーに担当割当
|
AIワーカー -> 作業開始 -> 作業進捗報告 -> 作業完了
|
成果物コミット
3.2 AI API連携フロー¶
作業指示 -> 指示内容構築 -> プロンプト作成 -> API呼び出し
|
レスポンス受信
|
No v Yes
+--------+ タイムアウトまたはエラー? +--------+
| | <--------------+ |
v | v
リトライ処理 | レスポンス処理
| | |
+------->+ v
チケットコメント更新
|
v
作業継続判断
|
+------------+------------+
| |
v v
作業継続 作業完了
| |
v v
次の作業リクエスト作成 完了通知
3.3 作業継続管理フロー¶
定期ジョブ -> 進行中作業取得 -> 最終活動時間チェック
|
No v Yes
+----------+ 1時間以上経過? +------------+
| | <-----------+ |
v | v
次のジョブ待ち | リクエスト再発行
| |
| v
| レスポンス受信
| |
| v
+------------------- ステータス更新
4. インターフェース設計¶
4.1 AI API インターフェース¶
Claude API連携¶
- エンドポイント: https://api.anthropic.com/v1/messages
- 認証: API Key認証
- 主要パラメータ:
- model: string (e.g. "claude-3-opus-20240229")
- system: string
- messages: array
- max_tokens: integer
OpenAI API連携¶
- エンドポイント: https://api.openai.com/v1/chat/completions
- 認証: API Key認証
- 主要パラメータ:
- model: string (e.g. "gpt-4-0125-preview")
- messages: array
- temperature: float
- max_tokens: integer
4.2 Redmine連携インターフェース¶
チケットフック¶
- 新規チケット作成後
- チケットステータス変更時
- チケットコメント追加時
- チケット割り当て変更時
カスタムフィールド¶
- AI担当者フィールド
- AI作業ステータスフィールド
- AI指示内容フィールド
- AI作業進捗フィールド
メニュー拡張¶
- 管理メニューへのAIワーカー管理項目追加
- プロジェクトメニューへのAIダッシュボード項目追加
- チケットコンテキストメニューへのAI関連アクション追加
5. セキュリティ設計¶
5.1 APIキー管理¶
-
APIキーの暗号化保存
- データベース格納前に暗号化
- 使用時のみ複合化
- キー管理用のマスターキー
-
アクセス制限
- 管理者のみ閲覧/編集可能
- アクセスログの記録
5.2 データ保護¶
-
センシティブデータの処理
- 個人情報の自動検出とマスキング
- API送信前のフィルタリング
- レスポンス内容のサニタイズ
-
一時ファイル管理
- 安全な一時ディレクトリの使用
- 定期的なクリーンアップ
- アクセス権限の厳格な設定
5.3 認証・認可¶
-
権限管理
- 機能別の詳細な権限設定
- ロールベースのアクセス制御
- プロジェクト単位の制限
-
監査ログ
- 重要操作の監査ログ記録
- ログのタンパー防止
- 定期的なレビュー
6. 拡張性設計¶
6.1 プラグインAPI拡張¶
-
フック追加
- 新規AIワーカー追加時
- 作業状態変更時
- AI応答受信時
-
REST API拡張
- AIワーカー管理API
- 作業指示API
- 作業状態確認API
6.2 新規AI対応¶
-
プロバイダー抽象化
- 共通インターフェースの定義
- プロバイダー固有設定の分離
- 簡易な追加手順
-
モデル管理
- モデル情報の動的管理
- モデルパラメータのカスタマイズ
- モデル別の挙動設定
6.3 ワークフローカスタマイズ¶
-
カスタムステータス
- プロジェクト固有のステータス定義
- ステータス遷移ルールのカスタマイズ
- ステータス間のトリガー設定
-
アクションカスタマイズ
- ステータス変更時の自動アクション設定
- 条件付きアクションの定義
- アクションのプラグイン化
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/design/overview_design.mdデータモデル設計ドキュメントを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/data_model.md,
content:
# AI駆動開発プラットフォーム - データモデル設計
1. エンティティ関連図(ER図)¶
+------------------+ +------------------+ +------------------+
| ai_workers | | api_configs | | issues |
+------------------+ +------------------+ +------------------+
| id (PK) | | id (PK) | | id (PK) |
| name | | name | | ... |
| role | | api_key | | (Redmine標準) |
| icon | | endpoint_url | +------------------+
| api_type | | additional_params| |
| api_config_id(FK)|<-----| created_on | |
| status | | updated_on | |
| profile | +------------------+ |
| created_on | |
| updated_on | |
+------------------+ |
| |
| |
v v
+------------------+ +------------------+
| worker_assignments| | work_logs |
+------------------+ +------------------+
| id (PK) | | id (PK) |
| issue_id (FK) |<---------------------------->| assignment_id(FK)|
| ai_worker_id (FK)|<--+ | action |
| status | | | details |
| assigned_on | | | status |
| last_activity_on | | | created_on |
+------------------+ | +------------------+
| |
| |
v |
+------------------+ | +------------------+
| work_instructions| | | work_continuations|
+------------------+ | +------------------+
| id (PK) | | | id (PK) |
| issue_id (FK) | | | assignment_id(FK)|<---+
| ai_worker_id (FK)|<--+ | last_context_id | |
| content | | next_execution | |
| created_by | | status | |
| created_on | | retry_count | |
+------------------+ +------------------+ |
| |
| |
v |
+------------------+ |
| work_responses | |
+------------------+ |
| id (PK) | +------------------+ |
| instruction_id(FK)| | plugin_settings | |
| content | +------------------+ |
| status | | id (PK) | |
| response_file | | key | |
| created_on | | value | |
+------------------+ | created_on | |
| updated_on | |
+------------------+ |
|
+------------------+ |
| worker_permissions| |
+------------------+ |
| id (PK) | |
| user_id (FK) | |
| ai_worker_id (FK)|------------------+
| permission_type |
| created_on |
+------------------+
2. テーブル詳細設計¶
2.1 ai_workers¶
AIワーカーの基本情報を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
name | string(100) | NO | AIワーカー名 |
role | string(50) | NO | 役割(PM, アーキテクト, フロントエンジニア等) |
icon | string(255) | YES | アイコン画像のパス |
api_type | string(50) | NO | API種別(Claude, OpenAI等) |
api_config_id | integer | NO | APIコンフィグへの外部キー |
status | integer | NO | ステータス(0:無効, 1:有効) |
profile | text | YES | プロフィール文 |
created_on | datetime | NO | 作成日時 |
updated_on | datetime | NO | 更新日時 |
インデックス:
- PRIMARY KEY (id)
- INDEX (api_config_id)
- INDEX (role)
- INDEX (status)
制約:
- FOREIGN KEY (api_config_id) REFERENCES api_configs(id)
2.2 api_configs¶
API接続情報を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
name | string(100) | NO | API設定名 |
api_key | text | NO | APIキー(暗号化保存) |
endpoint_url | string(255) | NO | エンドポイントURL |
additional_params | text | YES | 追加パラメータ(JSON形式) |
created_on | datetime | NO | 作成日時 |
updated_on | datetime | NO | 更新日時 |
インデックス:
- PRIMARY KEY (id)
- UNIQUE INDEX (name)
2.3 worker_assignments¶
AIワーカーとチケットの割り当て関係を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
issue_id | integer | NO | チケットIDへの外部キー |
ai_worker_id | integer | NO | AIワーカーIDへの外部キー |
status | integer | NO | ステータス(0:未着手, 1:作業中, 2:一時停止, 3:完了, 4:エラー) |
assigned_on | datetime | NO | 割り当て日時 |
last_activity_on | datetime | NO | 最終活動日時 |
インデックス:
- PRIMARY KEY (id)
- UNIQUE INDEX (issue_id, ai_worker_id)
- INDEX (status)
- INDEX (last_activity_on)
制約:
- FOREIGN KEY (issue_id) REFERENCES issues(id)
- FOREIGN KEY (ai_worker_id) REFERENCES ai_workers(id)
2.4 work_instructions¶
作業指示内容を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
issue_id | integer | NO | チケットIDへの外部キー |
ai_worker_id | integer | NO | AIワーカーIDへの外部キー |
content | text | NO | 指示内容 |
created_by | integer | NO | 作成者(ユーザーID) |
created_on | datetime | NO | 作成日時 |
インデックス:
- PRIMARY KEY (id)
- INDEX (issue_id)
- INDEX (ai_worker_id)
- INDEX (created_on)
制約:
- FOREIGN KEY (issue_id) REFERENCES issues(id)
- FOREIGN KEY (ai_worker_id) REFERENCES ai_workers(id)
- FOREIGN KEY (created_by) REFERENCES users(id)
2.5 work_responses¶
AIワーカーからの応答を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
instruction_id | integer | NO | 作業指示IDへの外部キー |
content | text | YES | 応答内容(短い場合) |
status | integer | NO | ステータス(0:処理中, 1:成功, 2:失敗) |
response_file | string(255) | YES | 応答ファイルパス(長い場合) |
created_on | datetime | NO | 作成日時 |
インデックス:
- PRIMARY KEY (id)
- INDEX (instruction_id)
- INDEX (status)
- INDEX (created_on)
制約:
- FOREIGN KEY (instruction_id) REFERENCES work_instructions(id)
2.6 work_continuations¶
作業継続情報を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
assignment_id | integer | NO | 割り当てIDへの外部キー |
last_context_id | string(255) | YES | 最後のコンテキストID |
next_execution | datetime | NO | 次回実行予定時間 |
status | integer | NO | ステータス(0:待機, 1:実行中, 2:完了) |
retry_count | integer | NO | リトライ回数 |
インデックス:
- PRIMARY KEY (id)
- INDEX (assignment_id)
- INDEX (next_execution)
- INDEX (status)
制約:
- FOREIGN KEY (assignment_id) REFERENCES worker_assignments(id)
2.7 work_logs¶
作業ログを管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
assignment_id | integer | NO | 割り当てIDへの外部キー |
action | string(100) | NO | アクション名 |
details | text | YES | 詳細内容 |
status | integer | NO | ステータス(0:情報, 1:警告, 2:エラー) |
created_on | datetime | NO | 作成日時 |
インデックス:
- PRIMARY KEY (id)
- INDEX (assignment_id)
- INDEX (action)
- INDEX (status)
- INDEX (created_on)
制約:
- FOREIGN KEY (assignment_id) REFERENCES worker_assignments(id)
2.8 plugin_settings¶
プラグイン設定を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
key | string(100) | NO | 設定キー |
value | text | YES | 設定値 |
created_on | datetime | NO | 作成日時 |
updated_on | datetime | NO | 更新日時 |
インデックス:
- PRIMARY KEY (id)
- UNIQUE INDEX (key)
2.9 worker_permissions¶
AIワーカーの利用権限を管理するテーブル
カラム名 | データ型 | NULL | 説明 |
---|---|---|---|
id | integer | NO | 主キー、自動採番 |
user_id | integer | NO | ユーザーIDへの外部キー |
ai_worker_id | integer | NO | AIワーカーIDへの外部キー |
permission_type | integer | NO | 権限タイプ(0:使用, 1:管理) |
created_on | datetime | NO | 作成日時 |
インデックス:
- PRIMARY KEY (id)
- UNIQUE INDEX (user_id, ai_worker_id)
制約:
- FOREIGN KEY (user_id) REFERENCES users(id)
- FOREIGN KEY (ai_worker_id) REFERENCES ai_workers(id)
3. マイグレーション概要¶
以下のマイグレーションファイルを作成する必要があります:
-
001_create_api_configs.rb
- api_configsテーブルの作成
-
002_create_ai_workers.rb
- ai_workersテーブルの作成
- api_configsへの外部キー設定
-
003_create_worker_assignments.rb
- worker_assignmentsテーブルの作成
- issuesおよびai_workersへの外部キー設定
-
004_create_work_instructions.rb
- work_instructionsテーブルの作成
- 関連する外部キー設定
-
005_create_work_responses.rb
- work_responsesテーブルの作成
- work_instructionsへの外部キー設定
-
006_create_work_continuations.rb
- work_continuationsテーブルの作成
- worker_assignmentsへの外部キー設定
-
007_create_work_logs.rb
- work_logsテーブルの作成
- worker_assignmentsへの外部キー設定
-
008_create_plugin_settings.rb
- plugin_settingsテーブルの作成
-
009_create_worker_permissions.rb
- worker_permissionsテーブルの作成
- 関連する外部キー設定
-
010_add_custom_fields.rb
- Redmineのカスタムフィールドを追加するマイグレーション
4. モデル関連概要¶
4.1 主要モデルのビジネスロジック¶
AIWorker モデル¶
- APIとの通信を抽象化
- 役割に応じた振る舞いの制御
- API呼び出しパラメータの構築
- ワーカーステータスの管理
WorkerAssignment モデル¶
- チケットとAIワーカーの関連付け
- 作業状態の管理と追跡
- 自動割り当てロジック
- 作業タイムアウト検出
WorkInstruction モデル¶
- 指示内容の管理
- 指示テンプレートの適用
- 指示履歴の管理
- コンテキスト情報の構築
WorkResponse モデル¶
- レスポンス内容の処理
- 長文レスポンスのファイル管理
- レスポンス成功/失敗の判定
- 応答内容の構造化
WorkContinuation モデル¶
- 作業継続のスケジューリング
- コンテキスト管理
- リトライ論理の実装
- 進行状況の追跡
4.2 Redmine標準モデルとの連携¶
Issue モデルとの連携¶
- チケット作成/更新フック
- カスタムフィールドの追加
- ステータス連携
- ワークフロー拡張
User モデルとの連携¶
- AIワーカー利用権限
- 通知設定
- 操作履歴
Project モデルとの連携¶
- プロジェクト単位での設定
- プロジェクト固有のAIワーカー設定
- 統計機能
IssueStatus モデルとの連携¶
- ステータス遷移との連動
- カスタムステータスの追加
- ワークフロー連携
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/design/data_model.md最後に、プラグインの実装手順書を作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/implementation_plan.md,
content:
# AI駆動開発プラットフォーム - 実装計画
1. 実装フェーズ¶
フェーズ1: 基本構造構築(1-2週間)¶
-
プラグイン骨格作成
- プラグイン初期構造の構築
- init.rbの作成
- 設定ファイル準備
- ルーティング設定
-
データベースマイグレーション作成
- 各テーブルのマイグレーションファイル作成
- マイグレーションテスト
- テーブル作成確認
-
基本モデル実装
- AIWorkerモデル
- APIConfigモデル
- WorkerAssignmentモデル
- その他主要モデル
-
管理者向け基本UI
- プラグイン設定画面
- APIキー管理画面の基本実装
- AIワーカー管理画面の基本実装
フェーズ2: API連携機能(2-3週間)¶
-
API抽象化レイヤー実装
- 共通APIクライアントの実装
- Claude API連携実装
- OpenAI API連携実装
- 拡張可能な設計の実装
-
プロンプト管理機能
- プロンプトテン
}再試行Claudeがメッセージの最大文字数に達したため、応答を一時停止しています。「Continue」と入力すると会話を続けることができます。MI続ける編集Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/implementation_plan.md,
content:
# AI駆動開発プラットフォーム - 実装計画
- プロンプトテン
1. 実装フェーズ¶
フェーズ1: 基本構造構築(1-2週間)¶
-
プラグイン骨格作成
- プラグイン初期構造の構築
- init.rbの作成
- 設定ファイル準備
- ルーティング設定
-
データベースマイグレーション作成
- 各テーブルのマイグレーションファイル作成
- マイグレーションテスト
- テーブル作成確認
-
基本モデル実装
- AIWorkerモデル
- APIConfigモデル
- WorkerAssignmentモデル
- その他主要モデル
-
管理者向け基本UI
- プラグイン設定画面
- APIキー管理画面の基本実装
- AIワーカー管理画面の基本実装
フェーズ2: API連携機能(2-3週間)¶
-
API抽象化レイヤー実装
- 共通APIクライアントの実装
- Claude API連携実装
- OpenAI API連携実装
- 拡張可能な設計の実装
-
プロンプト管理機能
- プロンプトテンプレート機能実装
- 役割別プロンプト設定
- 動的変数置換機能
-
レスポンス処理実装
- レスポンス解析機能
- 長文レスポンスの分割処理
- JSON一時ファイル保存機能
- コード/テキスト整形機能
-
コンテキスト管理実装
- チャット履歴管理
- トークン制限対応
- コンテキスト構築ロジック
フェーズ3: チケット連携機能(2-3週間)¶
-
チケットフック実装
- チケット作成/更新フック
- コメント追加フック
- ステータス変更フック
-
AIワーカー割り当て機能
- ワーカー割り当てUI
- 自動割り当てロジック
- 割り当て履歴管理
-
チケット詳細画面拡張
- AI作業ステータス表示
- AI作業ログ表示
- AI作業指示機能
-
カスタムフィールド連携
- AI関連カスタムフィールド作成
- フィールド値の自動更新機能
- フィールド表示カスタマイズ
フェーズ4: 作業管理機能(2-3週間)¶
-
バックグラウンドジョブ実装
- 作業継続ジョブ
- タイムアウト管理ジョブ
- 定期チェックジョブ
-
作業指示・結果表示機能
- 指示書入力UI
- 指示テンプレート選択機能
- 作業結果表示UI
-
作業ステータス管理
- ステータス遷移管理
- ステータス自動更新
- タイムアウト検出と対応
-
作業ログ機能
- 詳細ログ記録
- ログ検索/フィルタ機能
- ログエクスポート機能
フェーズ5: ユーザーインターフェース(2-3週間)¶
-
チャットインターフェース
- PMとのチャット機能
- メッセージ履歴表示
- ファイル添付機能
-
AIワーカーダッシュボード
- ワーカー稼働状況表示
- チケット作業状況表示
- 重要通知表示
-
LINE風UIテーマ連携
- チャットUIのLINE風デザイン対応
- アイコン表示の統一
- レスポンシブ対応
-
レポート/統計機能
- 作業統計表示
- パフォーマンス分析
- コスト集計機能
フェーズ6: セキュリティと拡張性(1-2週間)¶
-
セキュリティ強化
- APIキー暗号化実装
- 権限管理詳細化
- データ保護機能
-
拡張性対応
- 新規AIプロバイダー追加の簡易化
- カスタムワークフロー対応
- プラグインAPI拡張
-
テスト・デバッグ
- 単体テスト作成
- 結合テスト作成
- エラーハンドリング改善
-
ドキュメント作成
- 管理者向けマニュアル
- ユーザー向けマニュアル
- 開発者向けドキュメント
2. タスク分解¶
タスク1: プラグイン基本構造¶
- プラグインディレクトリ構造作成
- init.rb作成
- routes.rb作成
- 国際化ファイル(en.yml, ja.yml)作成
- アセット設定
タスク2: データベース設計¶
- api_configsマイグレーション作成
- ai_workersマイグレーション作成
- worker_assignmentsマイグレーション作成
- work_instructionsマイグレーション作成
- work_responsesマイグレーション作成
- work_continuationsマイグレーション作成
- work_logsマイグレーション作成
- plugin_settingsマイグレーション作成
- worker_permissionsマイグレーション作成
- Redmineカスタムフィールド追加マイグレーション作成
タスク3: モデル実装¶
- APIConfig モデル実装
- AIWorker モデル実装
- WorkerAssignment モデル実装
- WorkInstruction モデル実装
- WorkResponse モデル実装
- WorkContinuation モデル実装
- WorkLog モデル実装
- モデル間リレーションシップ設定
- バリデーション設定
タスク4: API連携機能¶
- API抽象クラス実装
- Claude API連携実装
- OpenAI API連携実装
- API呼び出しパラメータ設定
- レスポンス処理共通機能実装
- エラーハンドリング実装
- レート制限対応実装
タスク5: 管理者向け機能¶
- 管理メニュー拡張
- APIキー管理画面実装
- AIワーカー管理画面実装
- プラグイン設定画面実装
- 権限管理画面実装
タスク6: チケット連携機能¶
- チケットフック実装
- AIワーカー割り当て機能実装
- チケット詳細画面拡張
- AI作業ステータス表示実装
- AI作業指示入力機能実装
- チケットコメント連携実装
タスク7: バックグラウンド処理¶
- ジョブ基盤実装
- 作業継続ジョブ実装
- タイムアウト管理ジョブ実装
- リトライ処理実装
- 定期チェックジョブ実装
タスク8: チャット機能¶
- チャットインターフェース基盤実装
- メッセージ送受信機能実装
- チャット履歴表示実装
- ファイル添付機能実装
- LINE風UIの適用
タスク9: ダッシュボード機能¶
- AIワーカーダッシュボード画面実装
- ワーカー稼働状況表示実装
- チケット作業状況表示実装
- 作業ログタイムライン実装
タスク10: レポート機能¶
- 統計データ収集機能実装
- 統計グラフ表示実装
- パフォーマンス分析機能実装
- コスト管理機能実装
- レポートエクスポート機能実装
3. 優先順位とスケジュール¶
最優先実装項目(第1フェーズ)¶
- プラグイン基本構造
- データベース設計と実装
- 基本モデル実装
- 管理者向け基本機能
高優先実装項目(第2-3フェーズ)¶
- API連携基盤
- チケット連携基本機能
- AIワーカー割り当て機能
- 作業指示・結果表示機能
中優先実装項目(第4-5フェーズ)¶
- バックグラウンド処理
- チャット機能
- ダッシュボード機能
- UI改善
低優先実装項目(第6フェーズ)¶
- 高度な統計・レポート機能
- 拡張機能
- セキュリティ強化
- 詳細なドキュメント作成
4. 開発環境構築手順¶
4.1 開発環境準備¶
- Redmine 6.0.5のインストール
- 開発用データベースの設定
- 開発用APIキーの準備
- 開発用プラグインディレクトリの設定
4.2 テスト環境¶
- RSpecテスト環境の構築
- モデルテストの作成
- コントローラテストの作成
- APIモックの準備
4.3 デプロイ環境¶
- 本番環境デプロイ手順書作成
- マイグレーション実行手順
- 初期データセットアップ
- アップグレード手順
5. 実装時の注意点¶
5.1 セキュリティ¶
- APIキーは必ず暗号化して保存
- 認証・認可の厳密なチェック
- センシティブデータのフィルタリング
- XSS/CSRFなどの脆弱性対策
5.2 パフォーマンス¶
- 長時間処理は非同期で実行
- インデックス設計の最
}再試行MI続ける編集続きを作成します。Wwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/implementation_plan.md,
content:
# AI駆動開発プラットフォーム - 実装計画
1. 実装フェーズ¶
フェーズ1: 基本構造構築(1-2週間)¶
-
プラグイン骨格作成
- プラグイン初期構造の構築
- init.rbの作成
- 設定ファイル準備
- ルーティング設定
-
データベースマイグレーション作成
- 各テーブルのマイグレーションファイル作成
- マイグレーションテスト
- テーブル作成確認
-
基本モデル実装
- AIWorkerモデル
- APIConfigモデル
- WorkerAssignmentモデル
- その他主要モデル
-
管理者向け基本UI
- プラグイン設定画面
- APIキー管理画面の基本実装
- AIワーカー管理画面の基本実装
フェーズ2: API連携機能(2-3週間)¶
-
API抽象化レイヤー実装
- 共通APIクライアントの実装
- Claude API連携実装
- OpenAI API連携実装
- 拡張可能な設計の実装
-
プロンプト管理機能
- プロンプトテンプレート機能実装
- 役割別プロンプト設定
- 動的変数置換機能
-
レスポンス処理実装
- レスポンス解析機能
- 長文レスポンスの分割処理
- JSON一時ファイル保存機能
- コード/テキスト整形機能
-
コンテキスト管理実装
- チャット履歴管理
- トークン制限対応
- コンテキスト構築ロジック
フェーズ3: チケット連携機能(2-3週間)¶
-
チケットフック実装
- チケット作成/更新フック
- コメント追加フック
- ステータス変更フック
-
AIワーカー割り当て機能
- ワーカー割り当てUI
- 自動割り当てロジック
- 割り当て履歴管理
-
チケット詳細画面拡張
- AI作業ステータス表示
- AI作業ログ表示
- AI作業指示機能
-
カスタムフィールド連携
- AI関連カスタムフィールド作成
- フィールド値の自動更新機能
- フィールド表示カスタマイズ
フェーズ4: 作業管理機能(2-3週間)¶
-
バックグラウンドジョブ実装
- 作業継続ジョブ
- タイムアウト管理ジョブ
- 定期チェックジョブ
-
作業指示・結果表示機能
- 指示書入力UI
- 指示テンプレート選択機能
- 作業結果表示UI
-
作業ステータス管理
- ステータス遷移管理
- ステータス自動更新
- タイムアウト検出と対応
-
作業ログ機能
- 詳細ログ記録
- ログ検索/フィルタ機能
- ログエクスポート機能
フェーズ5: ユーザーインターフェース(2-3週間)¶
-
チャットインターフェース
- PMとのチャット機能
- メッセージ履歴表示
- ファイル添付機能
-
AIワーカーダッシュボード
- ワーカー稼働状況表示
- チケット作業状況表示
- 重要通知表示
-
LINE風UIテーマ連携
- チャットUIのLINE風デザイン対応
- アイコン表示の統一
- レスポンシブ対応
-
レポート/統計機能
- 作業統計表示
- パフォーマンス分析
- コスト集計機能
フェーズ6: セキュリティと拡張性(1-2週間)¶
-
セキュリティ強化
- APIキー暗号化実装
- 権限管理詳細化
- データ保護機能
-
拡張性対応
- 新規AIプロバイダー追加の簡易化
- カスタムワークフロー対応
- プラグインAPI拡張
-
テスト・デバッグ
- 単体テスト作成
- 結合テスト作成
- エラーハンドリング改善
-
ドキュメント作成
- 管理者向けマニュアル
- ユーザー向けマニュアル
- 開発者向けドキュメント
2. タスク分解¶
タスク1: プラグイン基本構造¶
- プラグインディレクトリ構造作成
- init.rb作成
- routes.rb作成
- 国際化ファイル(en.yml, ja.yml)作成
- アセット設定
タスク2: データベース設計¶
- api_configsマイグレーション作成
- ai_workersマイグレーション作成
- worker_assignmentsマイグレーション作成
- work_instructionsマイグレーション作成
- work_responsesマイグレーション作成
- work_continuationsマイグレーション作成
- work_logsマイグレーション作成
- plugin_settingsマイグレーション作成
- worker_permissionsマイグレーション作成
- Redmineカスタムフィールド追加マイグレーション作成
タスク3: モデル実装¶
- APIConfig モデル実装
- AIWorker モデル実装
- WorkerAssignment モデル実装
- WorkInstruction モデル実装
- WorkResponse モデル実装
- WorkContinuation モデル実装
- WorkLog モデル実装
- モデル間リレーションシップ設定
- バリデーション設定
タスク4: API連携機能¶
- API抽象クラス実装
- Claude API連携実装
- OpenAI API連携実装
- API呼び出しパラメータ設定
- レスポンス処理共通機能実装
- エラーハンドリング実装
- レート制限対応実装
タスク5: 管理者向け機能¶
- 管理メニュー拡張
- APIキー管理画面実装
- AIワーカー管理画面実装
- プラグイン設定画面実装
- 権限管理画面実装
タスク6: チケット連携機能¶
- チケットフック実装
- AIワーカー割り当て機能実装
- チケット詳細画面拡張
- AI作業ステータス表示実装
- AI作業指示入力機能実装
- チケットコメント連携実装
タスク7: バックグラウンド処理¶
- ジョブ基盤実装
- 作業継続ジョブ実装
- タイムアウト管理ジョブ実装
- リトライ処理実装
- 定期チェックジョブ実装
タスク8: チャット機能¶
- チャットインターフェース基盤実装
- メッセージ送受信機能実装
- チャット履歴表示実装
- ファイル添付機能実装
- LINE風UIの適用
タスク9: ダッシュボード機能¶
- AIワーカーダッシュボード画面実装
- ワーカー稼働状況表示実装
- チケット作業状況表示実装
- 作業ログタイムライン実装
タスク10: レポート機能¶
- 統計データ収集機能実装
- 統計グラフ表示実装
- パフォーマンス分析機能実装
- コスト管理機能実装
- レポートエクスポート機能実装
3. 優先順位とスケジュール¶
最優先実装項目(第1フェーズ)¶
- プラグイン基本構造
- データベース設計と実装
- 基本モデル実装
- 管理者向け基本機能
高優先実装項目(第2-3フェーズ)¶
- API連携基盤
- チケット連携基本機能
- AIワーカー割り当て機能
- 作業指示・結果表示機能
中優先実装項目(第4-5フェーズ)¶
- バックグラウンド処理
- チャット機能
- ダッシュボード機能
- UI改善
低優先実装項目(第6フェーズ)¶
- 高度な統計・レポート機能
- 拡張機能
- セキュリティ強化
- 詳細なドキュメント作成
4. 開発環境構築手順¶
4.1 開発環境準備¶
- Redmine 6.0.5のインストール
- 開発用データベースの設定
- 開発用APIキーの準備
- 開発用プラグインディレクトリの設定
4.2 テスト環境¶
- RSpecテスト環境の構築
- モデルテストの作成
- コントローラテストの作成
- APIモックの準備
4.3 デプロイ環境¶
- 本番環境デプロイ手順書作成
- マイグレーション実行手順
- 初期データセットアップ
- アップグレード手順
5. 実装時の注意点¶
5.1 セキュリティ¶
- APIキーは必ず暗号化して保存
- 認証・認可の厳密なチェック
- センシティブデータのフィルタリング
- XSS/CSRFなどの脆弱性対策
5.2 パフォーマンス¶
- 長時間処理は非同期で実行
- インデックス設計の最適化
- N+1クエリ問題の防止
- キャッシュ戦略の検討
5.3 拡張性¶
- 新規AIプロバイダー追加の容易さ
- カスタマイズポイントの設計
- 設定の柔軟性確保
- モジュール化設計
5.4 ユーザビリティ¶
- 直感的なUI設計
- レスポンシブデザイン対応
- エラーメッセージの明確化
- ユーザーガイダンスの充実
6. 技術スタック¶
6.1 バックエンド¶
- Ruby 3.1+
- Rails 6.0+(Redmine 6.0.5に合わせる)
- ActiveRecord
- Sidekiq(バックグラウンドジョブ)
- Redis(キャッシュ、ジョブキュー)
6.2 フロントエンド¶
- HTML5
- CSS3/SASS
- JavaScript/jQuery
- Bootstrap(基本レイアウト)
- LINE風テーマに合わせたカスタムCSS
6.3 API連携¶
- REST APIクライアント
- WebSocket(リアルタイム通信)
- JWT認証(必要に応じて)
- JSON処理
6.4 データベース¶
- MySQL/PostgreSQL(Redmineの設定に合わせる)
- Redis(キャッシュ、一時データ)
6.5 テスト¶
- RSpec(モデル、コントローラテスト)
- FactoryBot(テストデータ)
- Capybara(E2Eテスト)
- WebMock(API連携テスト)
7. ドキュメント計画¶
7.1 開発者向けドキュメント¶
- プラグイン構造解説
- データモデル詳細
- API連携仕様
- 拡張ポイント解説
- テスト方法
7.2 管理者向けドキュメント¶
- インストール手順
- 設定方法
- APIキー管理方法
- AIワーカー設定方法
- トラブルシューティング
7.3 ユーザー向けドキュメント¶
- 基本操作方法
- AIワーカーとの連携方法
- チケット連携活用法
- チャット機能の使い方
- ベストプラクティス
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/design/implementation_plan.mdWwrite_fileリクエスト{
path:
E:/Desktop/AI_Redmine_Plugin/design/plugin_structure.md,
content:
# AI駆動開発プラットフォーム - プラグイン構造設計
1. ディレクトリ構造¶
ai_worker_plugin/
├── app/
│ ├── controllers/
│ │ ├── ai_worker_plugin/
│ │ │ ├── admin_controller.rb
│ │ │ ├── api_configs_controller.rb
│ │ │ ├── ai_workers_controller.rb
│ │ │ ├── chats_controller.rb
│ │ │ ├── dashboard_controller.rb
│ │ │ ├── settings_controller.rb
│ │ │ ├── work_instructions_controller.rb
│ │ │ └── work_responses_controller.rb
│ │ └── ai_worker_plugin_controller.rb
│ ├── helpers/
│ │ └── ai_worker_plugin_helper.rb
│ ├── models/
│ │ ├── ai_worker_plugin/
│ │ │ ├── ai_worker.rb
│ │ │ ├── api_config.rb
│ │ │ ├── worker_assignment.rb
│ │ │ ├── work_instruction.rb
│ │ │ ├── work_response.rb
│ │ │ ├── work_continuation.rb
│ │ │ ├── work_log.rb
│ │ │ ├── plugin_setting.rb
│ │ │ └── worker_permission.rb
│ │ └── ai_worker_plugin.rb
│ ├── services/
│ │ ├── ai_worker_plugin/
│ │ │ ├── api/
│ │ │ │ ├── base_client.rb
│ │ │ │ ├── claude_client.rb
│ │ │ │ └── openai_client.rb
│ │ │ ├── context_manager.rb
│ │ │ ├── prompt_builder.rb
│ │ │ ├── response_processor.rb
│ │ │ └── background_jobs/
│ │ │ ├── continuation_job.rb
│ │ │ ├── timeout_checker_job.rb
│ │ │ └── status_updater_job.rb
│ │ └── ai_worker_plugin_service.rb
│ └── views/
│ ├── ai_worker_plugin/
│ │ ├── admin/
│ │ │ └── index.html.erb
│ │ ├── api_configs/
│ │ │ ├── index.html.erb
│ │ │ ├── new.html.erb
│ │ │ ├── edit.html.erb
│ │ │ └── show.html.erb
│ │ ├── ai_workers/
│ │ │ ├── index.html.erb
│ │ │ ├── new.html.erb
│ │ │ ├── edit.html.erb
│ │ │ └── show.html.erb
│ │ ├── chats/
│ │ │ ├── index.html.erb
│ │ │ └── show.html.erb
│ │ ├── dashboard/
│ │ │ └── index.html.erb
│ │ ├── settings/
│ │ │ └── index.html.erb
│ │ ├── work_instructions/
│ │ │ ├── index.html.erb
│ │ │ ├── new.html.erb
│ │ │ └── show.html.erb
│ │ └── work_responses/
│ │ ├── index.html.erb
│ │ └── show.html.erb
│ └── layouts/
│ └── ai_worker_plugin.html.erb
├── assets/
│ ├── images/
│ │ └── ai_worker_plugin/
│ │ ├── icons/
│ │ │ ├── pm.png
│ │ │ ├── architect.png
│ │ │ ├── frontend.png
│ │ │ ├── backend.png
│ │ │ ├── tester.png
│ │ │ └── security.png
│ │ └── logo.png
│ ├── javascripts/
│ │ └── ai_worker_plugin/
│ │ ├── admin.js
│ │ ├── chat.js
│ │ ├── dashboard.js
│ │ └── application.js
│ └── stylesheets/
│ └── ai_worker_plugin/
│ ├── admin.css
│ ├── chat.css
│ ├── dashboard.css
│ └── application.css
├── config/
│ ├── locales/
│ │ ├── en.yml
│ │ └── ja.yml
│ ├── routes.rb
│ └── schedule.rb
├── db/
│ └── migrate/
│ ├── 001_create_api_configs.rb
│ ├── 002_create_ai_workers.rb
│ ├── 003_create_worker_assignments.rb
│ ├── 004_create_work_instructions.rb
│ ├── 005_create_work_responses.rb
│ ├── 006_create_work_continuations.rb
│ ├── 007_create_work_logs.rb
│ ├── 008_create_plugin_settings.rb
│ ├── 009_create_worker_permissions.rb
│ └── 010_add_custom_fields.rb
├── lib/
│ ├── ai_worker_plugin/
│ │ ├── hooks/
│ │ │ ├── view_hooks.rb
│ │ │ ├── controller_hooks.rb
│ │ │ └── model_hooks.rb
│ │ ├── patches/
│ │ │ ├── issue_patch.rb
│ │ │ ├── project_patch.rb
│ │ │ └── user_patch.rb
│ │ ├── background_job.rb
│ │ └── utils.rb
│ └── ai_worker_plugin.rb
├── test/
│ ├── fixtures/
│ ├── functional/
│ ├── integration/
│ └── unit/
├── init.rb
└── README.md
2. 主要ファイル詳細¶
2.1 init.rb¶
require 'redmine'
require_dependency 'ai_worker_plugin'
Redmine::Plugin.register :ai_worker_plugin do
name 'AI Worker Plugin'
author 'Your Name'
description 'A plugin for AI-driven development platform'
version '0.1.0'
url 'http://example.com/path/to/plugin'
author_url 'http://example.com/about'
requires_redmine version_or_higher: '6.0.0'
settings default: {
'api_request_interval' => 60,
'timeout_seconds' => 300,
'max_response_size' => 1024,
'log_level' => 'info',
'attachment_directory' => '/tmp/ai_worker_plugin'
}, partial: 'settings/ai_worker_plugin_settings'
menu :admin_menu, :ai_worker_plugin,
{ controller: 'ai_worker_plugin/admin', action: 'index' },
caption: :label_ai_worker_plugin,
html: { class: 'icon icon-ai-worker' }
project_module :ai_worker_plugin do
permission :view_ai_workers, { 'ai_worker_plugin/ai_workers': [:index, :show] }
permission :manage_ai_workers, { 'ai_worker_plugin/ai_workers': [:new, :create, :edit, :update, :destroy] }
permission :view_ai_dashboard, { 'ai_worker_plugin/dashboard': [:index] }
permission :use_ai_chat, { 'ai_worker_plugin/chats': [:index, :show, :create] }
permission :assign_ai_workers, { 'ai_worker_plugin/worker_assignments': [:new, :create, :destroy] }
permission :view_ai_work_instructions, { 'ai_worker_plugin/work_instructions': [:index, :show] }
permission :manage_ai_work_instructions, { 'ai_worker_plugin/work_instructions': [:new, :create, :edit, :update, :destroy] }
end
menu :project_menu, :ai_dashboard,
{ controller: 'ai_worker_plugin/dashboard', action: 'index' },
caption: :label_ai_dashboard,
param: :project_id,
before: :settings
menu :project_menu, :ai_chat,
{ controller: 'ai_worker_plugin/chats', action: 'index' },
caption: :label_ai_chat,
param: :project_id,
before: :settings
end
# Patches to models
require_dependency 'ai_worker_plugin/patches/issue_patch'
require_dependency 'ai_worker_plugin/patches/project_patch'
require_dependency 'ai_worker_plugin/patches/user_patch'
# Hooks
require_dependency 'ai_worker_plugin/hooks/view_hooks'
require_dependency 'ai_worker_plugin/hooks/controller_hooks'
require_dependency 'ai_worker_plugin/hooks/model_hooks'
# Background job setup
Rails.configuration.to_prepare do
require_dependency 'ai_worker_plugin/background_job'
end
2.2 lib/ai_worker_plugin.rb¶
module AIWorkerPlugin
class << self
def setup
# プラグインの初期化処理
end
def settings
Setting.plugin_ai_worker_plugin
end
def logger
@logger ||= Logger.new(Rails.root.join('log/ai_worker_plugin.log'))
end
def schedule_background_jobs
# バックグラウンドジョブのスケジューリング
end
end
end
2.3 app/models/ai_worker_plugin/ai_worker.rb¶
module AIWorkerPlugin
class AIWorker < ActiveRecord::Base
belongs_to :api_config
has_many :worker_assignments, dependent: :destroy
has_many :work_instructions, dependent: :destroy
has_many :worker_permissions, dependent: :destroy
validates :name, presence: true, uniqueness: true
validates :role, presence: true
validates :api_config_id, presence: true
enum role: {
pm: 0,
architect: 1,
frontend_engineer: 2,
backend_engineer: 3,
tester: 4,
security: 5
}
enum status: {
inactive: 0,
active: 1
}
def call_api(content, context = nil)
# APIへの呼び出し処理
service = case api_type
when 'claude'
AIWorkerPlugin::Services::API::ClaudeClient.new(api_config)
when 'openai'
AIWorkerPlugin::Services::API::OpenAIClient.new(api_config)
else
raise \"Unsupported API type: #{api_type}\"
end
prompt = AIWorkerPlugin::Services::PromptBuilder.new(self, content, context).build
service.call(prompt)
end
end
end
2.4 app/services/ai_worker_plugin/api/base_client.rb¶
module AIWorkerPlugin
module Services
module API
class BaseClient
attr_reader :api_config
def initialize(api_config)
@api_config = api_config
end
def call(prompt)
raise NotImplementedError, \"Subclasses must implement #call\"
end
protected
def handle_response(response)
# レスポンス共通処理
end
def handle_error(error)
# エラー共通処理
AIWorkerPlugin.logger.error(\"API Error: #{error.message}\")
raise error
end
end
end
end
end
2.5 app/services/ai_worker_plugin/api/claude_client.rb¶
require 'net/http'
require 'uri'
require 'json'
module AIWorkerPlugin
module Services
module API
class ClaudeClient < BaseClient
def call(prompt)
uri = URI.parse(api_config.endpoint_url || \"https://api.anthropic.com/v1/messages\")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request[\"Content-Type\"] = \"application/json\"
request[\"x-api-key\"] = api_config.api_key
request[\"anthropic-version\"] = \"2023-06-01\"
# 追加パラメータの適用
additional_params = JSON.parse(api_config.additional_params || '{}')
request_data = {
model: additional_params[\"model\"] || \"claude-3-opus-20240229\",
max_tokens: additional_params[\"max_tokens\"] || 4000,
messages: [
{ role: \"user\", content: prompt }
]
}
request.body = request_data.to_json
response = http.request(request)
if response.code.to_i == 200
handle_response(JSON.parse(response.body))
else
handle_error(Error.new(\"Claude API Error: #{response.code} - #{response.body}\"))
end
rescue => e
handle_error(e)
end
protected
def handle_response(response)
content = response.dig(\"content\", 0, \"text\") || \"\"
AIWorkerPlugin::Services::ResponseProcessor.new(content).process
end
end
end
end
end
2.6 app/controllers/ai_worker_plugin/ai_workers_controller.rb¶
module AIWorkerPlugin
class AIWorkersController < AIWorkerPluginController
before_action :find_ai_worker, only: [:show, :edit, :update, :destroy]
before_action :authorize_global
def index
@ai_workers = AIWorker.all
end
def show
end
def new
@ai_worker = AIWorker.new
@api_configs = APIConfig.all
end
def create
@ai_worker = AIWorker.new(ai_worker_params)
if @ai_worker.save
flash[:notice] = l(:notice_ai_worker_created)
redirect_to ai_worker_plugin_ai_worker_path(@ai_worker)
else
@api_configs = APIConfig.all
render :new
end
end
def edit
@api_configs = APIConfig.all
end
def update
if @ai_worker.update(ai_worker_params)
flash[:notice] = l(:notice_ai_worker_updated)
redirect_to ai_worker_plugin_ai_worker_path(@ai_worker)
else
@api_configs = APIConfig.all
render :edit
end
end
def destroy
if @ai_worker.destroy
flash[:notice] = l(:notice_ai_worker_deleted)
else
flash[:error] = l(:error_ai_worker_delete_failed)
end
redirect_to ai_worker_plugin_ai_workers_path
end
private
def find_ai_worker
@ai_worker = AIWorker.find(params[:id])
rescue ActiveRecord::RecordNotFound
render_404
end
def ai_worker_params
params.require(:ai_worker).permit(:name, :role, :icon, :api_type, :api_config_id, :status, :profile)
end
end
end
2.7 db/migrate/001_create_api_configs.rb¶
class CreateAPIConfigs < ActiveRecord::Migration[6.0]
def change
create_table :ai_worker_plugin_api_configs do |t|
t.string :name, null: false, limit: 100
t.text :api_key, null: false
t.string :endpoint_url, limit: 255
t.text :additional_params
t.datetime :created_on, null: false
t.datetime :updated_on, null: false
end
add_index :ai_worker_plugin_api_configs, :name, unique: true
end
end
2.8 lib/ai_worker_plugin/hooks/view_hooks.rb¶
module AIWorkerPlugin
module Hooks
class ViewHooks < Redmine::Hook::ViewListener
# チケット詳細画面にAIワーカー情報を表示
render_on :view_issues_show_details_bottom, partial: 'hooks/ai_worker_plugin/issue_show_ai_worker'
# チケット編集画面にAIワーカー割り当てセクションを追加
render_on :view_issues_form_details_bottom, partial: 'hooks/ai_worker_plugin/issue_form_ai_worker'
# プロジェクト設定にAI設定タブを追加
render_on :view_projects_settings_tabs, partial: 'hooks/ai_worker_plugin/project_settings_tab'
end
end
end
2.9 app/services/ai_worker_plugin/background_jobs/continuation_job.rb¶
module AIWorkerPlugin
module Services
module BackgroundJobs
class ContinuationJob
def perform
# 作業継続が必要なアサインメントを取得
assignments = WorkerAssignment.where(status: 'in_progress')
assignments.each do |assignment|
next unless continuation_needed?(assignment)
# 最後の指示を取得
last_instruction = assignment.work_instructions.order(created_on: :desc).first
return unless last_instruction
# 最後のレスポンスを取得
last_response = last_instruction.work_responses.order(created_on: :desc).first
# 新しい指示を作成
content = build_continuation_prompt(assignment, last_instruction, last_response)
new_instruction = WorkInstruction.new(
issue_id: assignment.issue_id,
ai_worker_id: assignment.ai_worker_id,
content: content,
created_by: User.where(admin: true).first.id, # システム管理者を指定
created_on: Time.now
)
if new_instruction.save
# APIを呼び出す
worker = assignment.ai_worker
begin
response_content = worker.call_api(content, get_context(assignment))
# レスポンスを保存
WorkResponse.create!(
instruction_id: new_instruction.id,
content: response_content.truncate(65535),
status: 1, # success
response_file: store_long_response(response_content) if response_content.length > 65535,
created_on: Time.now
)
# 作業ログを記録
WorkLog.create!(
assignment_id: assignment.id,
action: 'continuation_executed',
details: \"Continuation job executed successfully\",
status: 0, # info
created_on: Time.now
)
# アサインメントの最終活動時間を更新
assignment.update(last_activity_on: Time.now)
rescue => e
# エラーログを記録
WorkLog.create!(
assignment_id: assignment.id,
action: 'continuation_failed',
details: \"Error: #{e.message}\",
status: 2, # error
created_on: Time.now
)
end
end
end
end
private
def continuation_needed?(assignment)
# 最終活動から1時間以上経過しているか
return false if assignment.last_activity_on.nil?
Time.now - assignment.last_activity_on > 1.hour
end
def build_continuation_prompt(assignment, last_instruction, last_response)
# 継続作業用のプロンプトを構築
\"前回の作業を継続してください。\
\
\" \\
\"前回の指示: #{last_instruction.content}\
\
\" \\
\"前回の応答: #{last_response&.content || '応答なし'}\
\
\" \\
\"現在のチケット: ##{assignment.issue_id} の状況をもとに作業を継続してください。\"
end
def get_context(assignment)
# コンテキスト情報を取得
issue = Issue.find(assignment.issue_id)
{
issue_id: issue.id,
subject: issue.subject,
description: issue.description,
status: issue.status.name,
priority: issue.priority.name,
comments: issue.journals.map { |j| { user: j.user.name, notes: j.notes, created_on: j.created_on } }
}
end
def store_long_response(content)
# 長いレスポンスをファイルに保存
dir = File.join(Rails.root, 'files', 'ai_worker_plugin', 'responses')
FileUtils.mkdir_p(dir) unless File.directory?(dir)
filename = \"response_#{Time.now.to_i}_#{SecureRandom.hex(8)}.json\"
path = File.join(dir, filename)
File.write(path, { content: content }.to_json)
return filename
end
end
end
end
end
3. 主要クラス設計¶
3.1 主要モデルクラス¶
AIWorker¶
- AIワーカーの基本情報管理
- API呼び出しの抽象化
- 役割に応じた動作の提供
APIConfig¶
- API接続情報の管理
- APIキーの暗号化/復号化
- API設定のバリデーション
WorkerAssignment¶
- チケットとAIワーカーの関連付け
- 作業状態の管理
- 作業の継続/中断/完了の制御
WorkInstruction¶
- 作業指示の管理
- 指示テンプレートの適用
- コンテキスト情報の組み込み
WorkResponse¶
- API応答の管理
- 長文レスポンスのファイル処理
- レスポンスの解析と構造化
3.2 主要サービスクラス¶
BaseClient¶
- API呼び出しの基底クラス
- エラーハンドリング共通処理
- レスポンス処理共通処理
ClaudeClient / OpenAIClient¶
- 各AIプロバイダー固有の処理
- API呼び出しパラメータの構築
- レスポンス解析の実装
PromptBuilder¶
- 役割に応じたプロンプト構築
- コンテキスト情報の挿入
- テンプレート変数の置換
ResponseProcessor¶
- レスポンスの整形
- コード/テキストの構造化
- レスポンスの分割処理
ContextManager¶
- チャット/作業コンテキストの管理
- コンテキスト圧縮/最適化
- 重要情報の優先保持
3.3 主要ジョブクラス¶
ContinuationJob¶
- 作業継続の管理
- 定期的なチェック
- 中断作業の再開
TimeoutCheckerJob¶
- 長時間実行タスクの監視
- タイムアウト検出と対応
- 進捗状況の確認
StatusUpdaterJob¶
- ステータス自動更新
- 状態変化の通知
- ワークフロー連携
4. 主要プロセスフロー¶
4.1 AIワーカー割り当てプロセス¶
- ユーザーがチケットを作成/編集
- AIワーカー割り当て画面で役割に応じたワーカーを選択
- WorkerAssignmentレコードが作成される
- 初期ステータスが「未着手」に設定される
- 割り当て通知が生成される
4.2 作業指示プロセス¶
- ユーザーがチケットへの作業指示を入力
- WorkInstructionレコードが作成される
- 担当AIワーカーのAPI呼び出しが実行される
- APIレスポンスがWorkResponseとして保存される
- チケットコメントにレスポンス内容が追加される
- WorkerAssignmentステータスが更新される
4.3 作業継続プロセス¶
- ContinuationJobが定期的に実行される
- 作業中のAssignmentでアクティビティなしを検出
- 継続作業用のプロンプトが生成される
- 担当AIワーカーのAPI呼び出しが実行される
- レスポンスが保存され、チケットに追加される
- アクティビティタイムスタンプが更新される
4.4 エラーハンドリングプロセス¶
- API呼び出し中にエラーが発生
- エラー情報がログに記録される
- 作業ステータスが「エラー」に更新される
- リトライ処理が予約される
- 管理者に通知が送信される
- エラーダッシュボードに情報が表示される
`
}レスポンスSuccessfully wrote to E:/Desktop/AI_Redmine_Plugin/design/plugin_structure.mdプラグイン構造の詳細設計まで完了しました。ここまでに作成したファイルとその内容をまとめます:
作成済みドキュメント一覧
基本ドキュメント
ReadMe-r1.md - プロジェクト概要
DevReport-r1.md - 開発レポート
SetUp-r1.md - セットアップガイド
Next-Step-r1.md - 次のステップ
設計ドキュメント
screen_list.md - 画面一覧
feature_list.md - 機能一覧
overview_design.md - 概要設計
data_model.md - データモデル設計
implementation_plan.md - 実装計画
plugin_structure.md - プラグイン構造設計
これらのドキュメントにより、AI駆動開発プラットフォームのRedmineプラグイン開発のための包括的な設計が完了しました。以下の点について詳細に記述されています:
プラグインの概要と主要機能
画面設計と機能リスト
システムアーキテクチャとデータモデル
実装フェーズとタスク分解
プラグイン構造とディレクトリ構成
主要ファイル実装サンプル
今後はこの設計に基づいて、実際の実装フェーズに移行できます。最初のステップとしては、プラグインの基本構造を構築し、マイグレーションファイルを作成して、基本的なモデルを実装することになります。
ご質問やさらに詳細な設計が必要な部分があれば、お知らせください。再試行MI複数のAIワーカーにチケットを開発以来のチケットを発行します。同時並行で作業するので、開発の一貫性を保つための共通資料と具体的な指示が必要です。編集プロジェクトの一貫性を保つための共通資料と具体的な指示書の作成についてですね。複数のAIワーカーが同時並行で作業するためには、明確な指示と共通理解が非常に重要です。
これに対応するため、共通資料と指示書のテンプレートを作成しましょう。まず、共通資料として開発ガイドラインを作成し、次に具体的な指示書テンプレートを作成します。
共通資料の作成Ccreate_directoryリクエスト{
path
: E:/Desktop/AI_Redmine_Plugin/templates
}レスポンスTool 'create_directory' not found.Wwrite_fileリクエスト{
path
: E:/Desktop/AI_Redmine_Plugin/templates/development_guidelines.md
,
content
: `# 開発ガイドライン - AI駆動開発プラットフォーム
1. 共通開発原則¶
1.1 コーディング規約¶
- Ruby/Rails規約: Ruby Style Guide および Rails Style Guide に準拠する
- JavaScript規約: Airbnb JavaScript Style Guide に準拠する
- HTML/CSS規約: Google HTML/CSS Style Guide に準拠する
- コメント: 複雑なロジックやビジネスルールには必ずコメントを付ける(英語または日本語)
- 命名規則: スネークケース(Ruby)とキャメルケース(JavaScript)を適切に使い分ける
1.2 アーキテクチャ原則¶
- 関心の分離: モデル、ビュー、コントローラの役割を明確に分ける
- サービスクラス: 複雑なビジネスロジックはサービスクラスに分離する
- 依存性の注入: 直接的な依存を避け、テスト容易性を高める
- 共通化と再利用: 重複コードを避け、共通機能はライブラリ化する
- プラグイン構造: Redmineプラグインのベストプラクティスに従う
1.3 セキュリティガイドライン¶
- APIキー管理: APIキーは常に暗号化して保存
- 入力検証: ユーザー入力は必ず検証し、サニタイズする
- CSRF対策: フォームには必ずCSRFトークンを含める
- XSS対策: 出力はエスケープ処理を行う
- SQL Injection防止: ActiveRecordの安全なメソッドを使用する
1.4 エラーハンドリング¶
- 例外処理: 適切な例外処理を行い、ユーザーにわかりやすいメッセージを表示
- ログ記録: エラーは詳細にログに記録し、追跡可能にする
- リカバリー機構: 障害からの回復メカニズムを組み込む
- graceful degradation: 一部機能が利用できなくても全体が機能停止しないようにする
1.5 パフォーマンス¶
- N+1クエリ対策: includesやpreloadを適切に使用
- インデックス設計: 頻繁に検索するカラムにはインデックスを設定
- キャッシュ戦略: 適切な場所でキャッシュを活用
- 非同期処理: 長時間処理はバックグラウンドジョブで実行
2. 共通インターフェース¶
2.1 API連携インターフェース¶
module AIWorkerPlugin
module Services
module API
class BaseClient
def initialize(api_config)
@api_config = api_config
end
def call(prompt, options = {})
raise NotImplementedError, \"Subclasses must implement #call\"
end
protected
def handle_response(response)
# レスポンス共通処理
end
def handle_error(error)
# エラー共通処理
end
end
end
end
end
2.2 モデル共通インターフェース¶
module AIWorkerPlugin
class BaseModel < ActiveRecord::Base
self.abstract_class = true
# 共通フィールド
# created_on, updated_on
# 監査ログ
after_create :log_creation
after_update :log_update
after_destroy :log_destruction
private
def log_creation
AIWorkerPlugin.logger.info(\"#{self.class.name} created: ID #{id}\")
end
def log_update
AIWorkerPlugin.logger.info(\"#{self.class.name} updated: ID #{id}\")
end
def log_destruction
AIWorkerPlugin.logger.info(\"#{self.class.name} destroyed: ID #{id}\")
end
end
end
2.3 バックグラウンドジョブインターフェース¶
module AIWorkerPlugin
module Services
module BackgroundJobs
class BaseJob
def perform
raise NotImplementedError, \"Subclasses must implement #perform\"
end
protected
def log_job_start
AIWorkerPlugin.logger.info(\"#{self.class.name} started at #{Time.now}\")
end
def log_job_end
AIWorkerPlugin.logger.info(\"#{self.class.name} finished at #{Time.now}\")
end
def handle_error(error)
AIWorkerPlugin.logger.error(\"#{self.class.name} error: #{error.message}\")
AIWorkerPlugin.logger.error(error.backtrace.join(\"\
\"))
end
end
end
end
end
3. データフロー¶
3.1 APIリクエスト/レスポンスフロー¶
チケット/指示 -> WorkInstruction作成 -> PromptBuilder -> APIClient ->
AI API -> レスポンス -> ResponseProcessor -> WorkResponse作成 -> チケットコメント
3.2 チケットステータスフロー¶
新規チケット -> AIワーカー割り当て -> 作業開始 -> 作業中 ->
[作業継続 | 作業中断] -> 作業完了 | エラー -> 作業評価
3.3 バックグラウンドジョブフロー¶
スケジューラ起動 -> ジョブ取得 -> ジョブ実行 ->
結果処理 -> ステータス更新 -> ログ記録
4. 共通データ定義¶
4.1 AIワーカー役割定義¶
役割名 | 役割ID | 説明 |
---|---|---|
PM | 0 | 利用者の話題を整理し、要点定義、画面一覧、機能一覧を作成。テスト計画も行う。 |
アーキテクト | 1 | フロントエンジニアとバックエンドエンジニアが使う設計書を作成し、指示書を発行。 |
フロントエンジニア | 2 | デザインとWEBやアプリのコーディングを行う。 |
バックエンドエンジニア | 3 | 機能の開発と実装を行う。 |
テスター | 4 | 単体テスト、結合テスト、総合テストを行い、実行と報告を行う。 |
ホワイトハッカー | 5 | 設計や実装をもとにセキュリティ試験を行い、改善を行う。 |
4.2 作業ステータス定義¶
ステータス名 | ステータスID | 説明 |
---|---|---|
未着手 | 0 | AIワーカーが割り当てられたが、まだ作業を開始していない状態 |
作業中 | 1 | AIワーカーが作業を行っている状態 |
一時停止 | 2 | 作業が一時的に中断されている状態 |
完了 | 3 | 作業が完了した状態 |
エラー | 4 | 何らかのエラーが発生して作業が停止した状態 |
4.3 作業指示テンプレート構造¶
{
\"role\": \"[役割名]\",
\"task_type\": \"[タスク種別]\",
\"task_description\": \"[タスク詳細]\",
\"input_data\": {
\"ticket_id\": \"[チケットID]\",
\"ticket_subject\": \"[チケット件名]\",
\"ticket_description\": \"[チケット説明]\"
},
\"related_tickets\": [
{
\"ticket_id\": \"[関連チケットID]\",
\"relationship\": \"[関係性]\"
}
],
\"expected_output\": \"[期待される成果物]\",
\"references\": [
{
\"title\": \"[参照資料タイトル]\",
\"url\": \"[参照URL]\"
}
],
\"constraints\": \"[制約条件]\",
\"deadline\": \"[期限]\"
}
5. 共通エラーコード¶
エラーコード | 説明 | 対処方法 |
---|---|---|
API_E001 | APIキー認証エラー | APIキーを確認し、有効なキーに更新する |
API_E002 | APIタイムアウトエラー | リクエストのタイムアウト設定を確認し、必要に応じて調整する |
API_E003 | APIレスポンスエラー | エラーレスポンスの詳細を確認し、リクエスト内容を修正する |
API_E004 | APIレート制限エラー | リクエスト頻度を下げるか、バックオフ時間を増やす |
DB_E001 | データベース接続エラー | データベース設定を確認し、接続を再確立する |
DB_E002 | データ整合性エラー | 関連するデータの整合性を確認し、必要に応じて修復する |
DB_E003 | データ検証エラー | 入力データのバリデーションルールを確認し、有効なデータを提供する |
JOB_E001 | ジョブ実行エラー | ジョブのパラメータとビジネスロジックを確認する |
JOB_E002 | ジョブタイムアウトエラー | ジョブの実行時間を確認し、必要に応じて分割または最適化する |
SYS_E001 | システム内部エラー | ログを確認し、根本原因を特定して修正する |
6. フォルダ・ファイル構造¶
開発にあたっては、以下のフォルダ構造とファイル命名規則に従ってください。
ai_worker_plugin/
├── app/
│ ├── controllers/ai_worker_plugin/ # コントローラクラス
│ ├── helpers/ai_worker_plugin/ # ヘルパーメソッド
│ ├── models/ai_worker_plugin/ # モデルクラス
│ ├── services/ai_worker_plugin/ # サービスクラス
│ └── views/ai_worker_plugin/ # ビューテンプレート
├── assets/ # 静的アセット
├── config/ # 設定ファイル
├── db/migrate/ # マイグレーションファイル
├── lib/ai_worker_plugin/ # ライブラリコード
└── test/ # テストコード
7. テスト方針¶
7.1 テスト種類¶
- 単体テスト: モデルとサービスロジックのテスト
- 機能テスト: コントローラとビューの連携テスト
- 統合テスト: ユーザーシナリオのエンドツーエンドテスト
- APIテスト: 外部API連携のテスト(モック/スタブ使用)
7.2 テストプラクティス¶
- テストカバレッジは80%以上を目標とする
- テストはBDD(振舞駆動開発)アプローチで記述する
- CI/CDパイプラインに組み込み、自動実行する
- セキュリティテストとパフォーマンステストも組み込む
7.3 テストツール¶
- RSpec: テストフレームワーク
- FactoryBot: テストデータ生成
- Capybara: 統合テスト
- WebMock: HTTP通信のモック
- SimpleCov: コードカバレッジ測定
8. 文書化ガイドライン¶
8.1 コメント規約¶
- メソッドコメント: 全てのパブリックメソッドには説明コメントを付ける
- 複雑なロジック: 複雑なロジックには実装理由と動作説明を記述
- TODO/FIXME: 暫定実装や既知の問題には適切なタグを付ける
8.2 文書化対象¶
- API仕様: すべての外部/内部APIの入出力と動作を文書化
- データモデル: 全てのモデルとリレーションシップを文書化
- 設定オプション: 全ての設定項目とデフォルト値を文書化
- ユーザー向けガイド: 機能ごとの操作方法を文書化
8.3 文書形式¶
- API仕様: OpenAPI/Swagger形式
- モデル図: ERD形式
- 概念図: UML形式
- ユーザーガイド: Markdown形式
9. デプロイとリリース¶
9.1 デプロイプロセス¶
- 開発環境での完全テスト
- ステージング環境へのデプロイとテスト
- 本番環境へのデプロイ
- デプロイ後の動作確認
9.2 リリースチェックリスト¶
- マイグレーションテスト完了
- 全テスト通過
- セキュリティチェック完了
- パフォーマンステスト通過
- ドキュメント更新完了
- バックアッププラン確認
9.3 バージョニング¶
- セマンティックバージョニング(Major.Minor.Patch)を採用
- 互換性のない変更はMajorバージョンアップ
- 後方互換性のある機能追加はMinorバージョンアップ
- バグ修正のみはPatchバージョンアップ
`
}レスポンスTool 'write_file' not found.申し訳ありません。ファイル操作ツールが利用できないようです。その場合、共通資料と指示書のテンプレートを直接提供します。
共通資料と指示書テンプレート - AI駆動開発プラットフォーム
- 共通開発ガイドライン
1.1 コーディング規約
Ruby/Rails規約: Ruby Style GuideおよびRails Style Guideに準拠
JavaScript規約: Airbnb JavaScript Style Guideに準拠
命名規則: スネークケース(Ruby)とキャメルケース(JavaScript)を適切に使い分け
コメント: 複雑なロジックやビジネスルールには必ずコメントを付ける
1.2 アーキテクチャ原則
関心の分離: モデル、ビュー、コントローラの役割を明確に分ける
サービスクラス: 複雑なビジネスロジックはサービスクラスに分離
プラグイン構造: Redmineプラグインのベストプラクティスに従う
共通化と再利用: 重複コードを避け、共通機能はライブラリ化
1.3 共通インターフェース
APIクライアント基底クラス
rubymodule AIWorkerPlugin
module Services
module API
class BaseClient
def initialize(api_config)
@api_config = api_config
end
def call(prompt, options = {})
raise NotImplementedError, "Subclasses must implement #call"
end
end
end
end
end
モデル基底クラス
rubymodule AIWorkerPlugin
class BaseModel < ActiveRecord::Base
self.abstract_class = true
# 共通フィールド
# created_on, updated_on
# 監査ログ
after_create :log_creation
after_update :log_update
after_destroy :log_destruction
end
end
1.4 共通データ定義
AIワーカー役割定義
役割名役割ID説明PM0利用者の話題を整理し、要点定義、画面一覧、機能一覧を作成アーキテクト1フロントエンジニアとバックエンドエンジニアが使う設計書を作成フロントエンジニア2デザインとWEBやアプリのコーディングバックエンドエンジニア3機能の開発と実装テスター4単体テスト、結合テスト、総合テストの実行と報告ホワイトハッカー5セキュリティ試験と改善提案
作業ステータス定義
ステータス名ステータスID説明未着手0AIワーカー割り当て後、作業開始前作業中1作業実行中一時停止2作業一時中断完了3作業完了エラー4エラーで作業停止
2. AIワーカー別指示書テンプレート
2.1 PM向け指示書テンプレート
markdown# PMワーカー指示書
基本情報¶
- チケットID: [チケットID]
- プロジェクト: [プロジェクト名]
- 依頼者: [依頼者名]
- 期限: [期限]
タスク概要¶
[タスクの概要を簡潔に記述]
求められる成果物¶
- 要件定義書
- 画面一覧
- 機能一覧
- テスト計画書
参照情報¶
- [関連資料へのリンクや参照情報]
具体的な指示¶
- 利用者の要望から要件を整理し、要点を定義してください
- 必要な画面の一覧とその概要を作成してください
- 必要な機能の一覧とその概要を作成してください
- テスト計画を立案してください
- 上記をまとめた要件定義書を作成してください
コミュニケーション指示¶
- 不明点がある場合は、クラリファイングクエスチョンを提示してください
- 作業の進捗を定期的に報告してください(1時間おき)
- 成果物は各項目ごとにチケットコメントとして提出してください
作業上の制約¶
- RED MINEプラグインとしての制約を考慮してください
- LINE風UIデザインテーマに合わせた提案をしてください
- 既存のRedmine機能とうまく連携できるように考慮してください
2.2 アーキテクト向け指示書テンプレート
markdown# アーキテクトワーカー指示書
基本情報¶
- チケットID: [チケットID]
- プロジェクト: [プロジェクト名]
- 依頼元: [PM名]
- 期限: [期限]
関連情報¶
- 要件定義書: [要件定義書へのリンク]
- 画面一覧: [画面一覧へのリンク]
- 機能一覧: [機能一覧へのリンク]
タスク概要¶
PMから提供された要件定義書、画面一覧、機能一覧をもとに、技術的な設計書と実装指示書を作成する
求められる成果物¶
- システムアーキテクチャ設計書
- データモデル設計書
- フロントエンド実装指示書
- バックエンド実装指示書
- テスト仕様書
具体的な指示¶
- 要件定義書を詳細に分析し、Redmineプラグインとしての全体アーキテクチャを設計してください
- 必要なデータモデルとリレーションシップを設計してください
- フロントエンド実装に必要な指示書(画面設計、コンポーネント、対話フロー等)を作成してください
- バックエンド実装に必要な指示書(API設計、ビジネスロジック、DB操作等)を作成してください
- テスターが使用するテスト仕様書の基礎を作成してください
技術的な制約¶
- Redmine 6.0.5に対応すること
- 独自テーマ(E:/Desktop/line_redmine_theme)との互換性を確保すること
- Ruby 3.1以上、Rails 6.0+の環境で動作すること
- AI APIとの連携(Claude, OpenAI)を考慮すること
アーキテクチャガイドライン¶
- モジュール化と疎結合を優先すること
- 新しいAIプロバイダーの追加が容易な設計にすること
- Redmine標準機能との整合性を確保すること
- セキュリティと拡張性のバランスを考慮すること
コミュニケーション指示¶
- アーキテクチャ上の重要な決定事項は理由と共に記録してください
- 設計上の複数の選択肢がある場合は、それぞれのメリット・デメリットを示してください
- 不明点や追加情報が必要な場合は、具体的な質問を提示してください
2.3 フロントエンドエンジニア向け指示書テンプレート
markdown# フロントエンドエンジニアワーカー指示書
基本情報¶
- チケットID: [チケットID]
- プロジェクト: [プロジェクト名]
- 依頼元: [アーキテクト名]
- 期限: [期限]
関連情報¶
- 要件定義書: [要件定義書へのリンク]
- 画面一覧: [画面一覧へのリンク]
- フロントエンド実装指示書: [フロントエンド実装指示書へのリンク]
- デザインガイドライン: [デザインガイドラインへのリンク]
タスク概要¶
アーキテクトから提供された実装指示書に基づき、Redmineプラグインのフロントエンド部分を実装する
求められる成果物¶
- HTML/ERBテンプレート
- CSS/SASSスタイルシート
- JavaScriptコード
- 画面キャプチャまたはプレビュー
具体的な指示¶
- 指示書に基づき、各画面のHTMLテンプレート(ERB)を実装してください
- LINE風デザイン言語に合わせたCSSを実装してください
- 必要なクライアント側の機能を実装するJavaScriptを作成してください
- モバイル対応を含むレスポンシブデザインを実装してください
- ユーザー体験(UX)を最適化し、操作性の良いインターフェースを実現してください
技術的な制約¶
- Redmineのビューテンプレート構造に従うこと
- jQuery及びBootstrapフレームワークを使用可能
- ブラウザ互換性:Chrome, Firefox, Safari, Edgeの最新版をサポート
- アクセシビリティガイドラインに準拠すること
デザインガイドライン¶
- LINE風UIテーマに準拠すること
- 色彩:[指定のカラーパレット]
- フォント:[指定のフォントファミリー]
- アイコン:Font Awesome 5.xを使用すること
- コンポーネント:[共通UIコンポーネントの説明]
コミュニケーション指示¶
- 実装上の課題や不明点は具体的に質問してください
- 重要なUIコンポーネントは完成次第、スクリーンショットを共有してください
- JavaScriptの複雑なロジックには適切なコメントを付けてください
- CSSクラス名は命名規則に従い、一貫性を保ってください
2.4 バックエンドエンジニア向け指示書テンプレート
markdown# バックエンドエンジニアワーカー指示書
基本情報¶
- チケットID: [チケットID]
- プロジェクト: [プロジェクト名]
- 依頼元: [アーキテクト名]
- 期限: [期限]
関連情報¶
- 要件定義書: [要件定義書へのリンク]
- データモデル設計書: [データモデル設計書へのリンク]
- バックエンド実装指示書: [バックエンド実装指示書へのリンク]
- API仕様書: [API仕様書へのリンク]
タスク概要¶
アーキテクトから提供された実装指示書に基づき、Redmineプラグインのバックエンド部分を実装する
求められる成果物¶
- モデルクラス実装
- コントローラクラス実装
- サービスクラス実装
- マイグレーションファイル
- APIクライアント実装
- バックグラウンドジョブ実装
具体的な指示¶
- データモデル設計書に基づいて、各モデルクラスとマイグレーションファイルを実装してください
- コントローラクラスを実装し、必要なアクションとビューの連携を行ってください
- API連携のためのクライアントクラスを実装してください(Claude, OpenAI)
- 複雑なビジネスロジックをサービスクラスとして実装してください
- バックグラウンドジョブを実装し、非同期処理を実現してください
- 単体テストを作成し、実装の正確性を検証してください
技術的な制約¶
- Ruby 3.1以上、Rails 6.0+の環境で動作すること
- Redmine 6.0.5のプラグインAPIに準拠すること
- ActiveRecordベストプラクティスに従うこと
- エラーハンドリングを適切に行うこと
- セキュリティ対策(CSRF, XSS, SQL Injection等)を徹底すること
実装ガイドライン¶
- モデル: バリデーション、リレーションシップ、コールバックを適切に使用
- コントローラ: RESTfulな設計、適切な認証・認可チェック
- サービス: 単一責任の原則、テスト容易性の確保
- API連携: エラーハンドリング、タイムアウト対策、レート制限対応
- ジョブ: 再試行メカニズム、ステータス管理、ログ記録
コミュニケーション指示¶
- 複雑なロジックには適切なコメントを付けてください
- データベースの変更は必ずマイグレーションファイルとして実装してください
- API連携のエラーケースを詳細に考慮し、対応策を実装してください
- パフォーマンス上の考慮点を文書化してください
- セキュリティ上の懸念点があれば報告してください
2.5 テスター向け指示書テンプレート
markdown# テスターワーカー指示書
基本情報¶
- チケットID: [チケットID]
- プロジェクト: [プロジェクト名]
- 依頼元: [PM名]
- 期限: [期限]
関連情報¶
- 要件定義書: [要件定義書へのリンク]
- テスト計画書: [テスト計画書へのリンク]
- テスト仕様書: [テスト仕様書へのリンク]
- 実装コード: [実装コードへのリンク]
タスク概要¶
実装されたRedmineプラグインの単体テスト、結合テスト、および総合テストを実施し、品質を検証する
求められる成果物¶
- 単体テスト結果レポート
- 結合テスト結果レポート
- 総合テスト結果レポート
- バグレポート(該当する場合)
- 改善提案レポート
具体的な指示¶
- テスト計画書とテスト仕様書に基づいて、各種テストを実施してください
- 単体テスト:各モデル、サービス、コントローラの機能を個別にテスト
- 結合テスト:コンポーネント間の連携とデータフローをテスト
- 総合テスト:エンドツーエンドのユーザーシナリオをテスト
- 発見したバグを詳細に文書化し、再現手順を明確に記述してください
- パフォーマンス、ユーザビリティ、セキュリティの観点からも評価してください
テスト環境¶
- Redmine 6.0.5
- Ruby 3.1, Rails 6.0+
- テスト用データベース(MySQL/PostgreSQL)
- テスト用APIキー(Claude, OpenAI)
テスト方法¶
- 単体テスト:RSpecを使用したモデル、コントローラ、サービスのテスト
- 結合テスト:CapybaraとSeleniumを使用した機能テスト
- API連携テスト:WebMockを使用したモックテスト
- セキュリティテスト:Burp Suiteなどのツールを使用した脆弱性スキャン
テスト項目の優先順位¶
- 高優先度:コア機能、データ整合性、セキュリティ関連
- 中優先度:ユーザーインターフェース、エラーハンドリング
- 低優先度:エッジケース、パフォーマンス最適化
コミュニケーション指示¶
- テスト実施前に、テスト計画と手法を確認してください
- 重大なバグを発見した場合は、即時に報告してください
- テスト結果は証拠(スクリーンショット、ログ等)と共に報告してください
- 改善提案には具体的な改善方法を含めてください
- テスト進捗を定期的に報告してください
2.6 ホワイトハッカー向け指示書テンプレート
markdown# ホワイトハッカーワーカー指示書
基本情報¶
- チケットID: [チケットID]
- プロジェクト: [プロジェクト名]
- 依頼元: [PM名]
- 期限: [期限]
関連情報¶
- システムアーキテクチャ設計書: [設計書へのリンク]
- 実装コード: [実装コードへのリンク]
- API仕様書: [API仕様書へのリンク]
- データモデル設計書: [データモデル設計書へのリンク]
タスク概要¶
実装されたRedmineプラグインのセキュリティ試験を実施し、脆弱性を特定して改善提案を行う
求められる成果物¶
- セキュリティ評価レポート
- 脆弱性詳細レポート(発見された場合)
- 改善提案書
- セキュリティ対策実装コード(必要に応じて)
具体的な指示¶
- 以下の観点からセキュリティ試験を実施してください:
- 認証・認可メカニズム
- データ保護(特にAPIキー等の機密情報)
- 入力検証とサニタイズ
- セッション管理
- APIセキュリティ
- ファイルアップロード処理
- クロスサイトスクリプティング(XSS)対策
- クロスサイトリクエストフォージェリ(CSRF)対策
- SQLインジェクション対策
- 発見した脆弱性を重要度と影響範囲と共に詳細に文書化してください
- 各脆弱性に対する具体的な改善策を提案してください
- 特に重要な脆弱性については修正コードを提供してください
テスト方法¶
- 静的解析:コードレビュー、静的解析ツール(Brakeman等)
- 動的解析:実際の攻撃シミュレーション(承認された範囲内で)
- 構成レビュー:設定ファイル、デプロイメント構成の確認
- 依存関係チェック:使用ライブラリの脆弱性確認
セキュリティ評価基準¶
- OWASP Top 10に基づく評価
- CWE (Common Weakness Enumeration)に基づく分類
- CVSSスコアによる重要度評価
倫理的ガイドライン¶
- 承認された範囲内でのみテストを実施すること
- 実際のユーザーデータにアクセスしないこと
- 発見した脆弱性は責任ある開示手順に従うこと
- サービス妨害を引き起こす可能性のあるテストは避けること
コミュニケーション指示¶
- 重大な脆弱性を発見した場合は、即時に報告してください
- セキュリティテストの進捗を定期的に報告してください
- 改善提案には実装の難易度と優先度を含めてください
- セキュリティベストプラクティスに関する教育的な情報も提供してください
- 開発の一貫性を保つためのチェックリスト
3.1 コード品質チェックリスト
markdown# コード品質チェックリスト
命名規則¶
- クラス名:CamelCase(AiWorkerPlugin)
- メソッド名:snake_case(create_worker)
- 変数名:snake_case(worker_id)
- 定数:SCREAMING_SNAKE_CASE(MAX_WORKERS)
- 一貫した命名パターンを使用しているか
コードスタイル¶
- インデント:2スペース
- 行の長さ:80-100文字以内
- メソッドの長さ:25行以内が望ましい
- クラスの長さ:適切に分割されているか
- コメントの適切さ:複雑なロジックに説明があるか
設計原則¶
- 単一責任の原則:クラスは単一の責任を持つか
- DRY原則:重複コードが最小化されているか
- 疎結合:モジュール間の依存が最小限か
- カプセル化:適切なカプセル化が行われているか
- YAGNI原則:不要な機能が含まれていないか
セキュリティ¶
- 入力検証:ユーザー入力が適切に検証されているか
- エスケープ処理:出力がエスケープされているか
- 認証・認可:適切な権限チェックが行われているか
- 機密情報:APIキー等が適切に保護されているか
- セキュリティヘッダー:適切なセキュリティヘッダーが設定されているか
パフォーマンス¶
- N+1クエリ問題:適切に対処されているか
- インデックス:頻繁に検索するカラムにインデックスがあるか
- キャッシュ:適切な場所でキャッシュが使用されているか
- 非同期処理:長時間処理は非同期化されているか
- メモリ使用量:メモリリークの可能性がないか
エラーハンドリング¶
- 例外処理:適切な例外処理が行われているか
- ログ記録:重要な操作とエラーがログに記録されるか
- リカバリー機構:エラーからの回復が可能か
- ユーザーフレンドリー:エラーメッセージが分かりやすいか
- グレースフルデグラデーション:部分的な障害に対応できるか
テスト¶
- 単体テスト:各メソッドのテストが存在するか
- 結合テスト:コンポーネント間の連携テストが存在するか
- エッジケース:境界値や異常系のテストが存在するか
- モック・スタブ:外部依存が適切にモック化されているか
-
カバレッジ:十分なコードカバレッジがあるか
3.2 プロジェクト進捗管理リスト
markdown# プロジェクト進捗管理リスト
1. 基本構造構築¶
- プラグインディレクトリ構造作成
- init.rb作成
- routes.rb作成
- 国際化ファイル作成
- アセット設定
2. データベース設計¶
- api_configsマイグレーション作成
- ai_workersマイグレーション作成
- worker_assignmentsマイグレーション作成
- work_instructionsマイグレーション作成
- work_responsesマイグレーション作成
- work_continuationsマイグレーション作成
- work_logsマイグレーション作成
- plugin_settingsマイグレーション作成
- worker_permissionsマイグレーション作成
- Redmineカスタムフィールド追加マイグレーション作成
3. モデル実装¶
- APIConfig モデル実装
- AIWorker モデル実装
- WorkerAssignment モデル実装
- WorkInstruction モデル実装
- WorkResponse モデル実装
- WorkContinuation モデル実装
- WorkLog モデル実装
- モデル間リレーションシップ設定
- バリデーション設定
4. API連携機能¶
- API抽象クラス実装
- Claude API連携実装
- OpenAI API連携実装
- API呼び出しパラメータ設定
- レスポンス処理共通機能実装
- エラーハンドリング実装
- レート制限対応実装
5. 管理者向け機能¶
- 管理メニュー拡張
- APIキー管理画面実装
- AIワーカー管理画面実装
- プラグイン設定画面実装
- 権限管理画面実装
6. チケット連携機能¶
- チケットフック実装
- AIワーカー割り当て機能実装
- チケット詳細画面拡張
- AI作業ステータス表示実装
- AI作業指示入力機能実装
- チケットコメント連携実装
7. バックグラウンド処理¶
- ジョブ基盤実装
- 作業継続ジョブ実装
- タイムアウト管理ジョブ実装
- リトライ処理実装
- 定期チェックジョブ実装
8. チャット機能¶
- チャットインターフェース基盤実装
- メッセージ送受信機能実装
- チャット履歴表示実装
- ファイル添付機能実装
- LINE風UIの適用
9. ダッシュボード機能¶
- AIワーカーダッシュボード画面実装
- ワーカー稼働状況表示実装
- チケット作業状況表示実装
- 作業ログタイムライン実装
10. テスト¶
- モデルテスト実装
- コントローラテスト実装
- 統合テスト実装
- APIモックテスト実装
- セキュリティテスト実施
- 並行開発のための共通認識文書
4.1 開発フロー概要
markdown# 開発フロー概要
1. 開発プロセス¶
1.1 チケット起票から実装までの流れ¶
- ユーザーからの要望 → PMがチャットで詳細をヒアリング
- PMによる要件整理 → 要件定義、画面一覧、機能一覧の作成
- チケット起票 → PMがRedmineチケットを作成
- アーキテクト割り当て → チケットをアーキテクトに割り当て
- 設計 → アーキテクトが設計書と実装指示書を作成
- 開発者割り当て → フロントエンド/バックエンド担当を割り当て
- 実装 → 開発者が実装を行い、コードをコミット
- テスト → テスターがテストを実施
- セキュリティチェック → ホワイトハッカーがセキュリティ試験を実施
- レビュー・承認 → PMによるレビューと承認
1.2 チケット間の依存関係管理¶
- 親子関係:大きな機能は親チケットと子チケットに分割
- 先行関係:あるチケットが別のチケットの完了を待つ場合は先行関係を設定
- ブロッカー:進行を妨げる問題があれば「ブロッカー」フラグを設定
1.3 成果物の受け渡し¶
- チケットコメントを通じて成果物を共有
- 大きなファイルはチケット添付として管理
- コード資産はコードリポジトリで管理
- 設計書や文書は共有ドキュメントリポジトリで管理
2. コミュニケーションガイドライン¶
2.1 AIワーカー間のコミュニケーション¶
- チケットコメントを主な連絡手段とする
- @メンション機能を使用して特定のワーカーに連絡
- 重要な決定事項は必ずチケットに記録する
- 不明点はクラリファイングクエスチョンとして明確に質問する
2.2 ステータス報告¶
- 作業開始時にステータスを「作業中」に更新
- 1時間ごとに進捗報告をコメントに記載
- ブロッカーが発生した場合は即時報告
- 作業完了時に成果物とステータス更新を行う
2.3 エスカレーション¶
- 技術的な問題:アーキテクトにエスカレーション
- 要件不明点:PMにエスカレーション
- バグや不具合:テスターに報告
- セキュリティ懸念:ホワイトハッカーに相談
3. 品質保証プロセス¶
3.1 コードレビュー¶
- 実装者がコードをコミット
- アーキテクトが設計との整合性をレビュー
- バックエンド/フロントエンドの相互レビュー
- コメントに基づき修正
3.2 テスト¶
- 単体テスト:各コンポーネントの機能確認
- 結合テスト:コンポーネント間の連携確認
- エンドツーエンドテスト:ユーザーシナリオのテスト
- 回帰テスト:修正による既存機能への影響確認
3.3 セキュリティレビュー¶
- 静的解析:コードの静的セキュリティ分析
- 動的テスト:実際の攻撃シミュレーション
- 設定レビュー:セキュリティ設定の確認
- 脆弱性チェック:既知の脆弱性パターンの確認
4. リリースプロセス¶
4.1 リリース準備¶
- 全テスト通過の確認
- ドキュメント更新の確認
- マイグレーションテストの実施
- パフォーマンステストの実施
4.2 デプロイ手順¶
- バックアップの作成
- マイグレーションの実行
- プラグインファイルの配置
- Redmineの再起動
- 動作確認
4.3 リリース後の監視¶
- エラーログの監視
- パフォーマンスの監視
- ユーザーフィードバックの収集
- 緊急バグ修正の準備
以上の共通資料と指示書テンプレートを活用することで、複数のAIワーカーが同時並行で開発を行う際の一貫性を保ち、効率的な開発プロセスを実現できます。各AIワーカーはこれらのガイドラインとテンプレートに従うことで、共通の理解と目標に向かって作業を進めることができます。
表示するデータがありません