Skip to main content

ワークフローで活用する(モデルレビュー編)

本ページでは、『Next Design のモデル情報』と『外部ファイルに定義したレビュー観点』を組み合わせ、AIエージェントによるモデルレビューと Excel への結果出力を自動化する方法を解説します。

本ページの位置づけ

本ページでは、ワークフロー、変数、ループ処理、ツール実行などの基本操作を理解していることを前提としています。
初めてワークフローを作成する場合は、先にワークフローで活用する(基本編)を確認してください。

今回のゴール

Next Design のモデルを観点別にレビューするワークフローの構築方法を学び、以下のことができる状態を目指します。

  • Next Design モデルやレビュー観点など、複数の情報を組み合わせた繰り返し処理を作成できる
  • Next Design のモデル情報と外部ファイルの情報を、AIエージェントへの入力として利用できる
  • AIエージェントの出力を整形し、外部へ出力できる

処理の流れ

本ページでは、以下の流れで解説します。

  1. モデルレビューに必要なツールとAIエージェントの準備
  2. 複数のモデルとレビュー観点を組み合わせてレビューするワークフローの作成
  3. 作成したワークフローの実行とレビュー結果の確認

事前準備

本ページのチュートリアルを実施するには、以下の環境が必要です。

ツールバージョン
Agentiqs1.1 以降
Next Design4.0.14.50616 以降

また、本チュートリアルでは、 「サンプルデータ 」の以下のファイルを使用します。
C:\agentiqsSampleData\tutorial\next-design-integration\workflow-model-review\input

  • 組込みソフト開発.nproj:レビュー対象の Next Design プロジェクト
  • reviewPointList.json:レビュー観点

本チュートリアルと同じ操作を行う場合は、あらかじめサンプルデータの環境を構築してください。

詳細は「サンプルデータの環境構築方法」を参照してください。

1. 利用するツールと AIエージェントを準備する

ツールの作成

  1. [ツール] -[新規作成] から、ワークフローで利用する以下のツールを追加します。

    info

    すでに対象のツールを作成している場合は、この手順は不要です。

    ツール用途
    File Accessレビュー観点ファイルの読み込みに利用します。
    Next DesignAIエージェントで Next Design のモデル情報を取得するために利用します。
    Next Design Functionsワークフローで Next Design を操作するために利用します。
    Microsoft Excelレビュー指摘を Excel に出力する際に利用します。
  2. File Access ツールのベースディレクトリにレビュー観点ファイルがあるフォルダを指定します。
    サンプルデータを利用する場合は、C:\agentiqsSampleData\tutorial を指定してください。

AIエージェントの準備

  1. [エージェント] - [新規作成]を実行し、エージェントギャラリーから『Next Design モデル編集』を選択します。

  2. レビューエージェントの基本情報を設定します。

    設定項目
    設定項目必須設定内容詳細説明
    タイトルNext Designモデルレビューエージェント後から判別できる、わかりやすい名前にしてください。
    説明Next Designの設計モデルを対象に、単一のレビュー観点だけで
    記載不足・矛盾・不整合・不明確さを判定し、結果をJSON配列のみで返すレビュー専用エージェントです。
    システムプロンプト下記「システムプロンプトの設定内容」を記載してください。レビューに必要な情報を設定
    • システムプロンプトの設定内容(テキスト欄右上の「□」をクリックしてコピーしてください。)

      システムプロンプトを変更する場合

      出力項目のキー名を変更すると、後続のExcel出力処理も変更する必要があります。
      プロンプトを修正する場合、合わせて後続のワークフローも修正してください。

    あなたは設計書レビュー専用エージェントである。入力された「Next Designの設計モデルの内容」と「単一のレビュー観点」に対してレビューを実施し、結果をJSON配列のみで出力すること。

    【入力】
    - review_point: レビュー観点
    - target_model: レビュー対象のモデル情報

    【レビュー方針】
    - review_point のみを基準に判定し、それ以外の観点で指摘しない。
    - target_modelに記載された事実のみを根拠に判断し、推測しない。
    - 問題の有無は target_model内の記述に基づいて判定する。
    - 該当箇所が見当たらない場合も、その事実を根拠に結果を出力する。
    - 同一内容の重複指摘はしない。

    【出力ルール】
    - 出力はJSON配列のみとする。
    - 各要素は以下のキーを必ず含むこと。
    - "location"
    - "description"
    - "viewPoint"
    - "priority"
    - "status"
    - キー名は固定とし、値はすべて文字列とする。
    - JSON以外の文字は出力しない。

    【各項目】
    - "location": 指摘箇所を特定する情報として、対象モデルのパス情報とフィールド名。パス情報は入力で渡されたモデル(target_model)からのパスとすること。IDなど人が見てもわからないものは記載しない。
    - 例:
    target_model = "目標車速演算"で、その配下の"目標車速設定/タップアップ"モデルの識別子フィールドに指摘がある場合、下記の出力となる。
    "
    モデル:目標車速演算/目標車速設定/タップアップ
    フィールド:識別子
    "

    - "description": 指摘内容を記載する。何が不足・不整合・不明確かを明示する。指摘はですます調で統一し、読みやすいように改行をいれること。指摘がない場合は「<指摘なし> 確認済み・問題なし」とする。
    - "viewPoint": 入力のreview_pointのTitleを設定する。
    - "priority": "高" / "中" / "低" のいずれかのみ。
    - "status": 指摘ありは "Open"、指摘なしは "Closed"。

    【判定ルール】
    - review_point に照らして、記載不足、矛盾、不整合、不明確さ、不備が確認できる場合は指摘ありとする。
    - review_point に照らして問題が確認できない場合は"<指摘なし>"を出力する。
    - 判定に必要な情報が不足している場合は指摘ありとし、不足内容をdescriptionに具体的に記載する。

    【出力件数】
    - review_point に対して複数の独立した問題がある場合は複数件出力すること。
    - 問題が1件もない場合でも、"<指摘なし>"を1件出力すること。

    【禁止事項】
    - review_point 以外の観点での評価
    - 根拠のない推測
    - 抽象的すぎる指摘
    - 同じ意味の重複指摘
    - キー不足、表記ゆれ、JSON以外の出力

2. ワークフローを作成する

本ワークフローは、以下の構成にすることで Next Designで選択したコンポーネント配下のソフトウェアユニットを、『AIエージェントがレビュー観点ごとにレビュー』し、『レビュー結果を整形してExcelに一覧を出力』します。

  1. 入力パラメータを設定する
  2. レビュー観点ファイルを読み込む
  3. レビュー対象のソフトウェアユニットを取得する
  4. Excel出力の準備を行う
  5. ソフトウェアユニットごとに、配下のモデル情報を取得する
  6. レビュー観点ごとにAIエージェントへレビューを依頼する
  7. レビュー結果を整形してExcelへ出力する
tip

実運用で活用する場合は、対象プロジェクトのメタモデル構造やレビュー方法に合わせて『取得対象』、『レビュー観点』、『出力形式』を変更してください。

1. 入力パラメータを設定する

[ワークフロー設定] - [入出力パラメータ] - [入力パラメータ]を開き、レビュー観点ファイルのパスを入力パラメータとして追加してください。

パラメータの設定項目
設定項目設定値説明
変数名reviewPointsFilePath後から判別できる、わかりやすい名前にしてください。
説明レビュー観点ファイルのパスを保持します。変数の用途が分かるように設定してください。
デフォルト値※のパス入力しておくことで、ワークフロー実行時に毎回入力する手間を省けます。

C:\agentiqsSampleData\tutorial\next-design-integration\workflow-model-review\input\reviewPointList.json

2. レビュー観点ファイルを読み込む

"ツール実行"をドラッグ&ドロップで配置し、プロパティを設定してください。

プロパティの設定項目

指定されたレビュー観点ファイルを読み込みます。

プロパティ必須設定項目詳細説明
タイトルレビュー観点ファイルの読み込み後から判別できる、わかりやすい名前にしてください。
説明指定されたレビュー観点ファイルを読み込みます。ステップで実施する内容です。
ツール名File Accessレビュー観点ファイルを読み込むためのツールです。
関数名ReadFileテキストファイルを読み込みます。
path{{reviewPointsFilePath}}入力パラメータで指定した観点ファイルのパスです。
結果格納先reviewPoints読み込んだ観点ファイルの内容を格納します。

3. レビュー対象のソフトウェアユニットを取得する

  1. 選択中のコンポーネントモデルIDを取得します。
    "ツール実行"をドラッグ&ドロップで配置し、プロパティを設定してください。

    プロパティの設定項目

    ナビゲータで現在選択されている、レビュー対象のコンポーネントモデルのIDを取得します。

    プロパティ必須設定項目詳細説明
    タイトル対象コンポーネントモデルID取得後から判別できる、わかりやすい名前にしてください。
    説明ナビゲータで現在選択されているレビュー対象の
    コンポーネントモデルIDを取得します。
    ステップで実施する内容です。
    ツール名Next Design FunctionsNext Designのモデル情報を取得するためのツールです。
    関数名GetNavigatorSelectedModelId選択中モデルのIDを取得します。
    結果格納先componentModelIdコンポーネントモデルIDを格納します。
  2. 配下のソフトウェアユニットを取得します。
    "ツール実行"をドラッグ&ドロップで配置し、プロパティを設定してください。

    プロパティの設定項目

    選択中のコンポーネントモデルIDを起点に、レビュー対象となるソフトウェアユニットを取得します。

    プロパティ必須設定項目詳細説明
    タイトルソフトウェアユニット一覧の取得後から判別できる、わかりやすい名前にしてください。
    説明選択中のコンポーネントモデル配下の
    ソフトウェアユニットを取得します。
    ステップで実施する内容です。
    ツール名Next Design FunctionsNext Designのモデル情報を取得するためのツールです。
    関数名GetChildren子要素を取得します。
    parentId{{componentModelId}}選択中のコンポーネントモデルIDを指定します。
    fieldNameSoftwareUnitソフトウェアユニット配下の要素を取得します。
    結果格納先unitModels取得したユニット一覧を格納します。

4. Excel出力の準備を行う

  1. 出力用変数を初期化します。
    "変数設定"をドラッグ&ドロップで配置し、プロパティを設定してください。

    プロパティの設定項目

    Excelへの出力行とレビュー結果の通し番号を初期化します。

    プロパティ必須設定項目詳細説明
    タイトルExcel出力用の変数を初期化後から判別できる、わかりやすい名前にしてください。
    説明Excelへの出力行とレビュー結果の通し番号を
    初期化します。
    ステップで実施する内容です。
    設定方法Overwrite現在値を上書きします。
    変数名excelRowCursorExcelへ出力する現在行です。
    2ヘッダ行の次の行から出力を開始します。
    変数名issueCountレビュー結果の通し番号です。
    0レビュー結果の通し番号の初期値です。
  2. Excelシートを追加します。
    "ツール実行"をドラッグ&ドロップで配置し、プロパティを設定してください。

    プロパティの設定項目

    レビュー指摘を出力するシートを追加します。

    プロパティ必須設定項目詳細説明
    タイトルレビュー指摘シートの追加後から判別できる、わかりやすい名前にしてください。
    説明「レビュー指摘」シートを追加します。
    既にシートが存在する場合は何も行いません。
    ステップで実施する内容です。
    ツール名Microsoft ExcelExcelを操作するためのツールです。
    関数名AddSheetシートを追加します。
    sheetNameレビュー指摘追加するシート名です。
    結果格納先result実行結果を格納します。
    成功判定格納先isSuccess成功可否を格納します。
  3. ヘッダ行を出力します。
    "ツール実行"をドラッグ&ドロップで配置し、プロパティを設定してください。

    プロパティの設定項目

    レビュー指摘シートの1行目に一覧のヘッダを出力します。

    プロパティ必須設定項目詳細説明
    タイトルExcelのヘッダ行出力後から判別できる、わかりやすい名前にしてください。
    説明レビュー指摘シートの1行目に一覧のヘッダを出力します。ステップで実施する内容です。
    ツール名Microsoft ExcelExcelへ書き込みます。
    関数名SetCellValues指定セルへ値を書き込みます。
    rangeAddressレビュー指摘!A1:F1ヘッダ行の出力先です。
    values[["ID","該当箇所","指摘内容","観点","優先度","ステータス"]]1行目に出力するヘッダです。
    wrapTexttrue必要に応じて折り返し表示を設定します。
    applyBorderstrue表として見やすくするため罫線を設定します。

5. ソフトウェアユニットごとに、配下のモデル情報を取得する

  1. ユニットモデルごとのループ処理を設定します。
    "ループ処理"をドラッグ&ドロップで配置し、プロパティを設定してください。

    プロパティの設定項目

    レビュー対象のユニットモデルを1件ずつ取り出して後続処理に渡します。

    プロパティ必須設定項目詳細説明
    タイトルユニットモデルごとのループ処理後から判別できる、わかりやすい名前にしてください。
    説明レビュー対象のユニットモデルを1件ずつ取り出して後続処理に渡します。ステップで実施する内容です。
    反復対象{{unitModels}}レビュー対象のユニット一覧です。
    アイテム変数unit現在処理中のユニットを格納します。
    最大実行回数3ループの上限数を設定することができます。対象件数に応じて設定してください。
    ここでは、デバッグ用に3を設定します。
  2. ユニット配下の全要素取得を設定します。
    "ツール実行"をドラッグ&ドロップで"ユニットモデルごとのループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    レビュー対象ユニットの全子孫モデルを取得します。

    プロパティ必須設定項目詳細説明
    タイトルユニット配下の全要素取得後から判別できる、わかりやすい名前にしてください。
    説明レビュー対象ユニットの全子孫モデルを取得します。ステップで実施する内容です。
    ツール名Next Design FunctionsNext Designのモデル情報を取得するためのツールです。
    関数名GetAllChildren対象配下の全要素を取得します。
    parentId{{unit.Id}}現在処理中のユニットIDを指定します。
    結果格納先unitElements取得した全要素を格納します。

6. レビュー観点ごとにAIエージェントへレビューを依頼する

  1. レビュー観点ごとのループ処理を設定します。
    "ループ処理"をドラッグ&ドロップで"ユニットモデルごとのループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    レビュー観点の一覧を1件ずつ取り出して後続処理に渡します。

    プロパティ必須設定項目詳細説明
    タイトルレビュー観点ごとのループ処理後から判別できる、わかりやすい名前にしてください。
    説明レビュー観点の一覧を1件ずつ取り出して後続処理に渡します。ステップで実施する内容です。
    反復対象{{reviewPoints}}レビュー観点の一覧です。
    アイテム変数reviewPoint現在処理中の観点を格納します。
    最大実行回数3ループの上限数を設定することができます。ループのレビュー観点数に応じて設定してください。
    ここでは、デバッグ用に3を設定します。
  2. AIレビュー実行を設定します。
    "AIエージェント"をドラッグ&ドロップで"レビュー観点ごとのループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    ユニット情報とレビュー観点を指定のAIエージェントへ渡してレビュー結果を取得します。

    プロパティ必須設定項目詳細説明
    タイトルAIレビュー実行後から判別できる、わかりやすい名前にしてください。
    説明ユニット情報とレビュー観点を指定のAIエージェントに渡してレビュー結果を取得します。ステップで実施する内容です。
    エージェント名Next DesignモデルレビューエージェントAIエージェントの準備」で作成したレビュー用AIエージェントです。
    AIのモデル名gpt-5.2利用するAIモデルを指定してください。
    ユーザーメッセージ下記を設定するユニット情報とレビュー観点を渡します。
    結果格納先issuesレビュー結果を格納します。

    ユーザーメッセージの内容:

    入力の Next Designモデルをレビュー観点に沿ってレビューし、レビュー結果をJSON形式で出力せよ。
    レビュー対象モデル:{{unit}}
    レビュー観点:{{reviewPoint}}
    子モデル一覧:{{unitElements}}

7. レビュー結果を整形してExcelへ出力する

  1. issues のJSON整形を設定します。
    "Pythonスクリプト"をドラッグ&ドロップで"レビュー観点ごとのループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    AIレビュー結果の issues を JSON配列として解析し、後続処理で扱える形に整えます。

    AIエージェントのシステムプロンプトで出力をJSON形式に限定していても、利用するAIモデルや応答内容によっては、
    Markdown のコードブロックや外側の引用符が付く場合があります。
    このスクリプトは、それらを除去して JSON配列として扱える形式に補正します。

    プロパティ必須設定項目詳細説明
    タイトルissuesのJSON整形後から判別できる、わかりやすい名前にしてください。
    説明AIレビュー結果のissuesをJSON配列として解析し後続処理で扱える形に整えます。ステップで実施する内容です。
    Pythonコード以下のコードを貼り付けるJSON配列として解析できるように補正します。

    Pythonコード:

    import re
    import json

    raw = getattr(vars, 'issues', None)

    def try_parse(text):
    try:
    return json.loads(text)
    except ValueError:
    return None

    def strip_code_fence(text):
    if text is None:
    return text

    text = text.strip()
    fence = re.compile(
    r'^\s*```(?:json)?\s*([\s\S]*?)\s*```\s*$',
    re.IGNORECASE
    )
    m = fence.match(text)
    return m.group(1).strip() if m else text

    def strip_wrapping_quotes(text, max_times=2):
    s = text.strip()

    for _ in range(max_times):
    if len(s) >= 2 and (
    (s[0] == '"' and s[-1] == '"') or
    (s[0] == "'" and s[-1] == "'")
    ):
    s = s[1:-1].strip()
    else:
    break

    return s

    if isinstance(raw, list):
    vars.issues = raw

    else:
    s = '' if raw is None else str(raw)
    s = s.strip()

    s = strip_code_fence(s)
    s = strip_wrapping_quotes(s)

    parsed = try_parse(s)

    if parsed is None:
    try:
    s2 = bytes(s, 'utf-8').decode('unicode_escape')
    except UnicodeDecodeError:
    s2 = s

    s2 = strip_code_fence(s2)
    s2 = strip_wrapping_quotes(s2)

    parsed = try_parse(s2)
    else:
    s2 = s

    if parsed is None:
    for candidate in (s2, s):
    start = candidate.find('[')
    end = candidate.rfind(']')

    if start != -1 and end != -1 and end > start:
    parsed = try_parse(candidate[start:end + 1])
    if parsed is not None:
    break

    if parsed is None:
    raise Exception(
    'issues を JSON として解析できませんでした。出力の形式を確認してください。'
    )

    if not isinstance(parsed, list):
    raise Exception('issues は JSON配列である必要があります。')

    vars.issues = parsed
  2. 指摘一覧のループ処理を設定します。
    "ループ処理"をドラッグ&ドロップで"レビュー観点ごとのループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    AIエージェントが返した指摘一覧を1件ずつ取り出して後続処理に渡します。

    プロパティ必須設定項目詳細説明
    タイトル指摘一覧のループ処理後から判別できる、わかりやすい名前にしてください。
    説明AIエージェントが返した指摘一覧を1件ずつ取り出して後続処理に渡します。ステップで実施する内容です。
    反復対象{{issues}}AIエージェントが返した指摘一覧です。
    アイテム変数issue1件ずつの指摘データを保持します。
    最大実行回数3想定件数に応じて設定してください。
    ここでは、デバッグ用に3を設定します。
  3. レビュー結果の通し番号を更新します。
    "変数設定"をドラッグ&ドロップで"指摘一覧のループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    指摘ごとに、カウント変数をインクリメントします。

    プロパティ必須設定項目詳細説明
    タイトル指摘数カウント変数をインクリメント後から判別できる、わかりやすい名前にしてください。
    説明指摘ごとにカウント変数をインクリメントします。ステップで実施する内容です。
    設定方法Overwrite現在値を上書きします。
    変数名issueCount指摘の通し番号です。
    {{issueCount+1}}現在値に1を加算します。
  4. Excelへの指摘行出力を設定します。
    "ツール実行"をドラッグ&ドロップで"指摘一覧のループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    現在の指摘データをレビュー指摘シートの対象行へ出力します。

    プロパティ必須設定項目詳細説明
    タイトルExcelへの指摘行出力後から判別できる、わかりやすい名前にしてください。
    説明現在の指摘データをレビュー指摘シートの対象行へ出力します。ステップで実施する内容です。
    ツール名Microsoft ExcelExcelへ書き込みます。
    関数名SetCellValues指定セルへ値を書き込みます。
    rangeAddress{{"レビュー指摘!A" + excelRowCursor + ":F" + excelRowCursor}}現在行に1件分を出力します。
    values下記参照指摘1件分の値を出力します。
    wrapTexttrue長文を折り返して表示します。
    applyBorderstrue罫線を設定します。

    valuesの値:

    [["{{issueCount}}",{{issue.location|to_json}},{{issue.description|to_json}},{{issue.viewPoint|to_json}},{{issue.priority|to_json}},{{issue.status|to_json}}]]
  5. Excel行番号を更新します。
    "変数設定"をドラッグ&ドロップで"指摘一覧のループ処理"内に配置し、プロパティを設定してください。

    プロパティの設定項目

    次の指摘を次行へ出力できるようにExcelの行番号を1つ進めます。

    プロパティ必須設定項目詳細説明
    タイトルExcel行番号の更新後から判別できる、わかりやすい名前にしてください。
    説明次の指摘を次行へ出力できるようにExcelの行番号を1つ進めます。ステップで実施する内容です。
    設定方法Overwrite現在値を上書きします。
    変数名excelRowCursor更新対象の内部変数です。
    {{ excelRowCursor + 1 }}1行進めます。

3. ワークフローを実行する

作成したワークフローを実行します。

実行前に、対象モデルと入力ファイルの内容を確認してください。

レビュー対象モデルの選択状態やレビュー観点ファイルの形式が
ワークフローの想定と異なる場合、期待したレビュー結果を取得できないことがあります。

  1. Next Designのファイル(組込みソフト開発.nproj)を開き、対象のソフトウェアコンポーネントを選択します。 サンプルの場合:組込みソフト開発/ソフトウェアコンポーネント設計/APPレイヤ/車速偏差算出
  2. Excelを起動し、レビュー結果の出力先として使用するブックを開きます。
    • すでに指摘が記載されている場合は削除し、指摘がない状態としてください。
  3. ワークフロー右上の[実行]をクリックします。
  4. 「ワークフロー実行パラメータ」のダイログで[実行]をクリックします。
ループ処理の最大回数

ループ回数が多いと処理時間が長くなり、トークンの消費量も増加します。
今回はデバッグ用にループ回数を「3」に減らした手順にしています。
動作確認後に、本番用の回数に変更してください。

4. 実行結果を確認する

ワークフローが正常に完了すると、Excelのレビュー指摘シートにレビュー結果が出力されます。
以下の項目が出力されているか確認してください。

  • ID
  • 該当箇所
  • 指摘内容
  • 観点
  • 優先度
  • ステータス

次のステップ

本チュートリアルはサンプルケースです。

実運用に向けて以下を変更して活用してください。

  • レビュー観点ファイル:内容を差し替えることで、同じワークフロー構成のまま別観点のレビューにも利用できます。
  • 対象プロジェクトのメタモデル構造を確認し、対象モデルの階層やフィールド構成に合わせて、
    ワークフローのループ構造、フィールド名、モデル階層を変更してください。