付録の一覧

株式会社明正 様|AI業務内製化 1DAY合宿 例題1 手順書

案件メールを貼り付けると、
案件台帳に1行増える。

上から順に読んで、そのとおりに進めてください。貼るもの・押すボタンは、すべてこのページに入っています。 画面の見た目がこのページと違っていたら、探し回らずに手を挙げてください。すぐに伺います。

これからつくるもの

やることは1つだけです。Outlook に届いている輸出依頼のメールをコピーして、n8n に貼り付けます。 すると、そのメールに書かれている内容が自動で読み取られて、Google スプレッドシートの案件台帳に1行追加されます。

① メール
Outlook に届いた
輸出依頼のメール
② n8n と Claude
貼り付けると
中身を読んで項目に分ける
③ 案件台帳
スプレッドシートに
1行追加される
この例題でいちばん大事なこと 完成させることより、「メールの、どの文字が、どの列に入ったのか」を目で追うことです。 そこが分かると、他の業務でも同じことができるようになります。

Step 0|どのメールを使うか

当日は、お預かりしている5案件のうち MASS360008(輸出案件・当社にて本船手配) のスレッドを使います。 このスレッドは何往復もしていますが、使うのは いちばん下にある、最初の依頼メール です。

 MASS360008 のスレッド(新しい順)
M
M商事 相澤様
RE: <6/19搬入>【通関・輸出依頼】… 請求書の送付依頼
6/30
石
石田(明正)
RE: <6/19搬入>… ドラフト再送・本船動静のご連絡
6/29
M
M商事 相澤様
RE: <6/19搬入>… 荷受人住所の“street”を削除してください
6/26
石
石田(明正)
RE: <6/19搬入>… BOOKING完了のご案内
6/17
M
M商事 相澤様
RE: <6/19搬入>… このスケジュールでスペース確認をお願いします
6/15
石
石田(明正)
RE: <6/19搬入>… 候補船のご案内(OPT.1 / OPT.2)
6/8
M
M商事 相澤様これを使います
<6/19搬入>【通関・輸出依頼】【CIF】MTS-226399 / …
6/8

図1 スレッドのいちばん下(=いちばん古い6/8のメール)が、新しい案件の依頼メールです。ここに案件の条件が全部書かれています。

なぜ、いちばん下のメールなのか 案件は「依頼」から始まります。依頼メールには、荷受人・建値・積地・揚地・貨物・コンテナサイズなど、 台帳に載せたい情報がひととおり書かれています。 2通目以降は「その後どうなったか」の連絡なので、まずは起点となる1通目から始めます。

Step 0-2|使うメールの全体像

これが今日貼り付けるメールです。実物を開いて、同じものが表示されているか確かめてください。

 Outlook
<6/19搬入>【通関・輸出依頼】【CIF】MTS-226399 / 〇〇 MOTOR (VIETNAM) CORPORATION
差出人相澤様(M商事株式会社 横浜支店 海外営業課)
宛先石田 海斗(明正)
CC増田、東海林、佐々木(明正)/河村様、三沢様(M商事)
日時2026年6月8日(月)14:29
株式会社明正 石田様 平素よりお世話になっております。 M商事の相澤です。 下記内容にて、輸出のご手配をお願いいたします。 通関書類等は準備ができ次第ご送付いたします。 ターゲットスケジュールをご連絡ください。 【荷受人】 〇〇 MOTOR (VIETNAM) CORPORATION 【輸送】 CIF POL : YOKOHAMA, JAPAN POD : HOCHIMINH, VIETNAM 【貨物】 *6/19 ㈱明正 出田町営業所様 納入 リフロー炉 (SOLSYS-8031) 装置本体:L3,650×D855×H1,410mm 1t →木枠梱包済みで納入  20 ft FCLで手配をお願いいたします。 以上、何卒宜しくお願い申し上げます。
※ 本資料上では、お取引先様・荷受人様の社名と連絡先を伏せています。当日は実物のメールをそのままお使いいただきます。

図2 貼り付けるメールの全体。署名部分(会社の住所・電話)は貼り付けても構いません。AIが読み飛ばします。

Step 0-3|どの文字が、どの列に入るのか

ここがこの例題の心臓部です。同じメールに色を付けました。 この色の付いた部分が、そのままスプレッドシートの列に入っていきます。先にこの対応を目で見ておいてください。

 どこが読み取られるか
<6/19搬入>【通関・輸出依頼】【CIF】MTS-226399 / 〇〇 MOTOR (VIETNAM) CORPORATION
差出人相澤様(M商事株式会社 横浜支店 海外営業課)
日時2026年6月8日(月)14:29
株式会社明正 石田様 平素よりお世話になっております。 M商事の相澤です。 下記内容にて、輸出のご手配をお願いいたします。 通関書類等は準備ができ次第ご送付いたします。 ターゲットスケジュールをご連絡ください。 【荷受人】 〇〇 MOTOR (VIETNAM) CORPORATION 【輸送】 CIF POL : YOKOHAMA, JAPAN POD : HOCHIMINH, VIETNAM 【貨物】 *6/19 ㈱明正 出田町営業所様 納入 リフロー炉 (SOLSYS-8031) 装置本体:L3,650×D855×H1,410mm 1t →木枠梱包済みで納入  20 ft FCLで手配をお願いいたします。 以上、何卒宜しくお願い申し上げます。
日付 受信日時・搬入日
貨物 荷受人・品名・数量重量・梱包・納入先
輸送条件 建値・POL・POD・コンテナ
依頼事項 何を求められているか・要返信
案件情報 依頼元・担当者・依頼種別・参照番号

図3 色の付いた18か所が、スプレッドシートの18列に入ります。件名の中にも情報が入っている点に注目してください(搬入日・依頼種別・建値・参照番号・荷受人)。

Step 0-4|出来上がりの形

このメールを1回貼り付けると、台帳はこうなります。これがゴールです。

 案件台帳(Google スプレッドシート)
受信日時依頼元担当者依頼種別荷主参照番号荷受人建値積地(POL)揚地(POD)
22026-06-08 14:29M商事株式会社相澤様通関・輸出依頼MTS-226399〇〇 MOTOR (VIETNAM) CORPORATIONCIFYOKOHAMA, JAPANHOCHIMINH, VIETNAM
品名数量・重量梱包コンテナ搬入日納入先依頼されていること要返信期限
2リフロー炉(SOLSYS-8031)1台 L3,650×D855×H1,410mm / 1t木枠梱包済み20ft FCL ×12026-06-19㈱明正 出田町営業所ターゲットスケジュールの連絡要記載なし

図4 列が18あるので、上下2段に分けて表示しています。実際は横に1行で並びます。

手順

ここから実際の作業です。全部で6ステップ、40分ほどを見込んでいます。

1
書き込み先のスプレッドシートを作る
5分

Google スプレッドシートを新規作成します。ブラウザのアドレス欄に sheets.new と入力して Enter を押すと、新しいシートがすぐ開きます。

やること

① 新しいスプレッドシートを開く
② 左上のいちばん端のセル(A1)をクリックする
③ 下のブロックをコピーして、そのまま貼り付ける

A1 に貼り付ける(タブ区切り・18列に分かれます)
受信日時	依頼元	担当者	依頼種別	荷主参照番号	荷受人	建値	積地(POL)	揚地(POD)	品名	数量・重量	梱包	コンテナ	搬入日	納入先	依頼されていること	要返信	期限
ここが崩れると、あとで全部動きません 列名は、このあと n8n から名前で呼び出します。1文字でも違うと、その列が空のまま書き込まれます。 貼り付けたあと、A1 から R1 まで、18個の列名が横に並んでいるかを必ず目で確認してください。 縦に並んでしまった場合は、貼り付け直してください。

最後に、画面上部の「無題のスプレッドシート」をクリックして、案件台帳 という名前に変えておきます。

2
n8n にワークフローを貼り付ける
5分

n8n を開いて、右上の Create Workflow から新しいワークフローを作ります。 何も置かれていない広い画面(キャンバス)が出てきます。

やること

① 下のブロックの「コピー」を押す
② n8n の何もない画面の上でクリックしてから、⌘+V(Windows は Ctrl+V)を押す
③ 4つの四角(ノード)が並べば成功です

n8n のキャンバスに貼り付ける
{
  "name": "案件メール → 案件台帳",
  "nodes": [
    {
      "parameters": {
        "formTitle": "案件メールを貼り付ける",
        "formDescription": "Outlook のメールをコピーして、下の欄に貼り付けてください。",
        "formFields": {
          "values": [
            { "fieldLabel": "件名", "requiredField": true },
            { "fieldLabel": "本文", "fieldType": "textarea", "requiredField": true }
          ]
        },
        "options": {}
      },
      "id": "n1",
      "name": "メールを貼り付ける",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.2,
      "position": [0, 0]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=あなたは国際物流の営業事務担当です。次の依頼メールを読み、案件台帳に載せる項目を抜き出してください。\n\n必ず次の JSON だけを返してください。前後に説明文を書かないでください。\n読み取れない項目は空文字にしてください。推測で埋めないでください。\n\n{\n  \"依頼元\": \"差出人の会社名\",\n  \"担当者\": \"差出人の氏名(敬称付き)\",\n  \"依頼種別\": \"通関・輸出依頼 / 通関・輸入依頼 / 見積依頼 / 連絡 のいずれか\",\n  \"荷主参照番号\": \"件名や本文にある取引先側の管理番号\",\n  \"荷受人\": \"CONSIGNEE の正式名称\",\n  \"建値\": \"CIF / FOB / EXW など\",\n  \"積地\": \"POL。都市名と国名\",\n  \"揚地\": \"POD。都市名と国名\",\n  \"品名\": \"貨物の名称と型式\",\n  \"数量重量\": \"個数・寸法・重量をまとめて\",\n  \"梱包\": \"木枠 / パレット / 裸 など\",\n  \"コンテナ\": \"20ft FCL / 40HQ / LCL など。本数も\",\n  \"搬入日\": \"YYYY-MM-DD 形式。年がなければ受信年を補う\",\n  \"納入先\": \"搬入先の営業所名や倉庫名\",\n  \"依頼されていること\": \"先方が求めているアクションを1文で\",\n  \"要返信\": \"要 または 不要\",\n  \"期限\": \"返信や対応の期限。書かれていなければ 記載なし\"\n}\n\n--- 件名 ---\n{{ $json['件名'] }}\n\n--- 本文 ---\n{{ $json['本文'] }}",
        "options": {}
      },
      "id": "n2",
      "name": "Claudeに読ませる",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.5,
      "position": [240, 0]
    },
    {
      "parameters": { "options": {} },
      "id": "n3",
      "name": "Claude",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.3,
      "position": [280, 200]
    },
    {
      "parameters": {
        "jsCode": "const t = $input.first().json.text || $input.first().json.output || '';\nconst m = t.match(/\\{[\\s\\S]*\\}/);\nconst d = m ? JSON.parse(m[0]) : {};\nconst pad = (n) => String(n).padStart(2, '0');\nconst now = new Date();\nreturn [{ json: {\n  '受信日時': `${now.getFullYear()}-${pad(now.getMonth()+1)}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}`,\n  '依頼元': d['依頼元'] || '',\n  '担当者': d['担当者'] || '',\n  '依頼種別': d['依頼種別'] || '',\n  '荷主参照番号': d['荷主参照番号'] || '',\n  '荷受人': d['荷受人'] || '',\n  '建値': d['建値'] || '',\n  '積地(POL)': d['積地'] || '',\n  '揚地(POD)': d['揚地'] || '',\n  '品名': d['品名'] || '',\n  '数量・重量': d['数量重量'] || '',\n  '梱包': d['梱包'] || '',\n  'コンテナ': d['コンテナ'] || '',\n  '搬入日': d['搬入日'] || '',\n  '納入先': d['納入先'] || '',\n  '依頼されていること': d['依頼されていること'] || '',\n  '要返信': d['要返信'] || '',\n  '期限': d['期限'] || ''\n} }];"
      },
      "id": "n4",
      "name": "列に整える",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [480, 0]
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": { "__rl": true, "value": "", "mode": "list" },
        "sheetName": { "__rl": true, "value": "", "mode": "list" },
        "columns": {
          "mappingMode": "autoMapInputData",
          "value": {},
          "matchingColumns": []
        },
        "options": {}
      },
      "id": "n5",
      "name": "台帳に1行追加",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [720, 0]
    }
  ],
  "connections": {
    "メールを貼り付ける": { "main": [[{ "node": "Claudeに読ませる", "type": "main", "index": 0 }]] },
    "Claudeに読ませる": { "main": [[{ "node": "列に整える", "type": "main", "index": 0 }]] },
    "Claude": { "ai_languageModel": [[{ "node": "Claudeに読ませる", "type": "ai_languageModel", "index": 0 }]] },
    "列に整える": { "main": [[{ "node": "台帳に1行追加", "type": "main", "index": 0 }]] }
  },
  "pinData": {}
}

貼り付けると、画面はこうなります。

メールを
貼り付ける
入力画面
Claudeに
読ませる
項目を抜き出す
列に整える
18列に並べる
台帳に
1行追加
スプレッドシート
Claude
AIモデル

図5 4つのノードが左から右に一列に並びます。下にぶら下がっている小さい「Claude」は、どのAIを使うかを指定する部品です。

貼り付けても何も出てこないとき キャンバスの何もないところを一度クリックしてからもう一度貼り付けてください。 文字入力欄にカーソルが入っていると、そこに文字として貼られてしまいます。
3
Claude とスプレッドシートをつなぐ
7分

貼り付けたばかりのノードには、赤い三角の警告マークが付いています。「どのアカウントを使うか」がまだ決まっていないためです。2か所だけ設定します。

① Claude をつなぐ

下にぶら下がっている Claude のノードをダブルクリック → Credential to connect with の欄を開き、講師が用意したものを選びます。一覧に出てくるので、新規作成は不要です。

② スプレッドシートをつなぐ

台帳に1行追加 のノードをダブルクリックして、上から順に選びます。

・Credential … 講師が用意したものを選ぶ
・Document … From list のまま、Step 1 で作った 案件台帳 を選ぶ
・Sheet … シート1 を選ぶ
・Mapping Column Mode … Map Automatically を選ぶ

Map Automatically とは 「前のノードから来たデータの名前と、シートの列名が同じなら、勝手に入れてくれる」という設定です。 Step 1 で貼った18個の列名と、ワークフローが作る18個の名前が同じなので、1つずつ指定する必要がありません。 ここで列が出てこない場合は、Step 1 の列名がずれています。
4
メールをコピーする
3分

Outlook に戻ります。Step 0 で確認した 6/8 の依頼メール を開いてください。

やること

① 件名をドラッグして選択 → ⌘+C でコピー
② n8n のフォーム(次のStepで開きます)の「件名」欄に貼る
③ 本文に戻り、「株式会社明正 石田様」から「以上、何卒宜しくお願い申し上げます。」までを選択してコピー
④ フォームの「本文」欄に貼る

どこまで選べばいいか、迷ったら 多めに選んで構いません。署名も、その下の過去のやりとりも、一緒に貼って大丈夫です。 AIが必要なところだけ拾います。逆に、足りないと読み取れないので、迷ったら本文全体を選んでください (⌘+A で本文を全部選べます)。
5
実行する
5分

n8n の画面に戻り、下の方にある Execute workflow を押します。 すると 「メールを貼り付ける」 の画面(フォーム)が別のタブで開きます。

 n8n Form
案件メールを貼り付ける
Outlook のメールをコピーして、下の欄に貼り付けてください。
件名 *
<6/19搬入>【通関・輸出依頼】【CIF】MTS-226399 / 〇〇 MOTOR…
本文 *
株式会社明正 石田様
平素よりお世話になっております。
M商事の相澤です。
下記内容にて、輸出のご手配をお願いいたします。…
Submit

図6 この画面に貼り付けて Submit を押します。ここが「メールを n8n に入れる」ところです。

Submit を押すと、n8n の画面に戻って処理が走ります。4つのノードすべてに緑のチェックが付けば成功です。

メールを
貼り付ける
1 item
Claudeに
読ませる
1 item
列に整える
1 item
台帳に
1行追加
1 item

図7 緑のチェックが4つ。どこかで赤くなったら、そのノードをダブルクリックすると理由が書いてあります。読めなければ手を挙げてください。

スプレッドシートを開いて確かめる
5分

Step 1 で作った 案件台帳 を開いてください。2行目に、いま貼り付けたメールの内容が入っています。

ここを見てください

図3の色分けを思い出しながら、メールのどの文字が、どの列に入ったかを1つずつ目で追ってください。 「件名の中の 6/19 が、搬入日の列に入っている」——これが分かれば、この例題の目的は達成です。

間違っているところを探してください たぶん、いくつか間違っています。それが正常です。 たとえば搬入日が「6/19」のまま年が入っていない、コンテナの本数が抜けている、依頼種別が思っていたものと違う——など。 どこが間違っていたかをメモしておいてください。次のステップで直します。

ここから先(時間が余ったら)

6ステップが終わった方は、こちらに進んでください。ここからが本当の練習です。

+
残り4件のメールも入れて、台帳を育てる
10分

同じ手順で、他の4案件の依頼メールも貼り付けてください。CBC340018・CBC350011・OCEN360005・OWEL36J003 です。 それぞれスレッドのいちばん下のメールを使います。

 5件入れたあとの案件台帳
依頼元依頼種別荷主参照番号建値積地(POL)揚地(POD)コンテナ要返信
2M商事株式会社通関・輸出依頼MTS-226399CIFYOKOHAMA, JAPANHOCHIMINH, VIETNAM20ft FCL ×1要
3C社通関・輸出依頼P7406-01————要
4C社通関・輸出依頼—CIF———要
5O社通関・輸入依頼—FOB———要
6W社通関・輸出依頼—CIF———要

図8 5件入れると、「—」(空欄)がどこに多く出るかが見えてきます。空欄が多い項目ほど、メールの書き方がばらついている項目です。

ここが、この例題のいちばんの収穫です 5件並べると、どの項目が安定して取れて、どの項目が取れないかが一目で分かります。 「取れない項目 = そもそもメールに書かれていない項目」であることも多く、 これは AI の問題ではなく、依頼フォーマットの問題だと分かります。ここに気づけると、業務そのものが変えられます。
+
AIへの指示を直して、精度を上げる
15分

Claudeに読ませる のノードをダブルクリックすると、長い日本語の文章が入っています。これが「AIへの指示(プロンプト)」です。 間違っていた箇所を、ここに書き足して直します。

書き足しの例(そのまま使えます)

・日付が「6/19」のように年がない場合は、メールの受信年を補って YYYY-MM-DD にしてください。
・コンテナは本数まで書いてください。本数の記載がなければ「×1」としてください。
・依頼種別は、件名の【 】の中に書かれている言葉を優先してください。
・荷受人は CONSIGNEE の正式名称をそのまま書き、日本語訳はしないでください。
・弊社の営業所名(出田町営業所など)は「納入先」に入れ、「荷受人」には入れないでください。

書き足したら、もう一度 Execute workflow から同じメールを入れ直して、直ったかどうかを確かめます。 直っていなければ、書き方を変えてもう一度。この繰り返しが「AIに仕事を教える」という作業の実体です。

指示を書くときのコツ 「ちゃんとやって」では直りません。「何を」「どういう形で」出してほしいかを、 新人に教えるときと同じ具体さで書いてください。例を1つ添えると、さらに安定します。 (例:「20 ft FCL → 20ft FCL ×1 と書く」)

うまくいかないとき

貼り付けてもノードが出てこない
キャンバスの何もないところを一度クリックしてから、もう一度貼り付けてください。また、コピーが途中で切れていることもあるので、「コピー」ボタンを押し直してから貼り直してください。
ノードが赤くなって止まる
赤いノードをダブルクリックすると、下に理由が出ます。多いのは Credential(アカウント)が選ばれていないケースです。Step 3 に戻って、2か所とも選ばれているか確認してください。
スプレッドシートに行は増えたが、中身が空
Step 1 の列名と、ワークフローが作る名前がずれています。「積地(POL)」の括弧が半角になっているかなど、1文字ずつ見比べてください。いちばん確実なのは、Step 1 の貼り付けブロックをもう一度コピーして貼り直すことです。
「列に整える」で止まる
AIが JSON 以外の文章を返したときに起こります。もう一度実行すると通ることが多いです。何度も起こる場合は、貼り付けた本文が短すぎる(情報が足りない)可能性があります。本文全体を選んで貼り直してください。
読み取り結果が毎回少し違う
AIの性質上、まったく同じにはなりません。だからこそ、金額や数量のように「違っていては困る項目」は人が見るという線引きが必要になります。この話は、夕方のセッションで扱います。

この例題で身につけたこと

午後の応用ワークで、同じ型が使えます やったことは、たった3つです。①情報を貼り付ける入口を作る ②AIに「何を、どんな形で出すか」を指示する ③出てきたものを置き場所に送る。 入口をメールから別のものに変えても、置き場所をシートから別のものに変えても、この3つの形は変わりません。 午後は、この型のままご自身の業務に当てはめていただきます。

株式会社明正 様|AI業務内製化 1DAY合宿 例題2 手順書

2つの書類を貼り付けると、
食い違ったところだけが出てくる。

例題1の続きです。新しく覚えるのは「2つの入力を扱う」と「条件で枝を分ける」の2つだけ。 ノードの置き方・つなぎ方は例題1と同じですので、操作を覚え直す必要はありません。

これからつくるもの

社内指示書(SI)と、インボイス・パッキングリスト(IV/PL)を貼り付けます。 すると、同じ項目が左右に並び、一致・不一致・片方にしかないに仕分けられて、 不一致が1件でもあれば「要確認リスト」が出てきます。

① 書類を2つ
社内指示書 と
インボイス・パッキングリスト
② n8n と Claude
同じ項目を並べて
一致・不一致を仕分ける
③ 要確認リスト
食い違った行だけを
人が見る
この例題でいちばん大事なこと 完成させることより、AIが「不一致」と言ってきたもののうち、どれが本当の間違いで、どれが運用上は正しいのかを見分けることです。 ここが分かると、他の書類でも同じ線が引けるようになります。

Step 0|使う書類と、先に見えている答え

当日は CBC350011(輸出・インドヨウ素) の通関用書類2点を使います。 こちらで先に突き合わせてみたところ、反応の異なる食い違いが一通り含まれていました。1案件で論点がすべてカバーできます。

 CBC350011:社内指示書 × インボイス/パッキングリスト(先に突き合わせた結果)
項目
社内指示書(SI)
インボイス/PL
判定
インボイス番号
P7406-01
P7406-01
一致
本船・航海番号
WAN HAI 370 / S023
WAN HAI 370/S023
一致
積地 / 揚地
YOKOHAMA / NHAVA SHEVA
YOKOHAMA / NHAVA SHEVA
一致
個数
200 FIBER DRUMS
200 FIBER DRUM
一致
総重量
10,600.00 KGS
10,600.00 KG(200×@53.00)
一致
容積
7.200 M3
7.200 M3(200×0.036)
一致
出港日
2025.12.16(入港 12.15)
Sailing on/about
DEC. 13, 2025
不一致
荷受人の住所
…JHAGADIA, GIDC ESTATE,
JHAGADIA GUJARAT
…JHAGADIA, GIDC ESTATE,
JHAGADIA, GIDC ESTATE,
JHAGADIA
GUJARAT
不一致
荷受人
TO THE ORDER OF
HDFC BANK LTD
ESKAY IODINE
PVT. LTD.
要判断
数量
10,600.00 KGS
10,000.00 KG
要判断
金額
CIF USD 0.00
USD 735,000.00
要判断
搬入日
2025.12.09備考:CY搬入 12/11 or 12 → 12/10 確定
(記載なし)
要判断
HS CODE
28012000
(記載なし)
片方のみ

図1 赤が本当の食い違い、黄が「AIは不一致と言うが、運用上は正しいかもしれない」もの。黄をどう扱うかが、この例題の本題です。

先に答えを見てしまって大丈夫です この表を先にお見せしているのは、「AIが正しく見つけられるか」を確かめていただくためです。 当日は、皆さまが作ったワークフローの出力と、この表を見比べます。 AIがここに挙がっていないものまで「不一致」と言ってきたら、それが誤検知です。

手順

全部で5ステップ、45分ほどを見込んでいます。例題1のワークフローは残したまま、新しく1本作ります。

1
書類のテキストを用意する
7分

配布したPDFを開いて、文字を選択してコピーします。PDFのまま貼ることもできますが、まずはテキストで確実に動かします。

やること

① CBC350011 MASTER SI のPDFを開き、⌘+A → ⌘+C で全体をコピー → メモ帳などに貼って置いておく
② CBC350011 IV PL のPDFも同じようにコピーして、別のところに貼っておく

文字が選択できないPDFだったら スキャンして作られたPDFは、文字を選択できません。その場合は手を挙げてください。 読み取れるかどうかを、その場で一緒に試します。「どこまで読めて、どこから読めないか」を知っていただくのも、この時間の目的のひとつです。
2
n8n にワークフローを貼り付ける
5分

n8n で新しいワークフローを作り、何もない画面の上で ⌘+V します。例題1と同じやり方です。

n8n のキャンバスに貼り付ける
{
  "name": "書類の突き合わせ",
  "nodes": [
    {
      "parameters": {
        "formTitle": "書類を2つ貼り付ける",
        "formDescription": "社内指示書と、インボイス・パッキングリストの中身を貼り付けてください。",
        "formFields": {
          "values": [
            { "fieldLabel": "社内指示書", "fieldType": "textarea", "requiredField": true },
            { "fieldLabel": "インボイスとパッキングリスト", "fieldType": "textarea", "requiredField": true }
          ]
        },
        "options": {}
      },
      "id": "m1",
      "name": "書類を貼り付ける",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.2,
      "position": [0, 0]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=あなたは国際物流の通関担当です。2つの書類を突き合わせ、同じ項目を並べて一致しているかを判定してください。\n\n【大事なルール】\n- どちらが正しいかは判断しないでください。事実として「違っている」ことだけを報告してください。\n- 片方にしか書かれていない項目は status を only にしてください。\n- 書類ごとに呼び名が違っても、同じ意味の項目は同じ item にまとめてください。\n  例: 数量/Quantity、総重量/Gross Weight/KGS、容積/Measurement/M3、本船/Vessel、積地/Port of Loading\n\n次の項目を必ず確認してください。\nインボイス番号 / 荷受人 / 通知先 / 本船名と航海番号 / 積地 / 揚地 / 品名 / 数量 / 総重量 / 容積 / 個数と荷姿 / 出港日 / 金額 / L/C番号 / HSコード / 荷印\n\n必ず次の JSON だけを返してください。前後に説明文を書かないでください。\n{\n  \"rows\": [\n    { \"item\": \"項目名\", \"si\": \"社内指示書の値\", \"iv\": \"インボイス側の値\", \"status\": \"match\" または \"diff\" または \"only\" }\n  ]\n}\n\n--- 社内指示書 ---\n{{ $json['社内指示書'] }}\n\n--- インボイスとパッキングリスト ---\n{{ $json['インボイスとパッキングリスト'] }}",
        "options": {}
      },
      "id": "m2",
      "name": "Claudeに突き合わせさせる",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.5,
      "position": [240, 0]
    },
    {
      "parameters": { "options": {} },
      "id": "m3",
      "name": "Claude",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.3,
      "position": [280, 200]
    },
    {
      "parameters": {
        "jsCode": "const t = $input.first().json.text || $input.first().json.output || '';\nconst m = t.match(/\\{[\\s\\S]*\\}/);\nconst d = m ? JSON.parse(m[0]) : { rows: [] };\nconst rows = d.rows || [];\nconst ng = rows.filter(r => r.status !== 'match');\nreturn [{ json: {\n  '確認が必要な件数': ng.length,\n  '要確認リスト': ng,\n  '一致した項目': rows.filter(r => r.status === 'match').map(r => r.item),\n  '全体': rows\n} }];"
      },
      "id": "m4",
      "name": "食い違いを数える",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [480, 0]
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "loose", "version": 2 },
          "conditions": [
            {
              "id": "c1",
              "leftValue": "={{ $json['確認が必要な件数'] }}",
              "rightValue": 0,
              "operator": { "type": "number", "operation": "gt" }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "m5",
      "name": "食い違いがあるか",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [700, 0]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "a1", "name": "結果", "value": "要確認", "type": "string" },
            { "id": "a2", "name": "件数", "value": "={{ $json['確認が必要な件数'] }}", "type": "string" },
            { "id": "a3", "name": "中身", "value": "={{ JSON.stringify($json['要確認リスト'], null, 2) }}", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "m6",
      "name": "要確認リストを作る",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [920, -100]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "b1", "name": "結果", "value": "確認不要(すべて一致)", "type": "string" }
          ]
        },
        "options": {}
      },
      "id": "m7",
      "name": "確認不要",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [920, 100]
    }
  ],
  "connections": {
    "書類を貼り付ける": { "main": [[{ "node": "Claudeに突き合わせさせる", "type": "main", "index": 0 }]] },
    "Claudeに突き合わせさせる": { "main": [[{ "node": "食い違いを数える", "type": "main", "index": 0 }]] },
    "Claude": { "ai_languageModel": [[{ "node": "Claudeに突き合わせさせる", "type": "ai_languageModel", "index": 0 }]] },
    "食い違いを数える": { "main": [[{ "node": "食い違いがあるか", "type": "main", "index": 0 }]] },
    "食い違いがあるか": { "main": [[{ "node": "要確認リストを作る", "type": "main", "index": 0 }], [{ "node": "確認不要", "type": "main", "index": 0 }]] }
  },
  "pinData": {}
}
書類を
貼り付ける
入力2つ
Claudeに
突き合わせさせる
項目を並べる
食い違いを
数える
件数を出す
食い違いが
あるか
分岐
要確認リスト
/確認不要
結果

図2 右から2つ目が今回はじめて出てくる「分岐」です。件数が1件以上なら上、0件なら下に流れます。

3
Claude をつないで、実行する
8分
やること

① 下にぶら下がっている Claude のノードをダブルクリックし、例題1と同じクレデンシャルを選ぶ
② Execute workflow を押す
③ 開いたフォームに、Step 1 でコピーした2つの書類をそれぞれ貼り付けて Submit

今回はスプレッドシートに書き出しません。n8nの画面で結果を見ます。いちばん右のノードをクリックすると、右側に結果が出ます。

うまくいっていれば 「要確認リストを作る」のほうに1件流れて、中身に食い違いが並んでいます。 件数は、図1の赤と黄を合わせたあたりになるはずです。ぴったり同じにはなりません。
4
図1と見比べて、誤検知を探す
15分

ここが本題です。AIが出した要確認リストと、図1の表を見比べてください。次の3つに分けます。

① ちゃんと見つけた ・出港日が3日ずれている
・荷受人の住所に同じ語句が重複している
人の目が最も滑りやすいところです。ここはAIに任せて構いません
② 不一致と言ったが、実は正しい ・荷受人が「銀行」と「ESKAY社」で違う
・数量が 10,600 と 10,000 で違う
・金額が 0.00 と 735,000 で違う
これが誤検知です。次のステップで除外します
なぜ「実は正しい」のか ── 当日ご一緒に確かめます 荷受人:L/C取引のため、指示書は銀行指図式(TO THE ORDER OF ○○銀行)になり、実際の荷受人は NOTIFY 欄に入ります。書類上は別の名前になるのが正しい形です。
数量:10,000 は正味重量、10,600 は総重量(200本 × 53kg)。別のものを比べています。
金額:指示書側は金額を入れない運用のようです。実際、他の案件でも 0.00 のままでした。

③ 見つけられなかったものがあれば、それも書き出してください。AIが苦手な形が分かります。

除外するルールを書き足す
10分

Claudeに突き合わせさせる のノードを開き、指示文に「これは不一致として報告しなくてよい」というルールを書き足します。

書き足しの例(そのまま使えます)

・荷受人が「TO THE ORDER OF ○○銀行」の場合は、L/C取引のため正常です。
 この場合は、指示書の NOTIFY 欄とインボイス側の荷受人を比べてください。
・数量は、正味重量と総重量を区別してください。別の項目として扱い、
 正味どうし・総重量どうしで比べてください。混ぜて比べないでください。
・社内指示書の金額が 0.00 の場合は、未記入とみなし、不一致として報告しないでください。
・日付は表記の違い(2025.12.16 と DEC. 16, 2025)を同じものとして扱ってください。

書き足したら、もう一度 Execute workflow から同じ書類を入れ直して、要確認リストが2件前後まで減るかを確かめます。

ここまでできたら完成です ゼロ件を目指さないでください。本当に確認すべきものが残っている状態が正解です。 「何件まで減らせば、毎回ちゃんと見てもらえるか」——この感覚が、夕方の「AIに任せる/人が必ず見る」の1枚につながります。

ここから先(時間が余ったら)

+
別の案件に当てて、通用するか確かめる
10分

CBC350011 向けに調整したものを、そのまま別の案件に当ててみます。

  • OWEL36J003(危険品・輸出)── 書類の構成が変わります。こちらには、数量と重量の計算が合わない箇所があります。200本×50kgのような検算は、人の目ではまず見つけられません。AIが見つけられるか試してください
  • OCEN360005(輸入)── 輸入は項目立てが変わります。そのままでは通用しない箇所が出ます
ここが、持ち帰ってからの精度の上げ方そのものです 1案件で完成させたものが他案件でどこまで使えるか。この確かめ方を知っておくと、 持ち帰ったあとにご自身で育てていけます。

うまくいかないとき

「食い違いを数える」で止まる
AIが JSON 以外の文章を返したときに起こります。もう一度実行すると通ることが多いです。何度も起こる場合は、貼り付けた書類が長すぎる可能性があります。署名や約款の部分を削って、表の部分だけを貼り直してください。
項目がほとんど「片方のみ」になってしまう
2つの書類で項目の呼び名が違うため、AIが別のものとして扱っています。指示文の「同じ意味の項目は同じ item にまとめてください」の下に、御社での呼び名の対応を書き足してください(例:「搬入日とCY搬入日は別の項目です」)。
毎回、結果が少しずつ違う
AIの性質上、まったく同じにはなりません。だからこそ、金額や数量のように「違っていては困る項目」は人が見るという線引きが必要になります。この話は夕方に扱います。
分岐の下側(確認不要)にばかり流れる
AIがすべて「一致」と判定しています。指示文の項目リストが効いていない可能性がありますので、「出港日」「荷受人」など、図1で食い違っていた項目名を指示文に明記してみてください。

この例題で身につけたこと

午後の応用ワークで、同じ型が使えます 例題1で「読む」、例題2で「照らし合わせる」。そして今回、条件で処理を分けることも覚えました。 入口を別の書類に変えても、比べる項目を変えても、この形は変わりません。 午後は、この型のままご自身の業務に当てはめていただきます。