Difyでつくる論⽂仕分けアプリ part4: Difyと GASの連携
| 目次 |
1. はじめに
本記事は、Difyのチャットワークフローを使ってPubMed論⽂の検索‧翻訳‧要約を⾃動化するシリーズのPart 4です。
これまでの復習:
- Part 0: ワークフローの全体像とPubMed APIの基礎
- Part 1: ⾃然⾔語クエリからE-SearchでPMIDを取得
- Part 2: E-Fetch / E-Summaryで詳細データを取得し、XML/JSONをパース
- Part 3: LLMでタイトル翻訳‧要約‧優先度判定を⾏い、CSVを⽣成

Part 4(本記事)では、⽣成したCSVデータをGoogle Apps Script(GAS)に送信してスプレッドシートへ保存する処理を解説します。GASの基礎知識から実装⼿順、コードの詳細解説まで、⼀通り理解できるように構成しています。これにより、ユーザーはスプレッドシートのURLを受け取り、結果を即座に確認できるようになります。
シリーズ構成
- Part0: 全体像とPubMed API基礎
- Part 1: パラメータ抽出とE-Search編
- Part 2: E-Fetchとデータパース編
- Part 3: AI処理‧データ整形編
- Part4(本記事): データ保存とGAS連携編
2. Part 3からの流れ
Part 3で⽣成したCSVは以下の形式でした。
"PMID","Priority","Title_JP","Summary","Title_EN","Authors","Journal","Year","DOI","MeSH_Keywords","URL","m ain_author_affiliation","research_area","publication_types","population" "12345678","HIGH","糖尿病におけるインスリン療法の効果","本研究は、2型糖尿病患者におけるインスリン療法の 有効性を検証した。...","Effect of Insulin Therapy in Type 2 Diabetes","John Smith, Jane Doe","Diabetes Resear ch","2024","10.1234/example","diabetes, insulin, therapy","<https://pubmed.ncbi.nlm.nih.gov/12345678/","Uni versity> of Tokyo","内分泌","Randomized Controlled Trial","2型糖尿病患者(成⼈)"
このCSV⽂字列をGASに送信してスプレッドシートに保存します。
3. Dify側の保存フロー
3-1. GASに追記(HTTP Request)
以下の画像ではURL保護のためにグレーアウトさせていますが、本記事の後半で設定方法を解説していますので順に読み進めて問題ありません。

| 項⽬ | 設定値 |
|---|---|
| メソッド | POST |
| URL | URLは後ほどGAS側の設定をした後に発⾏されるものをコピーして使います。ここでは⼀旦スキップで⼤丈夫です。 |
| ヘッダー | Content-Type:application/json |
このノードでは、DifyからGoogle Apps Script(GAS)のWebアプリを呼び出して、CSVデータをスプレッドシートに保存します。
リクエスト例
{
"csv_string": "{{#csv_string#}}"
}
Part3で作成したCSV⽣成ノードからの csv_string を、JSON形式でGASに送信します。
レスポンス例
{
"status": "success",
"message": "Data appended successfully",
"spreadsheet_url": "<https://docs.google.com/spreadsheets/d/>..."
}
GASからは、処理結果とスプレッドシートのURLが返されます。
3-2.スプレッドシートURLを抽出

import json
def main(body: str):
if not body:
raise ValueError("invalid parameter")
result = json.loads(body)
return {"spreadsheet_url": result["spreadsheet_url"]}
GASからのレスポンスから、スプレッドシートのURLを抽出します。
3-3. Answerノード

- 応答:{{#spreadsheet_url#}}
- 出⼒: スプレッドシートへのリンクのみをシンプルに表⽰
ここまででDify側のフローは完成しますが、実際に動作させるためには、GASのWebアプリを作成‧デプロイする必要があります。以下、GASの基礎から実装⼿順まで順を追って解説します。
4. Google Apps Scriptとは?
4-1. Google Apps Scriptの概要
Google Apps Script(GAS)はGoogleが提供するクラウドベースのJavaScript実⾏環境で、Google Workspace(スプレッドシート、ドライブ、メール、カレンダーなど)を⾃動化‧拡張するために設計されたプラットフォームです。 ブラウザ上のエディタだけで完結し、インフラ構築やサーバ管理なしでスクリプトを動かせるため、「ちょっとした業務⾃動化」から「⼩さな業務システム」までを素早く⽴ち上げられる点が特徴です。
4-2. Google Apps Scriptの主な特徴
| 特徴 | 説明 |
|---|---|
| 無料で利⽤可能 | Googleアカウントさえあれば、追加費⽤なしで利⽤できます。Google Workspace有償プランでも追加課⾦なく使えます。 |
| Google Workspaceとの親和性 | スプレッドシート、ドライブ、メール、カレンダーなどとネイティブに連携でき、専⽤のAPIが多数⽤意されています。 |
| Webアプリとして公開可能 | HTTPリクエストで呼び出せるWebエンドポイントを数クリックで公開でき、今回のようにDifyから直接叩くことができます。 |
| 定期実⾏が可能 | 「毎⽇9時」「毎週⽉曜」のような時間ベースのトリガーや、フォーム送信などイベントベースのトリガーを簡単に設定できます。 |
GASがあると何が嬉しい?
GASは⾯倒な⼿作業を⾃動化するために⽤いられることが多いです。
例えば、本記事シリーズで解説している論⽂仕分けアプリでは、Difyが作成するcsvデータをSpreadsheet上に転記する作業をGASに任せます。そうすることで、Dify上で知りたいことを⼊⼒するだけで、Spreadsheet上にどんどん論⽂のリストが溜まっていく仕組みを構築することができます。

GASとDify連携で広がる可能性
Dify単体でも様々な外部ツールと連携して「⽣成AIによる要約や分類」「業務の⾃動化」を⾏うことができます。しかし、GASを⽤いてGmailやSpreadsheetと連携させることで、使い慣れたサービス上でDifyのパワーを発揮することが可能です。
例えば、
- アポ⾒込みのある顧客についてのシートに対して、DifyとGASを⽤いて顧客情報をネットから付与していく
- 安全性情報のスクリーニングを⾃動化して、スプレッドシートに結果をまとめる。
- 製薬企業が出した最新のニュースをDifyで要約しながらGmailでまとめてメルマガのように運⽤する
など、様々な使い⽅が可能になります
5. GASの作り⽅とデプロイ⼿順
ここからは、実際にGASを作成してデプロイする⼿順を、ステップバイステップで解説します。
5-1. Google Apps Scriptエディタの開き⽅
- Googleスプレッドシートを開く
- 新しいスプレッドシートを作成するか、既存のスプレッドシートを開きます
- このスプレッドシートに、論⽂データが保存されます
- スクリプトエディタを開く
- メニューから「拡張機能」→「Apps Script」を選択します

スクリプトエディタが開くと、ブラウザ上にコードエディタが表⽰され、ここにコードを書き込んでいきます。

5-2. コードの記述
スクリプトエディタに、以下のコードをコピー&ペーストします。
function doPost(e){
var result = {status:'success',message:'Data appended successfully'};
try{
var csvString = "";
try{
var postData = JSON.parse(e.postData.contents);
csvString=postData.csv_string||postData.csv_output||postData.output;
}catch(jsonError){
csvString=e.postData.contents;
}
if (!csvString) {
throw new Error("No CSV data found.");
}
var csvData = Utilities.parseCsv(csvString);
if (csvData.length < 2) {
return createJsonResponse({ status: 'skipped', message: 'No content rows found in CSV' });
}
var csvHeaders = csvData.shift();
var csvBody = csvData;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
result.spreadsheet_url = ss.getUrl();
var lastRow = sheet.getLastRow();
if (lastRow === 0) {
sheet.appendRow(csvHeaders);
if (csvBody.length > 0) {
sheet.getRange(2, 1, csvBody.length, csvBody[0].length).setValues(csvBody);
}
} else {
var sheetHeaders = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var csvHeaderMap = {};
csvHeaders.forEach(function(header, index) {
csvHeaderMap[header] = index;
});
var outputRows = csvBody.map(function(row) {
return sheetHeaders.map(function(sheetColName) {
var csvColIndex = csvHeaderMap[sheetColName];
return csvColIndex !== undefined?row[csvColIndex]:"";
});
});
if (outputRows.length > 0) {
sheet.getRange(lastRow + 1, 1, outputRows.length, outputRows[0].length).setValues(outputRows);
}
}
} catch (error) {
result.status = 'error';
result.message = error.toString();
}
return createJsonResponse(result);
}
function createJsonResponse(data) {
return ContentService.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
5-3. Webアプリとしてデプロイする⽅法
ステップ1: デプロイメニューを開く

コードを記述したら、次はWebアプリとしてデプロイします。
- スクリプトエディタの右上にある「デプロイ」ボタンをクリック
- 「新しいデプロイ」を選択
ステップ2: デプロイ設定


| 項⽬ | 設定値 |
|---|---|
| 種類の選択 | ウェブアプリ |
| 説明 | 任意(例:PubMed論⽂取り込みAPI) |
| 次のユーザーとして実⾏ | ⾃分 |
| アクセスできるユーザー | 全員(外部から呼び出すため) |
重要: 「アクセスできるユーザー」を「全員」に設定しないと、Difyから呼び出せません。
本ブログシリーズでは、簡易化のために「アクセスできるユーザー = 全員」にしました。しかし社内で実運用を行う場合には、全員がアクセスできる状態は許容できません。
簡易的な仕組みでは、呼び出し側(今回の場合Dify)と受け取り側(GAS)にのみ認証用の鍵をセットしておき、簡単な認証を行う方法があります。検証のために作成および公開したGASアプリなどはURLが外部に漏れないように注意しましょう。
ステップ3: デプロイ実⾏
- 「デプロイ」をクリック
- 初回実⾏時は、Googleアカウントでの承認フローが表⽰されます

- 「アクセスを承認」をクリック
- 必要に応じて、Googleアカウントの認証を完了
ステップ4: WebアプリのURLを取得

デプロイが完了すると、WebアプリのURLが表⽰されます。
<https://script.google.com/macros/s/xxxxxxxxxxxx/exec>
このURLをコピーしておきます。このURLが、DifyワークフローからPOSTする際のエンドポイントになります。
5-4. DifyでURLを設定

セクション3-2で解説した「GASに追記」ノード(HTTPリクエストノード)のURLに、取得したWebアプリのURLを設定します。
これで、Dify → GAS → スプレッドシートというパイプラインが完成します。
5-5. デプロイ時の注意点
| 項⽬ | 注意点 |
|---|---|
| アクセス権限 | 外部から呼び出す場合は「全員」に設定。初回実⾏時、Googleアカウントの認証が必要な場合あり |
| コードの更新 | コードを更新した場合は、新しいバージョンとしてデプロイが必要。「デプロイを管理」から新しいバージョンをデプロイ |
6. 動作確認とプレビュー
GASのデプロイとDifyでのURL設定が完了したら、ワークフロー全体を動作確認してみましょう。
6-1. ワークフロー全体の動作確認

- Difyのチャット画⾯で、⾃然⾔語で論⽂検索クエリを⼊⼒
- 例:「糖尿病のインスリン療法に関する2020年以降のRCT」
- ワークフローが実⾏され、以下の流れで処理が進みます
- パラメータ抽出 → E-Search → E-Fetch → LLM処理 → CSV⽣成 → GAS送信 → スプレッドシート保存
- 結果として、スプレッドシートのURLが返されます

7. まとめ
本記事(Part 4)では、Difyで⽣成したCSVデータをGoogle Apps Script(GAS)に送信してスプレッドシートへ保存する処理を、GASの基礎から実装⼿順、コード解説まで⼀通り解説しました。
本記事で実現したこと
- Dify側の保存フロー: CSV⽣成ノードから直接GASに送信
- GASの基礎知識: GASとは何か、その特徴とライフサイエンス業界での活⽤メリット
- GASの実装⼿順: エディタの開き⽅からWebアプリのデプロイまで
- GASコードの詳細解説: リクエスト受信からスプレッドシート保存までの処理フロー
Dify×GAS連携のポイント
| ポイント | 説明 |
|---|---|
| シンプルな連携 | DifyからHTTP POSTでGASを呼び出すだけで、データの永続化が実現できる |
| 直接的なデータフロー | CSV⽣成ノードから直接GASに送信する単⼀経路のため、シンプルで理解しやすい |
| 柔軟な拡張 | GAS側で通知‧定期実⾏‧データ分析などの機能を追加できる |
| コスト効率 | 既存のGoogle Workspace環境を活⽤し、追加コストを抑えられる |
次のステップ
基本的な連携が完成したら、以下のような拡張も可能です。
- メール通知: 重要な論⽂が追加されたら、関係者にメール通知
- 定期実⾏: 毎⽇‧毎週など、定期的に論⽂を⾃動収集
- 複数シートへの振り分け: 研究テーマ別にシートを分けて管理
- データ分析‧可視化: グラフ作成やレポート⾃動⽣成
DifyとGASを組み合わせることで、ライフサイエンス‧製薬業界の多様な課題に対応し、業務効率化とデータ管理の強化が期待できます。
シリーズ構成
- Part0: 全体像とPubMed API基礎
- Part 1: パラメータ抽出とE-Search編
- Part 2: E-Fetchとデータパース編
- Part 3: AI処理‧データ整形編
- Part4(本記事): データ保存とGAS連携編

ヘルツレーベンでは、ライフサイエンス業界に特化したDX・自動化支援を提供しています。
PubMedや学術情報の自動収集をはじめ、Slack・Gmailなどを活用したナレッジ共有の仕組みまで、実務に直結するワークフローを設計・導入いたします。
提供サービスの例
- 製薬・医療機器業界での提案活動や調査業務の自動化支援
- アカデミアや研究者向けの文献レビュー・情報共有フローの最適化
- 医療従事者のキャリア開発を支援するリスキリングプログラム
👉 ご興味をお持ちの方はぜひお気軽にお問い合わせください。
お問い合わせフォームはこちら

監修者 株式会社ヘルツレーベン代表 木下 渉
株式会社ヘルツレーベン 代表取締役/医療・製薬・医療機器領域に特化したDXコンサルタント/
横浜市立大学大学院 ヘルスデータサイエンス研究科 修了
製薬・医療機器企業向けのデータ利活用支援、提案代行、営業戦略支援を中心に、医療従事者向けのデジタルスキル教育にも取り組む。AI・データ活用の専門家として、企業研修、プロジェクトPMO、生成AI導入支援など幅広く活動中






