0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

既存アプリケーションを部品化して新しいアプリケーションを再構成する

0
Posted at

AIに複数モジュールを統合させる前に、仕様の「橋」を設計する

複数のモジュールや製品を統合してアプリを作るとき、AIに「機能を統合して」と指示しただけでは、期待どおりのものにならないことがあります。

原因の一つは、モジュール間の責務やデータのつながりが整理されていないことです。

今回は、小規模事業向けアプリを個人開発した経験をもとに、AIで複数モジュールを統合するときに意識したい設計手順をまとめました。

統合したかったアプリ

作りたかった流れは、次のようなものでした。

Gmailで受信した注文メールから注文内容を抽出する
    ↓
注文に必要な材料の在庫状況を確認する
    ↓
労働時間の負荷が偏らないよう、部署へ作業を指示する

手元には、すでに単体アプリとして動く3つのモジュールがありました。

  • モジュールA:Gmailの受信メールから受注内容を抽出し、正式な案件として登録する
  • モジュールB:在庫を把握し、増減を管理する
  • モジュールC:労働時間を把握し、過重負荷がないか確認する

一見すると、A → B → C の順につなげれば完成しそうです。しかし、実際にはそのまま接続できませんでした。

単純に接続すると何が起きるのか

たとえば、モジュールAは「案件」を管理しています。一方、モジュールBが管理しているのは「在庫」です。

AのデータをBへ渡すだけでは、次のような判断が必要になります。

  • 案件の商品と在庫の商品は同じ概念なのか
  • 案件数量と在庫の引当数量はどう対応するのか
  • 在庫が不足している案件を、どの状態として扱うのか
  • 在庫確認の結果から、作業量をどのように算出するのか
  • 部署への作業指示は、A・B・Cのどこが責任を持つのか

これらは実装上の問題というより、統合後のアプリに必要な仕様そのものです。

ここを決めないままAIに「A、B、Cを統合してください」と依頼すると、AIは既存コードを読みながら、接続に必要な仕様まで推測することになります。

その結果、AIが暗黙に新しいルールを作り、各モジュールの前提と噛み合わない、ちぐはぐな製品になりやすくなります。

まずベースモジュールを決める

改善策として、最初に「どのモジュールを統合後のアプリの土台にするか」を決めます。

候補としては、次のようなモジュールです。

  • 処理の起点になるモジュール
  • 共通基盤になるモジュール
  • 最も完成度が高いモジュール
  • 今後のアプリケーションの中心になるモジュール

今回の例では、Gmailから注文を受け取る処理が起点です。また、受注管理は他のモジュールに依存せず、単体で独立しています。そのため、モジュールAをベースにするのが自然です。

ここで、考え方を次のように変えます。

A・B・Cを統合する

ではなく、

モジュールAをベースにして、
モジュールBの在庫管理機能と、
モジュールCの労働時間管理機能を追加する

と考えます。

このように土台を決めると、何を残し、何を追加し、どこを接続仕様として新設するかを判断しやすくなります。

モジュール間のギャップを仕様化する

次に、モジュール間で接続が必要な機能を切り分けます。

受注管理と在庫管理の間には、たとえば次のような橋渡しが必要です。

モジュールA:受注管理
    │
    │ 案件
    ↓
────────────────────
統合に必要な仕様
- 商品コード
- 商品名
- 受注数量
- 納期
────────────────────
    ↓
モジュールB:在庫管理

重要なのは、モジュールAの内部実装をそのままモジュールBへ渡すことではありません。両者の間で必要になるデータ、責務、状態を明示します。

たとえば、案件を次のように定義します。

案件
├─ 商品コード
├─ 商品名
├─ 受注数量
└─ 納期

そして、在庫引当という中間概念を定義します。

在庫引当
├─ 商品コード
├─ 必要数量
├─ 現在庫
└─ 不足数量

この「在庫引当」が、受注管理と在庫管理をつなぐ仕様です。

AIに渡せる指示へ変換する

接続仕様が決まると、AIへの指示も具体的になります。

モジュールAの案件情報から商品コードと受注数量を取得する。
モジュールBの在庫管理機能を使って在庫引当を作成する。
不足数量を計算し、不足がある場合は案件に「在庫不足」状態を記録する。
既存の受注登録処理と在庫更新処理の責務は変更しない。

この指示には、少なくとも次の情報が含まれています。

  • 入力:案件の商品コードと受注数量
  • 接続先:在庫管理機能
  • 中間処理:在庫引当
  • 出力:不足数量
  • 状態変更:案件を「在庫不足」にする
  • 制約:既存モジュールの責務を不用意に変えない

AIに設計判断を丸投げではなく、人が決めた統合仕様を実装させる形に変えることができます。

統合は「直接接続」ではなく段階的に進める

統合の流れは、次のようになります。

ポイントは、A・B・Cを直接つなげないことです。

各モジュール
    ↓
機能を切り分ける
    ↓
ギャップを整理する
    ↓
データ・責務・状態を仕様化する
    ↓
ベースモジュールへ必要な機能を追加する
    ↓
テスト・調整する

この段階を設けることで、AIが一度に理解・判断しなければならない不確定要素を減らせます。

まとめ

複数モジュールをAIで統合するとき、「すべてのコードを渡して統合してください」と依頼する方法には限界があります。

各モジュールが独立したアプリとして完成しているほど、それぞれに固有の設計思想、データ構造、状態管理の前提があります。

統合で重要なのは、モジュール本体を無理につなぐことではありません。モジュールの間にある、まだ存在しない概念やルールを仕様として定義することです。

  • 統合後のベースモジュールを決める
  • 必要な機能だけを切り出す
  • モジュール間のデータ・責務・状態を定義する
  • 接続仕様をAIへの具体的な実装指示に変換する
  • 小さく追加して、テストと調整を繰り返す

AIは実装を大きく加速できます。しかし、統合の境界にある仕様まで推測させると、意図しない設計が入り込みやすくなります。

だからこそ、人が「モジュール間にどんな橋をかけるのか」を先に決めることが、AIを使った統合開発では特に重要だと感じています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?