ElcamyTECH
Articles
Dify

Dify のワークフロー定期実行方法3選

TechDifyDifyGoogleCloudGoogle CloudGithubGithub2025/08/18

はじめに

Dify のワークフローを「毎朝レポート」「週次バッチ」のように定期実行したい場面は多くあります。本記事では、MakeGitHub ActionsCloud Run+Cloud Schedulerの3通りの定期実行方法をまとめました。

どれを選ぶかの指針

  • Make:GUIで素早く試したい、非エンジニアも触る、15分間隔で十分。
  • GitHub Actions:cron をコードで管理したい、PR レビューや履歴を残したい。
  • Cloud Run+Cloud Scheduler:本番向け・認証(OIDC)必須・Secret Manager で鍵管理、将来の拡張性重視。
メモ

事前準備

  • 前提条件
    • Dify をすでに動かしている
    • Dify の API キーを取得済み(設定画面から確認可能)
  • 必要な準備作業
    • ワークフローを用意する(Dify 側で簡単なワークフローを作っておくとテストがスムーズ)

環境

  • Dify クラウド版
メモ

v1.10.0からはスケジュールトリガーを使うことで定期実行を簡単に実現できます。トリガー機能の概要や使い方についてはこちらをご覧ください。

https://blog.elcamy.com/posts/3acd9157/

Make.com での定期実行

まずは、Makeを用いてDifyのワークフローを定期実行する方法を紹介します。

Make とは?

Makeは、ノーコードの自動化サービスです。複数のアプリやAPIをつないで、ドラッグ&ドロップで処理の流れ(シナリオ)を作成・実行できます。

メモ

ノーコードの自動化サービスは、Zapierも有名ですが、Zapier は送信 Webhooks が無料プラン対象外のため、無料でも 15 分間隔で動かせるMakeを採用しました。

手順

  1. シナリオの作成
  2. HTTPモジュールの設定
  3. スケジュールの設定
  4. テストと確認

1. シナリオの作成

シナリオは自動化フローの全体像を定義する単位です。ここで「Difyワークフローを実行」という処理をまとめて管理するため、最初に作成します。

  1. このページにアクセスし、「Create a new scenario」を選択します。

    image

2. HTTPモジュールの作成

DifyのワークフローはREST API経由で実行するため、外部サービスと通信できるHTTPモジュールを使用します。ここで認証情報とエンドポイントを設定し、Dify APIにアクセスできるようにします。

  1. HTTPモジュール「HTTP」を選択

    image

  2. 「Make an API Key Auth request」を選択します。

    image

  3. 「Credentials」の「Add」を選択後、以下の表のように項目を設定します。

    image APIキーを安全に使えるように設定をします。

項目備考
NameDify API Key任意名(共有時に識別しやすい名前に)
KeyBearer YOUR_API_KEYBearer␣+APIキーを1行で。改行・余計な空白NG(例:Bearer app-xxxx)。Dify の Workflow API Key を使用。 (Dify Docs)
API Key placementIn the headerHTTPヘッダーに付与(自動で Authorization に入る設定)
API Key parameter nameAuthorization既定のヘッダー名。変更不要

Dify APIはAuthorizationヘッダーにBearerトークンを入れて認証します。そのため、APIキーをBearer形式で登録し、リクエストごとに自動でヘッダーに付与させます。

  1. 他の項目を以下の表のように設定します。

    image

項目備考
URLhttps://api.dify.ai/v1/workflows/runDify のワークフロー実行エンドポイント。セルフホストの場合は自組織のベースURLに置換。
MethodPOSTこのAPIは POST で実行。
Headers(変更なし)-
Query String(変更なし)不要
Body typeRawJSONをそのまま送信
Content typeJSON(application/json)application/json を選択
Request content下記JSONinputs はワークフロー側の入力に合わせて編集。response_mode は通常 blocking(同期)。user は呼び出し元の識別子。

https://api.dify.ai/v1/workflows/run はワークフローを実行する専用エンドポイントです。Bodyでinputsを渡すことで、ワークフローに動的な入力を与えられます。 body

json
{
  "inputs": { "foo": "bar" },
  "response_mode": "blocking",
  "user": "make"
}

3. スケジュールの設定

  1. 「Every 15 minutes」を選択し、「Schedule setting」で定期実行したい日付を設定します。 今回は毎週月曜の午前9時に設定しました。

    image Makeの無料プランでは最短で15分間隔のスケジュール実行が可能です。これにより、業務時間内に定期的なレポートを自動生成できます。

4. テストと確認

  1. 「Run once」を選択し、テストを実行します。

    image

  2. Status codeが200であることが確認できました。

    image

  3. Dify のワークフローログにも表示されているため、成功しています。

    image

    image

GitHub Actions(dify-schedule)での定期実行

次に、GitHub Actionsを用いてDifyのワークフローを定期実行実行する手順を紹介します。 使用するリポジトリは、Dify OSSの公式にも解説があったこちらです。 既存のdify-scheduleリポジトリをフォークすることで、自分の環境に合わせてcron設定やSecretsを自由に変更できるようにします。

手順

  1. リポジトリのセットアップ
  2. Actionsの有効化
  3. Dify のAPIキーの設定
  4. cronスケジュール設定
  5. テストと確認

1. リポジトリのセットアップ

  1. このリポジトリにアクセスし、フォークします。

    image

    image

2. Actionsの有効化

  1. Actionsメニューを選択します。

    image

  2. GitHub Actionsの有効化の承認を求められるので、承認します。

    image

3. Dify のAPIキー設定

  1. Settingsメニューを選択し、左サイドの「Secrets and variables」の「Actions」を選択します。 その後、「Repository secrets」の「New repository secret」を選択します。

    image

  2. 以下の表のように項目を設定し、「Add secret」を選択します。

    image

    :::message

    なぜ Secrets に入れるのか? APIキーをコードに直書きするとリポジトリを共有した際に流出するリスクがあります。 Secrets に保存することで安全に保管でき、Workflow 内から secrets.DIFY_TOKEN として参照可能になります。

    :::

項目備考
NameDIFY_TOKENワークフロー内では secrets.DIFY_TOKEN で参照
SecretYOUR_API_KEYDify の Workflow API Key
  1. 以下のようになっているか確認して下さい。

    image

4. スケジュール設定

  1. Actionsメニューを選択し、「Auto」タブでauto.ymlを選択します。

    image

  2. 鉛筆のマークを選択します。

    image

  3. 定期実行したい日付をcronで設定します。 今回は毎週月曜の午前9時(0 9 * * 1)に設定しました。 任意の時間を入力後、「Commit changes…」を選択し、「Commit changes」を選択します。

    image

    :::message

    cronでの時間設定方法 cronは定期実行のスケジュールを設定するための書式です。 今回設定したcronの各項目の意味は以下の通りです。

    0:分(0分)
    9:時(9時)
    *:日(毎日)
    *:月(毎月)
    1:曜日(0=日曜、1=月曜、…)
    

    この例では「毎週月曜日の午前9時」に処理が実行されます。

    :::

    :::message

    なぜ cron で管理するのか? cron式を使うことで、定期実行のスケジュールを「コード」として管理できます。 設定変更の履歴がコミットログに残るため、チームでレビュー・管理しやすくなります。

    :::

5. テストと確認

  1. Dify のワークフローログにも表示されているため、成功しています。

    image

Cloud Run + Cloud Schedulerでの定期実行

最後に、Google Cloud のサービスを使ったDifyのワークフローを定期実行実行する手順を紹介します。 Google Cloud のサービスを組み合わせることで、Dify のワークフローをセキュアに定期実行できます。 この構成では、それぞれのサービスに役割があります。

  • Secret Manager Dify APIキーを安全に保存し、コードやYAMLに直書きするリスクを避けます。 IAM 権限を使って、必要なサービスだけが取得できるように制御します。
  • サービスアカウント Cloud Scheduler が Functions を呼び出す際の認証に使います。 最小権限でアクセス制御するため、セキュリティを保ちながら自動実行できます。
  • Cloud Run functions Dify API を実際に叩く役割。 Secret Manager から APIキーを取得し、HTTP リクエストを送る処理をします。
  • Cloud Scheduler cron 式で実行タイミングを管理するサービスです。

この構成のメリットは以下です。

  • 認証付きで安全に実行できる
  • APIキーを Secret Manager で集中管理できる
  • GUI操作だけで本番環境レベルの定期実行が組める
  • 将来の拡張(監視、アラート、リトライ)にも対応可能

👉 全体の流れは次のとおりです。

手順

  1. Secret ManagerにAPIキーを登録
  2. サービスアカウントの作成
  3. Cloud Run functionsで関数を作成
  4. Cloud Schedulerの設定
  5. テストと確認

1. Secret ManagerにAPIキーを登録

Dify の API キーは Secret Manager に登録します。これにより、コードやYAMLへの直書きを避けられ、① 漏えいリスクの低減、② IAM による最小権限のアクセス制御、③ バージョン管理とローテーション、④ 監査ログの取得 が可能になります。

  1. こちらにアクセスし、「シークレットを作成」を選択します。

    image

  2. 以下の表のように項目を設定し、「シークレットを作成」を選択します。

    image

項目備考
名前dify_regular_execution小文字スネークケース推奨(後から参照しやすい)
シークレットの値YOUR_API_KEYDify の Workflow API Key。改行なし/余計な空白なしで保存
  1. シークレットのパスをコピーし、メモします。

    image

2. サービスアカウントの作成

  1. こちらにアクセスし、「サービスアカウントを作成」を選択します。

    image

  2. 「①サービスアカウントの作成」で、任意のサービスアカウント名を入力します。

    image

  3. 「②権限」の「ロールを選択」で、「Secret Managerのシークレットサクセサー」と「Cloud Run 起動元」を追加し、「完了」を選択します。

    image

3. Cloud Run functions で関数を作成

  1. こちらにアクセスし、「関数を作成」を選択します。

    image

  2. 以下の表のように項目を設定します。

    image

項目備考
サービスの名前dify-regular-execution任意。後のURLやIAMで識別に使用
リージョンasia-northeast1近いリージョンを推奨(レイテンシ/料金最適化)
ランタイムNode.js 22-
認証認証が必要後段の Cloud Scheduler から OIDC 付きで呼び出す前提
  1. 「コンテナ、ボリューム、ネットワーキング、セキュリティ」に移動し、「シークレットを参照」を選択します。

    image

  2. 以下の表のように項目を設定してください。

    image

項目備考
名前DIFY_API_KEY環境変数名(コードで process.env.DIFY_API_KEY などで参照可)
シークレットdify_regular_executionSecret Manager で作成したシークレット名
バージョンlatest固定でOK(ロールアウト時は固定バージョンも可)
  1. 「セキュリティ」の「サービスアカウント」で、先ほど作成したサービスアカウントを選択し、「作成」を選択します。

    image

  2. index.js に以下のコードをペーストします。 SECRET_NAMEは先ほど保存したシークレットのパスを入力します。

    image

    :::details コード

    index.js

    javascript
    const functions = require('@google-cloud/functions-framework');
    const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
    const axios = require('axios');
     
    // シークレットマネージャークライアントを作成
    const secretClient = new SecretManagerServiceClient();
     
    // シークレット名(必要に応じてバージョンを指定。指定しない場合は latest が使われる)
    const SECRET_NAME = 'projects/***/secrets/dify_regular_execution/versions/latest';
     
    // APIキー取得関数
    async function getApiKey() {
      const [version] = await secretClient.accessSecretVersion({ name: SECRET_NAME });
      return version.payload.data.toString('utf8');
    }
     
    // Cloud Functions エントリーポイント
    functions.http('executeDifyApi', async (req, res) => {
      try {
        console.log('=== Start executeDifyApi ===');
     
        const apiKey = await getApiKey();
        console.log('API Key取得成功(キーは非表示)');
     
        const payload = {
          inputs: { foo: 'bar' },
          response_mode: 'blocking',
          user: 'Cloud Run functions'
        };
        console.log('送信ペイロード:', payload);
     
        const response = await axios.post(
          'https://api.dify.ai/v1/workflows/run',
          payload,
          {
            headers: {
              'Authorization': `Bearer ${apiKey}`,
              'Content-Type': 'application/json'
            }
          }
        );
     
        console.log('Dify API レスポンス:', response.data);
        res.status(200).send(response.data);
     
      } catch (error) {
        console.error('=== エラー発生 ===');
        if (error.response) {
          console.error('ステータス:', error.response.status);
          console.error('レスポンスデータ:', error.response.data);
        } else if (error.request) {
          console.error('レスポンスなし:', error.request);
        } else {
          console.error('エラーメッセージ:', error.message);
        }
        console.error('フルエラーオブジェクト:', error);
        res.status(500).send('Internal Server Error');
      }
    });
     

    :::

  3. package.json に以下のコードをペーストします。 scripts.deploy の <SERVICE_ACCOUNT_EMAIL> は、サービスアカウントのメールアドレスに置き換えてください。

    image package.json

    json
    {
      "name": "dify-cloud-functions",
      "version": "1.0.0",
      "dependencies": {
        "@google-cloud/functions-framework": "3.3.0",
        "@google-cloud/secret-manager": "4.2.0",
        "axios": "1.4.0"
      },
      "engines": {
        "node": ">=22"
      },
      "scripts": {
        "deploy": "gcloud functions deploy executeDifyApi --gen2 --runtime=nodejs22 --region=asia-northeast1 --entry-point=executeDifyApi --trigger-http --allow-unauthenticated --service-account=<SERVICE_ACCOUNT_EMAIL>"
      }
    }
  4. 作成した関数のURLをコピーし、保存します。

    image

4. Cloud Schedulerの設定

  1. こちらにアクセスし、「ジョブを作成」を選択します。

    image

  2. 「スケジュールを定義する」で、以下の表のように項目を設定します。

    image

項目備考
名前dify-regular-execution任意(ジョブID)
リージョンasia-northeast1関数と同一リージョンを推奨
頻度0 9 * * 1Cron(例:毎週月曜9:00 JST)。UTC基準にしない場合はタイムゾーン必ず指定
タイムゾーン日本標準時(JST)例:Asia/Tokyo
  1. 「実行内容を構成する」で、以下の表のように項目を設定します。

    image

項目備考
ターゲットタイプHTTPCloud Run/Functions を HTTP で呼び出し
URL関数の URL例:https://<service>-<hash>-<region>.run.app/
HTTPメソッドPOSTDify 実行エンドポイントが POST のため
(認証)OIDC トークンサービスアカウント+aud=URL必須(関数が認証必須の場合)。Cloud Run Invoker 権限を付与し、aud はサービスURLを指定。

5. テストと確認

  1. Cloud Schedulerで作成したジョブを選択し、「強制実行」を選択します。

    image

  2. 「最後のステータス」が「成功」になったので、一連の流れが成功しました。

    image

  3. Dify のワークフローログにも表示されているため、成功しています。

    image

    image

おわりに

本記事では、Dify のワークフローを定期実行する 3 つの方法(Make.com/GitHub Actions/Cloud Run + Cloud Scheduler) を紹介しました。 定期実行の反応速度は、同一条件(例:毎朝 9 時実行)での検証では Make → Cloud Run + Cloud Scheduler → GitHub Actions の順に短い結果でした(※環境やジョブ内容により異なります)。 まずは定期実行を試したい場合は、GUI で気軽に構築できる Make をおすすめします。 初めてなら GUI で直感的に設定できる Make から試すのがおすすめです。その後チーム開発や本番運用を見据える場合は GitHub Actions や Cloud Run などの方法を検討がいいかもしれません。

関連記事

Solution

AIエージェント・Dify構築支援

AIエージェント開発・Dify構築・PoC・社内研修まで
ワンストップで支援。まずはお気軽にご相談ください。

Elcamy

Technology Partners

DifyGoogle Cloud Partner