GoogleのスプレッドシートとDifyを組み合わせて自動化したいけど、どのように連携を行ったらいいのかわからないといった人はいませんか?
本記事では、DifyとGoogle Apps Script(GAS)を活用して、DifyのAPIからデータを取得し、それを自動的にGoogle スプレッドシートに書き込む方法を初心者でもわかるようにステップバイステップで解説します。GASを使った自動化の手順を覚えれば、手間を省くだけでなく作業効率も格段にアップします。この記事を読めばあなたもDifyとスプレッドシートの連携をマスターすることができ、データ管理の手間を大幅に減らすための第一歩を踏み出すことができます。

はじめに

本記事ではDifyから戻される値を固定的にしていますが、実際の業務で実装する場合はGASから入力を受け取りその入力を基に大規模言語モデル(LLM: ChatGPT、Gemini、Claudeなど)を活用して生成されたデータを戻すという流れになります。
インプットとLLMを活用した処理は業務によって異なりますが、Difyにリクエストを送信し、その結果をGoogle Sheetsに書き込むという基本的な流れは共通しています。
本記事では、この共通の処理部分に焦点を当て、DifyとGoogle Sheetsを連携する方法を解説します。

DifyのAPI設定

GASからDifyへのアクセスにはDifyのAPIを利用します。APIを利用することで外部からDifyのアプリケーションを実行することができます。

GASからDifyのAPIに対してリクエストを送信して戻されるデータをGoogle Sheetsに書き込むのでどのような形でDifyからデータが戻されるのか事前に確認しておく必要があります。

ワークフローの作成

動作確認用のワークフローを作成します。作成したワークフローに終了ノードのみ追加を行い、出力変数としてシステム変数のsys.user_idが戻される設定を行っています。

動作確認用のワークフロー
動作確認用のワークフロー

APIのシークレットキーの取得

作成したワークフローでAPIを利用するためには作成したワークフローを実行するためのシークレットキーの取得を行う必要があります。サイドメニューのAPIアクセスをクリックして右上にある”APキー”ボタンをクリックします。

APIアクセス画面
APIアクセス画面

APIシークレットキーの作成画面が表示されます。「新しいシークレットキーを作成」ボタンをクリックしてください。

シークレットキーの管理画面
シークレットキーの管理画面

ボタンをクリックすると画面には作成したシークレットキーが表示されます。一度だけ表示されるキーではないのであとからでもコピーすることができますが利用する場合は他の人に公開しないように保管してください。

シークレットキーの取得
シークレットキーの取得

これでAPIのシークレットキーが取得できたのでAPIを利用してアクセスすることができます。

APIの稼働、停止切り替え

APIはデフォルトでは稼働(有効)になっていますが、サイドメニューの監視から無効(停止)することができます。利用しない場合には無効にしておきましょう。

APIの稼働切り替え
APIの稼働切り替え

cURLコマンドを利用した動作確認

作成したシークレットキーとcURLコマンドを利用してDifyのAPIからどのような形で値が戻されるのか確認しておきます。{your_secret_key}には各自が取得したシークレットキーをコピー&ペーストで指定してください


% curl -X POST 'https://api.dify.ai/v1/workflows/run' \
--header 'Authorization: Bearer {your_secret_key}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "inputs": {},
    "response_mode": "blocking",
    "user": "abc-123"
}'
curlマンドはmacOSでもWindows11でも利用することができます。
fukidashi

戻っているデータは下記のJSONデータです。ワークフローの終点ノードで出力変数に指定したuser_idがoutputsプロパティに設定されていることが確認できます。GAS側ではdataプロパティの中のoutputsプロパティから必要なデータを取り出す処理が必要であることがわかりました。


{
  "task_id": "1a21911d-f18f-4571-b5a3-941fd9f62854",
  "workflow_run_id": "a8fa0483-7ce6-43fc-ad64-ecc9d5bb92df",
  "data": {
    "id": "a8fa0483-7ce6-43fc-ad64-ecc9d5bb92df",
    "workflow_id": "5205ee3-c20f-40b1-bcc6-b2d8f58c26e3",
    "status": "succeeded",
    "outputs": {
      "user_id": "abc-123"
    },
    "error": null,
    "elapsed_time": 0.0496191579150036,
    "total_tokens": 0,
    "total_steps": 2,
    "created_at": 1733271493,
    "finished_at": 1733271493
  }
}

APIへのアクセス方法と戻り値の形について確認することができました。

Difyの戻り値をGoogle Sheetsに保存

Difyからの戻り値の形式がわかったのでGASからリクエストをDifyのAPIに送信して、戻り値をGoogle Sheetsに保存する方法を確認します。

Difyの出力変数の設定

作成済みのワークフローの開始ノードと終了ノードの間にコードブロックを追加して出力変数にcustomer_nameを設定します。customer_nameをGoogle Sheetsに保存します。

コードブロックの設定
コードブロックの設定

終点ノードの出力変数にコードで設定したcustomer_nameを指定します。

終了ノードの設定
終了ノードの設定

customer_nameが戻されるのか確認するために先程と同じcURLコマンドを実行してoutputsプロパティにcustomer_nameが含まれていることを確認しておきます。


% curl -X POST 'https://api.dify.ai/v1/workflows/run' \
--header 'Authorization: Bearer {your_secret_key}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "inputs": {},
    "response_mode": "blocking",
    "user": "abc-123"
}'

設定通りcustomer_nameが戻されます。日本語の文字列なのでUnicodeエスケープシーケンス形式で表示されていますがデコードすると「山田 太郎」という文字列になります。


{
//略
    "status": "succeeded",
    "outputs": {
      {"customer_name": "\u5c71\u7530 \u592a\u90ce"
    },
    "error": null,
//略
  }
}

Google Sheetsの設定

Google Sheets(https://docs.google.com/spreadsheets/)にアクセスして新しいスプレッドシートの作成を行い、ファイル名を得意先一覧、シート名を得意先一覧、列名にcustomer_nameを設定します。

Google Sheetsの設定
Google Sheetsの設定

App Scriptsの設定

GASのスクリプトをスタンドアロンスクリプトとして作成するためApp Scripts(https://script.google.com/)で新しいプロジェクトを作成します。

プロジェクトの作成
プロジェクトの作成

スタンドアロンスクリプトの意味やGASのプロジェクトの作成等がわからない場合は下記の公開済みの文書を参考にしてみてください。

作成したプロジェクトではDifyのAPIにアクセスしてcustomer_nameを取得するコードを記述します。関数の名前をgetFromDifyとしています。コードの内容はcurlコマンドで実行したオプションをGASのUrlFetchApp.fetchで実行できる形に変更を行い、APIから戻されるresponseデータからoutputsプロパティのみ取り出しその内容をJSONデータとログに表示させる設定を行っています。YOUR_SECRET_KEYには各自が取得したDify APIのシークレットキーを設定してください。


function getFromDify() {
  const url = "https://api.dify.ai/v1/workflows/run";
  const secret_key ="YOUR_SECRET_KEY";

  const options = {
    'method': 'POST',
    'headers': {
      'Authorization': 'Bearer ' + secret_key,
      'Content-Type': 'application/json' 
    },
    'payload': JSON.stringify({
      "inputs": {},
      "user": "abc-123",
      'response_mode': "blocking"
    })
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const responseBody = response.getContentText()
    const jsonResponse = JSON.parse(responseBody);
    Logger.log("リクエスト成功: " + JSON.stringify(jsonResponse.data.outputs));
  } catch (error) {
    Logger.log("リクエスト失敗: " + error.message);
  }
}

コードを保存して実行するとスクリプトを実行するための権限やスクリプトの信頼の確認画面が表示されますがそのまま実行を許可してください。スクリプトを実行されるまでの権限、信頼についての画面とメッセージについては下記の記事で詳細に説明しています。

実行すると実行ログに取得したcustomer_nameの名前が表示されます。GASからDify APIを使ってワークフローで設定したデータを取得することができました。

Dify APIから取得したデータの表示
Dify APIから取得したデータの表示

Google Sheetsへの追加

DifyのAPIから取得したデータをGoogle Sheetsに追加するwriteToSheet関数を追加します。writeToSheet関数の引数にはcustomer_nameプロパティが含まれているcusomter変数を設定しています。main関数でgetFromDify関数とwriteToSheet関数を実行しているのでスクリプトの実行にはmain関数を実行する必要があります。


function main(){
  const customer = getFromDify();
  writeToSheet(customer)
}

function writeToSheet(data) {
  const spreadsheetId = "YOUR_SPREAD_SHEET_ID";
  const sheetName = "得意先一覧";
  
  const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  
  const sheet = spreadsheet.getSheetByName(sheetName);
  
  sheet.appendRow([data.customer_name]);
}

function getFromDify() {
  const url = "https://api.dify.ai/v1/workflows/run";
  const secret_key ="YOUR_SECRET_KEY";

  const options = {
    'method': 'POST',
    'headers': {
      'Authorization': 'Bearer ' + secret_key,
      'Content-Type': 'application/json' 
    },
    'payload': JSON.stringify({
      "inputs": {},
      "user": "abc-123",
      'response_mode': "blocking"
    })
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const responseBody = response.getContentText()
    const jsonResponse = JSON.parse(responseBody);
    Logger.log("リクエスト成功: " + JSON.stringify(jsonResponse.data.outputs));
    return jsonResponse.data.outputs;
  } catch (error) {
    Logger.log("リクエスト失敗: " + error.message);
  }
}

データの書き込みを行いたいスプレッドシートはidを指定します。スプレッドシートのIDはブラウザでスプレッドシートを開いた時のURLから確認することができます。

スプレッドシートのIDの確認方法
スプレッドシートのIDの確認方法

Google Sheetsへの書き込みコードを追加して保存した後、スクリプトを実行はmainに変更します。mainに変更して実行するとスプレッドシートへのアクセスがコードに追加されたので再度権限の確認画面が表示されるので適切に設定を行ってください。

実行してApp Scriptsの実行ログにエラーメッセージがなければ得意先一覧ファイルを開いてcustomer_nameの”山田 太郎”が追加されているか確認してください。

Google Sheetsへの描き込みの確認
Google Sheetsへの描き込みの確認

Difyから取得したデータをGoogle Sheetsのスプレッドシートに追加できることが確認できました。

GASを利用してDifyとGoogle スプレッドシートを連携を行うことができました。