研究報告書の参考文献の一覧を、社内の書式の規定と本文の引用番号に突き合わせて校正し、引用漏れ・番号の飛び・書式の不統一を審査の前に拾う
社内審査に出された研究報告書の原稿について、本文の引用番号と参考文献の一覧が対応しているかを確かめ、参考文献の1件ずつを社内の書式の規定に照らして校正します。直すべき箇所の一覧を、審査の前に著者へ返します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Power Automate/Python
- 対象業界
- 建設/製造
- 対象部門
- 研究開発
- 対象業務
- 内容確認・チェック
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 校正
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 研究員が原稿を Google ドキュメントで書き、審査依頼のフォームに原稿のURLを入れて送る
- 事務局の担当が原稿を開き、本文を頭から読みながら、引用番号を紙のメモに書き出していく
- 書き出した番号を参考文献の一覧と見比べ、一覧に無い番号、引用されていない文献、番号の飛びを探す
- 番号が最初に引用された順に並んでいるかを確かめる
- 参考文献を1件ずつ読み、社内の規定と見比べて、書き方の違うところに印を付ける
- 印を付けた箇所を、原稿にコメントとして書き込むか、メールで著者に伝える
- 著者が直した原稿を、もう一度同じ手順で確かめる
- 人研究員が審査依頼のフォームに原稿のURLを入れて送る
- 自動フォームの送信をきっかけに Apps Script が動き、原稿の本文を読む
- 自動本文から引用番号を拾い、範囲([5-7])を展開して、最初に引用された順に並べる
- 自動「参考文献」の見出しの後ろを一覧として切り出し、番号と文献の文字列に分ける
- 自動番号の対応を数える(一覧に無い引用、引用されていない文献、番号の飛び、引用順との違い)
- 自動参考文献を Claude API に渡し、1件ずつ種類を見分けて、社内の規定に照らして校正させる
- 自動番号の対応の結果と書き方の校正の結果を、指摘一覧のシートにまとめる
- 人事務局の担当が指摘一覧を見て、外す指摘と足す指摘を決める
- 自動確定した指摘を、著者へのメールの下書きにする
- 人担当が下書きを確かめて送る
- 自動著者が直した原稿でフォームを送り直すと、同じ手順で確かめ直す
各工程の詳しい説明を読む
- 研究員が原稿を Google ドキュメントで書き、審査依頼のフォームに原稿のURLを入れて送る
- 事務局の担当が原稿を開き、本文を頭から読みながら、引用番号を紙のメモに書き出していく
- 書き出した番号を参考文献の一覧と見比べ、一覧に無い番号、引用されていない文献、番号の飛びを探す
- 番号が最初に引用された順に並んでいるかを確かめる
- 参考文献を1件ずつ読み、社内の規定と見比べて、書き方の違うところに印を付ける
- 印を付けた箇所を、原稿にコメントとして書き込むか、メールで著者に伝える
- 著者が直した原稿を、もう一度同じ手順で確かめる
(a)番号を追う作業が長い。 2番目は、本文の「[3]」「[5-7]」「[2, 9]」を1つずつ拾う作業です。範囲で書かれた引用([5-7])を展開し忘れると、6番が「引用されていない」に見えます。 60件の文献がある報告書では、それだけで20分を超えます。
(b)見落としは番号の真ん中で起きる。 最初と最後の番号は気をつけて見ますが、途中で1つ飛んでいる、同じ文献が2つの番号で載っている、といったものは、目で追っていると通り過ぎます。 審査の後に読者から指摘されて分かることがあります。
(c)書き方の指摘が担当者ごとに違う。 「著者が4名以上なら筆頭著者と『ほか』」「Webのページには閲覧日」といった規定は、担当者によって見るところと見ないところがあります。 同じ書き方が、ある報告書では直され、別の報告書ではそのまま通っています。
(d)直した後の確認がもう一度ある。 著者が直すと番号がずれ、直した後の原稿をもう一度頭から追うことになります。 1本の報告書で2回、3回と同じ作業をくり返します。
- 【人】 研究員が審査依頼のフォームに原稿のURLを入れて送る
- 【自動】 フォームの送信をきっかけに Apps Script が動き、原稿の本文を読む
- 【自動】 本文から引用番号を拾い、範囲([5-7])を展開して、最初に引用された順に並べる
- 【自動】 「参考文献」の見出しの後ろを一覧として切り出し、番号と文献の文字列に分ける
- 【自動】 番号の対応を数える(一覧に無い引用、引用されていない文献、番号の飛び、引用順との違い)
- 【自動】 参考文献を Claude API に渡し、1件ずつ種類を見分けて、社内の規定に照らして校正させる
- 【自動】 番号の対応の結果と書き方の校正の結果を、指摘一覧のシートにまとめる
- 【人】 事務局の担当が指摘一覧を見て、外す指摘と足す指摘を決める
- 【自動】 確定した指摘を、著者へのメールの下書きにする
- 【人】 担当が下書きを確かめて送る
- 【自動】 著者が直した原稿でフォームを送り直すと、同じ手順で確かめ直す
5番目と6番目を分けているのが、この設計の要です。 番号の対応は数え上げの問題なので Apps Script の式で決め、AIの答えに左右されないようにします。 書き方の校正だけをAIに任せ、その結果も人が8番目で確かめます。
11番目で、直した後の確認の手間が消えます。 番号がずれても、もう一度数え直すのは Apps Script です。
02今回想定するシステム構成
審査依頼のフォーム(原稿の Google ドキュメントのURL) ▼【トリガー】フォームの送信 Google Apps Script ├── 原稿の本文を読む(DocumentApp) ├── 本文の引用番号を拾い、範囲を展開する ├── 参考文献の一覧を切り出す ├── 番号の対応を数える │ ① 一覧に無い引用 ② 引用されていない文献 │ ③ 番号の飛び・重なり ④ 引用順との違い ▼ Claude API ── 参考文献の1件ずつを社内の規定で校正する │ 種類(雑誌論文/図書/特許/規格/社内報告書/Web)の見分け │ 欠けている項目、並び・区切りの違い、直し方の案 ▼ 指摘一覧のシート ▼ 【事務局が確かめる】 ▼ Gmail ── 著者へのメールの下書き
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Python |
| 生成AI | Claude API(Messages API、構造化出力) | OpenAI API、Gemini API |
| 原稿 | Google ドキュメント | Microsoft 365 の文書 |
| 受付 | Google フォーム(審査依頼) | Microsoft Forms |
| 台帳 | Google スプレッドシート(審査の管理・指摘一覧) | Microsoft 365 のブック |
| メール | Gmail(著者への下書き) | Outlook |
新しく足すのは、社内の規定を「型」として書き出した1枚のシートだけです。 6種類の文献ごとに、項目の並び、区切りの記号、省略してよい項目を表にします。AIに渡す規定は、この表をそのまま文字にしたものです。 規定の文書を丸ごと渡すより、何を見ればよいかがはっきりします。
原稿は DocumentApp.openByUrl() で開き、本文を Body.getParagraphs() で段落ごとに読みます。 段落ごとに読むのは、「参考文献」の見出しの位置を段落の単位で見つけるためです。getText() で本文全体を1つの文字列として読むと、見出しと本文の区別がつきません。
Claude API の構造化出力は、output_config.format に type: "json_schema" と JSON Schema を渡す形です。 公式の説明では、オブジェクトには additionalProperties: false が必要で、minimum や maxLength のような数値・文字列の制約は使えないとされています。スキーマには型と enum と required だけを書きます。
03どうやって実装するのか
処理の起点を決める
審査依頼のフォームの送信を起点にします。 フォームの回答を受けるスプレッドシートに、インストール型の「フォーム送信時」のトリガーを付けます。送信のたびに1本ずつ動かし、まとめて夜に回すことはしません。 審査の日程は依頼の数日後に決まるので、指摘が早く返るほど著者が直す時間を取れます。
イベントの namedValues から、原稿のURLと依頼者を取ります。 namedValues は設問の名前と値の組なので、フォームの設問の並びを変えても壊れません。values(シートの並び順の値)で取ると、設問を1つ足しただけで別の欄を原稿のURLとして読みます。
インストール型のトリガーは作った人のアカウントで動きます。 原稿を開くにはそのアカウントに閲覧の権限が要るので、事務局の共有アカウントで作り、フォームの説明に「原稿をこのアカウントと共有してから送ってください」と書きます。 共有されていない原稿は、例外処理で依頼者に戻します。
直した原稿の再送も同じフォームから受けます。 フォームに「初回/再提出」の設問を置き、再提出のときは前回の指摘一覧と並べて、直ったもの・直っていないもの・新しく出たものに分けます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 原稿 | 研究報告書の本文と参考文献の一覧 | Google ドキュメント |
| 依頼の情報 | 依頼者、報告書の種類(研究報告書/技術報告)、初回か再提出か | フォームの回答 |
| 書式の規定の表 | 6種類の文献ごとの項目の並び、区切り、省略してよい項目、記入例 | 研究企画室のシート |
| 社内報告書の番号の一覧 | 保管庫に登録済みの報告書の番号と題名 | 報告書の管理シート |
| 前回の指摘一覧 | 再提出のときだけ | 指摘一覧のシート |
質を決めるのは、書式の規定の表の記入例です。 「著者名.論文名.誌名.発行年,巻(号),始ページ-終ページ.」と項目の並びだけを書くより、正しく書かれた1件の例を種類ごとに付けたほうが、AIの校正がそろいます。 例は社内の過去の報告書から、規定どおりのものを選びます。
社内報告書の番号の一覧を持つのは、社内の文献だけは実在を確かめられるからです。 「TR-2024-118」のような番号が保管庫に無ければ、番号の打ち間違いか、まだ登録されていない報告書です。 社外の論文の実在はこの構成では確かめません。
データの取得方法を決める
- フォームの回答から原稿のURLを取り、
DocumentApp.openByUrl()で開く getBody().getParagraphs()で段落を順に読み、見出しのスタイルで「参考文献」の段落を探す- その段落より前を本文、後ろを参考文献の一覧として分ける
- 本文の段落から、正規表現で角括弧の引用番号を拾う
- 一覧の段落を、先頭の番号([1]、1.、(1) など)で1件ずつに分ける
2番目で、見出しの文字列だけでなくスタイルも見ます。 本文の中に「参考文献[3]によれば」のような書き方があると、文字列だけで探すとそこを一覧の始まりと取り違えます。 見出しのスタイルが付いた段落を優先し、無ければ文字列で探して、どちらで見つけたかを指摘一覧に残します。
4番目の正規表現は、角括弧の中に数字・カンマ・ハイフン・空白だけが並ぶものに限ります。 「[mm]」「[注1]」のような単位や注記まで拾うと、存在しない番号が「一覧に無い引用」として出ます。拾った文字列は指摘一覧に残し、どの書き方を引用として読んだかを後から確かめられるようにします。
原稿の本文はAIに渡しません。 AIに渡すのは5番目で分けた参考文献の一覧と、書式の規定の表だけです。番号の対応は Apps Script の中で数え終わっているので、本文を外に出す理由がありません。
AIへ渡す前に整形する
- 引用番号の範囲を展開する … [5-7] は 5, 6, 7 に、[2, 9] は 2 と 9 にする。全角のハイフンや波ダッシュもそろえる
- 最初に引用された順を記録する … 番号ごとに、本文で初めて出た段落の位置を残す
- 一覧の番号を数値にそろえる … [1]、1.、(1)、全角の数字を同じ数値として読む
- 番号の対応を数える … 一覧に無い引用、引用されていない文献、番号の飛び、同じ番号の重なり、引用順との違い
- 同じ文献の重複の候補を拾う … 一覧のうち、文字列がほとんど同じ2件を候補にする(決めるのは人)
- 社内報告書の番号を照合する … 一覧の中の社内報告書の番号を、登録済みの番号の一覧と突き合わせる
1番目を間違えると、正しい原稿に大量の指摘が出ます。 範囲の展開を忘れると、[5-7] の6番が「引用されていない」になります。最初の数本の原稿で、Apps Script が拾った番号と、人が拾った番号を並べて確かめてください。
4番目の結果は、AIの校正とは別の欄に書きます。 番号の対応は式で出した事実で、AIの指摘と同じ欄に混ぜると、どちらが式でどちらがAIの判断なのかが見分けられなくなります。
AIに処理させる
させるのは、参考文献1件ずつについて、種類を見分け、社内の規定の型と比べて違うところを挙げ、直し方の案を書くことです。
| 見るもの | 何を確かめるか |
|---|---|
| 文献の種類 | 雑誌論文/図書/特許/規格/社内報告書/Web のどれか。見分けられなければ unknown |
| 欠けている項目 | 種類ごとの必須の項目(巻・号・ページ、出版社、公報の番号、規格の年、閲覧日など)が無いもの |
| 並びと区切り | 項目の順番、区切りの記号(ピリオド、カンマ、全角・半角) |
| 著者名の書き方 | 姓名の順、著者が多いときの省略の仕方 |
| 一覧の中での不統一 | 同じ誌名の書き方が文献ごとに違う(略称と正式名の混在など) |
最後の行は、1件ずつでは分からず、一覧全体を見て初めて分かるものです。 そのため、AIには一覧を1件ずつではなくまとめて渡し、文献ごとの指摘と一覧全体の指摘を分けて返させます。
| させないこと | 理由 |
|---|---|
| 番号の対応の判定 | Apps Script が数える。AIに数えさせると見落としが混ざる |
| 欠けている項目を埋める | 巻やページ、DOI を推測で埋めると、実在しない書誌が報告書に残る |
| 文献が実在するかの判断 | この構成では確かめられない |
| 原稿への書き込み | 直すのは著者 |
| 引用の仕方が適切かの判断 | 研究の中身の話で、審査員が見る |
2行目が、この構成でいちばん大事な線引きです。 欠けている巻・号を「おそらく 12(3)」と埋める案を出すと、著者がそのまま採ることがあります。直し方の案には、項目の場所を空欄で示すだけにします。
指示内容を固定する
あなたは研究所の審査事務局で、研究報告書の参考文献の書き方を校正する担当です。
渡された参考文献の一覧を、社内の書式の規定の表に照らして校正してください。
【すること】
1. 文献1件ごとに、種類を次から1つ選ぶ:
journal(雑誌論文)/book(図書)/patent(特許)/standard(規格)/
internal(社内報告書)/web(Webのページ)/unknown(見分けられない)
2. その種類の規定の型と比べ、違うところを issues に挙げる:
missing_field(必須の項目が無い)/order(項目の順番が違う)/
punctuation(区切りの記号が違う)/author(著者名の書き方が違う)
3. 違うところごとに、直し方の案を suggestion に書く
4. 一覧全体を見て、書き方がそろっていないもの(同じ誌名の略称と正式名の混在など)を
list_issues に挙げる
【厳守事項】
- 番号の対応(引用されているか、番号が飛んでいないか)は判断しないでください。
- 欠けている項目の値を推測で埋めないでください。巻・号・ページ・発行年・DOI・URL・
閲覧日が書かれていなければ、suggestion では「(巻)」のように空欄で示してください。
- 文献が実在するか、内容が正しいかを判断しないでください。
- 規定の表に無い基準で指摘しないでください。好みの書き方を勧めないでください。
- 種類が見分けられない文献は unknown とし、issues は空にしてください。
- 違うところが無い文献は issues を空にしてください。指摘を作り出さないでください。
- original には、渡された文字列をそのまま写してください。
【書式の規定の表】
{style_rules}
【参考文献の一覧】(番号と文字列)
{references}
「欠けている項目を推測で埋めない」を、項目の名前を並べて書きます。 「推測しない」とだけ書くと、よく知られた論文の巻やページを、記憶から埋めた案を出すことがあります。 それが合っていても、書誌を確かめたのは著者ではなくなります。
「指摘を作り出さない」も明記します。 校正の役割を与えると、規定どおりの文献にも何か直すところを探します。指摘が無いことも答えの1つだと書いておきます。
出力形式を固定する
次の形のJSONで受け取ります。 スキーマは output_config.format に渡し、オブジェクトにはすべて additionalProperties: false を付けます。
{
"references": [
{
"ref_no": 12,
"type": "journal | book | patent | standard | internal | web | unknown",
"original": "",
"issues": [
{ "kind": "missing_field | order | punctuation | author",
"detail": "ページ範囲が無い", "suggestion": "…,12(3),(始ページ)-(終ページ)." }
]
}
],
"list_issues": [
{ "ref_nos": [3, 17], "detail": "同じ誌名が略称と正式名で書かれている" }
]
}
JSONで受ける1つ目の理由は、指摘一覧のシートに1行1指摘で並べられることです。 ref_no で番号の対応の結果と同じ行にまとめ、事務局が文献ごとに「番号の問題」「書き方の問題」を横に並べて見られます。
2つ目は、kind で指摘の種類を数えられることです。 毎月の指摘を kind ごとに数えると、どの規定が守られにくいかが分かります。missing_field の閲覧日ばかりなら、規定の書き方より、研究員への周知が先です。
Apps Script は、番号の対応の結果を次の形でシートに書きます。
| 指摘一覧の列 | 中身 |
|---|---|
| 番号 | 参考文献の番号(一覧に無い引用は本文の番号) |
| 番号の対応 | uncited(引用されていない)/missing_entry(一覧に無い)/gap(飛び)/duplicate_no(重なり)/order(引用順と違う) |
| 書き方の指摘 | AIの kind・detail・suggestion |
| 出どころ | script(式で出した)/ai(AIの校正) |
| 事務局の判断 | 空欄。担当が「伝える/外す」を入れる |
「出どころ」の列は必ず持ちます。 式で出した指摘は外す理由がほとんど無く、AIの指摘は外すことがあります。同じ確かめ方をしないためです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 審査依頼のフォーム | フォーム送信時のトリガー | 原稿のURLと依頼者を受け取る |
| Google ドキュメント | DocumentApp.openByUrl() | 原稿を読む(書き込まない) |
| Claude API | UrlFetchApp.fetch() | 参考文献の校正 |
| 指摘一覧のシート | 書き出し | 番号の対応と書き方の指摘 |
| Gmail | 下書きの作成 | 著者へのお知らせ |
原稿には書き込みません。 コメントを自動で付けることもできますが、事務局が外した指摘まで原稿に残ってしまいます。 確定した指摘だけをメールで伝え、直すのは著者です。
メールは下書きまでにします。 送るのは事務局の担当です。審査の前の指摘は、研究員にとっては差し戻しと同じ重さがあります。 誤った指摘を自動で送ると、事務局への信頼が下がります。
人が確認する
- 番号の対応の指摘を確かめる … 出どころが
scriptのものです。uncitedは、図や表の説明の中で引用されていることがあるので、原稿で確かめます - AIの書き方の指摘を確かめる … 規定の表に照らして当たっているかを見ます。外したものは「外す」とし、理由を一言残します
unknownの文献を見る … 種類が見分けられなかったものは、規定のどの型に寄せるかを事務局が決めます- 重複の候補を見る … 同じ文献が2つの番号で載っていないかを確かめます
- メールの下書きを確かめて送る
1番目の注意は、本文の読み方の限界から来ています。 Apps Script が読むのは本文の段落で、図や表のキャプションに書かれた引用は、原稿の作り方によっては拾えません。 その場合は uncited が出ます。
再提出の原稿では、見る範囲を絞ります。 前回の指摘のうち「直っていない」と出たものと、新しく出た指摘だけを見ます。直ったと出たものは、一覧で件数を確かめるだけにします。 番号がずれた原稿でも、比べるのは文献の文字列なので、前回の指摘と今回の指摘は対応が付きます。
目標は、1本15分です。 指摘一覧を上から見て、判断の列を埋め、下書きを直して送るまでです。15分で終わらない原稿は、たいてい unknown が多いか、一覧の切り出しに失敗しています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 原稿を開けない(共有されていない) | 依頼者に「事務局のアカウントと共有してから送り直してください」と自動で返す |
| 「参考文献」の見出しが見つからない | 校正をせず、事務局へ回す。見出しの名前(引用文献、References)の候補を規定の表に足す |
| 本文に引用番号が1つも無い | 著者名と年で引用する書き方の可能性。番号の対応は数えず、書き方の校正だけ行う |
| 一覧を1件ずつに分けられない | 番号の無い一覧。事務局へ回す |
| 参考文献が非常に多い | 一覧を分けて Claude API に渡し、list_issues は最後にまとめて人が見る |
Claude API の応答が途中で切れる(max_tokens) | スキーマに合わないことがあるので、その結果は使わず、分けて渡し直す |
Claude API が応答を断る(refusal) | 結果を使わず、事務局へ回す |
| 1回6分の実行時間に近づく | 番号の対応の結果まで書き出して終わり、校正は次の実行で続ける |
| 同じ原稿が続けて二度送られる | 原稿のURLと送信の時刻で見分け、10分以内の二度目は処理しない |
| 一覧に社内報告書の番号があるが登録が無い | internal の指摘に「保管庫に登録の無い番号」と添え、著者に確かめてもらう |
上の2行は、運用の最初の月に集中して出ます。 原稿の書き方が研究員ごとに違い、見出しの付け方と共有の手順がそろうまでは、事務局に回る件数が多くなります。 2か月目からは減ります。
記録を残す
- 依頼ごとに、原稿のURL、依頼者、初回か再提出か、読んだ時点の原稿の版の日時
- Apps Script が拾った引用番号と、切り出した参考文献の一覧
- 番号の対応の結果と、Claude API の返したJSONの全文
- 事務局が外した指摘と、その理由
- 送ったメールの日時と、再提出の後の「直った/直っていない」の結果
kindごとの月の件数
4つ目が、規定の表を直す材料になります。 同じ種類の指摘が毎月外されているなら、規定の表の書き方が実際の運用とずれています。 表を直すと、AIの指摘も同時にそろいます。
原稿の版の日時を残すのは、Google ドキュメントが送信の後も書き換えられるからです。 指摘と原稿の対応を後から確かめるには、どの時点の原稿を読んだかが要ります。
04実装レベルの3段階
半自動化で、1本50分が25分程度になります。 番号の対応を数える作業がなくなりますが、原稿のURLを渡して動かす手間と、指摘をメールにまとめる手間が残ります。本格構成で15分になり、この段階が本記事の想定です。 半自動化の段階を1か月は回してください。 その間に、見出しの付け方が研究員ごとに違うこと、範囲の引用の書き方に全角と半角が混ざることなど、原稿の側の揺れが一通り見えます。 そこを前処理に入れてから本格構成に進むと、事務局に回る件数が最初から少なく済みます。 再提出の比較を本格構成に入れているのは、直した後の確認がいちばん嫌われる作業だからです。 番号がずれた原稿をもう一度頭から追う作業がなくなると、事務局は、新しく出た指摘だけを見れば済みます。
05工数削減シミュレーション
導入後 36件 × 15分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 研究所・技術開発部門で、研究報告書や技術報告を毎月数十本、社内審査に通している製造業・建設業。原稿を Google ドキュメントで書き、審査の依頼を Google フォームで受けている場合。参考文献の書き方の社内規定があるのに、審査の前に事務局が1件ずつ目で見て直しており、報告書によって書き方がそろっていない場合。
- 原稿を Word のファイルや紙で回しており、Google ドキュメントに載せられない場合(取り込みの仕組みを別に作る必要があります)。参考文献の書き方を投稿先の学会ごとに変えており、社内の規定が1つに決まっていない場合。文献の中身が正しいか(その論文が本当にその主張をしているか)まで確かめたい場合(この構成が見るのは書き方と番号の対応だけです)。
07最小構成で試す方法
- 過去に審査を通った研究報告書から5本を選ぶ(参考文献の多いものと、Webのページや特許が混ざるものを入れる)
- 書式の規定を、6種類の文献ごとの「項目の並び+記入例1件」の表に書き出す
- 手元のAIサービスの画面に、規定の表と1本分の参考文献の一覧を貼り付ける
- 「規定の表に照らして、1件ずつ違うところと直し方を挙げてください。書かれていない項目を推測で埋めないでください。違うところが無ければ無いと書いてください」と指示する
- 当時、事務局が付けた指摘と見比べる
番号の対応は、この段階ではAIに見させません。 最小構成で確かめたいのは書き方の校正が当たるかだけです。番号の対応は、半自動化で Apps Script を書いたときに確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の事務局と同じ指摘が出た | Apps Script と API の連携に進む |
| 規定に無い好みの指摘が多い | 指示に「規定の表に無い基準で指摘しない」を足す。構成は有効 |
| 欠けた巻やページを埋めた案が出た | 指示の書き方で直る。この確認は必ず行う |
| 種類の見分けが外れる | 規定の表の記入例を増やす |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| [5-7] の6番が「引用されていない」になる | 範囲の展開を前処理に入れる。全角のハイフン・波ダッシュもそろえる |
| 本文の「参考文献[3]」を一覧の始まりと取り違える | 見出しのスタイルで探し、見つけ方を記録する |
| 図や表のキャプションの引用が拾えない | uncited は人が原稿で確かめる |
| 欠けた巻やページを推測で埋めた案が出る | 指示に項目の名前を並べて禁じ、案では空欄で示させる |
| 規定どおりの文献にも指摘が出る | 「指摘を作り出さない」「規定に無い基準で指摘しない」を指示に書く |
| 番号の指摘とAIの指摘が混ざる | 「出どころ」の列で分ける |
| 著者名と年で引用する原稿が来る | 番号の対応を数えず、書き方の校正だけにする |
| 共有されていない原稿で止まる | 依頼者に自動で返す。フォームの説明に共有の手順を書く |
| 送信の後に原稿が書き換えられる | 読んだ時点の版の日時を残す |
| 誤った指摘がそのまま著者に届く | メールは下書きまで。 送るのは事務局 |
| 規定の表が古く、外す指摘が毎月同じ | 外した理由を数え、規定の表を直す |
上の2行が、運用の最初に出る失敗のほとんどです。 どちらも番号の拾い方の問題で、AIの問題ではありません。 最初の数本で人が拾った番号と並べれば、すぐに見つかります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 研究報告書の原稿です。未公開の研究の結果、開発中の材料の組成、特許の出願前の発明が書かれていることがあります。参考文献の一覧にも、社内報告書の番号と題名、出願前の自社の特許の整理番号が含まれます。
- AIに渡すのは参考文献の一覧だけにする … 本文は Apps Script の中で数え終わっており、外に出しません。一覧に出願前の整理番号が混ざる場合は、その文献の文字列を伏せてから渡す設定を置きます
- APIのデータの扱いを確かめておく … Claude API の公式の説明では、保持されたデータを明示の許可なく学習に使わないとされています。さらに保持を抑えたい場合は、組織単位でゼロデータ保持(ZDR)の取り決めを Anthropic に依頼できるとされています。研究所の情報管理の規程に照らして、どちらで使うかを決めます
- APIキーをスクリプト プロパティに置き、編集権限を絞る … スクリプトを編集できる人を事務局の管理者だけにします
- 事務局の共有アカウントに集まる原稿の閲覧権限を見直す … 審査のたびに原稿が共有されるので、審査が終わった原稿の共有を外す手順を決めておきます
- この構成は研究の中身を審査しない … 引用が適切か、文献の内容が正しいかは審査員が見ます。書式の指摘が無いことを、審査を通ったことと取り違えないようにします
誤りが起きた場合のリスクは、書式の誤りを見落として保管庫に残すことと、誤った指摘で著者に無駄な直しをさせることの2つです。 前者は番号の対応を式で数えることで、後者は事務局が指摘を確かめてから送ることで抑えます。
10まず何から始めるか
1週目:規定を型と記入例の表にする
社内の参考文献の規定を、6種類の文献ごとに「項目の並び」「区切り」「省略してよい項目」「記入例1件」の表に書き直します。 記入例は過去の報告書から、規定どおりのものを選びます。
2週目:5本で試す
過去の報告書5本の参考文献の一覧を、手元のAIサービスで校正させます。欠けた項目を推測で埋めていないか、規定に無い指摘をしていないかを最優先で見ます。
3週目:番号の対応を Apps Script で数える
原稿を読み、引用番号を拾って範囲を展開し、一覧と突き合わせるところまでを書きます。同じ5本で、人が拾った番号と並べて確かめます。
4週目:フォームから指摘一覧までをつなぐ
フォーム送信時のトリガーを付け、番号の対応と書き方の校正を指摘一覧に書き出します。この時点ではメールの下書きは作らず、事務局が指摘一覧だけを見ます。
2か月目: メールの下書きと再提出の比較を足します。外した指摘とその理由を毎週数えます。3か月目以降: 外した理由をもとに規定の表を直し、1本50分が何分になったかを実測します。外す指摘が月に数件まで減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| インストール型トリガーが作成した人のアカウントで動くこと。失敗がメールで知らされること | Google for Developers: Installable triggers | 2026-10-08 |
フォーム送信時のイベントが namedValues(設問の名前と値)と values(シートの並び順の値)を渡すこと | Google for Developers: Event objects | 2026-10-08 |
DocumentApp.openByUrl()・openById()・create() があること | Google for Developers: DocumentApp | 2026-10-08 |
Body.getParagraphs() がリスト項目を含む段落を返し、getText() が本文を文字列で返すこと | Google for Developers: Body | 2026-10-08 |
| 1回の実行が6分まで。Google Workspace でトリガーの合計実行時間が1日6時間であること | Google for Developers: Quotas for Google Services | 2026-10-08 |
構造化出力が output_config.format(type: "json_schema")で指定できること。オブジェクトに additionalProperties: false が必要で、minimum・maxLength などの制約は使えないこと。refusal と max_tokens で止まったときはスキーマに合わないことがあること | Claude Platform Docs: Structured outputs | 2026-10-08 |
| 保持されたデータを明示の許可なく学習に使わないこと。ゼロデータ保持(ZDR)を組織単位で依頼できること | Claude Platform Docs: API and data retention | 2026-10-08 |
参考文献の書き方の規定と、どこまでを指摘として著者に返すかは、研究所の規定に合わせて事務局で決めてください。 本記事は Google for Developers と Claude Platform Docs で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0935)についてのご相談はこちらから。
