はじめに
Dify のワークフローを「毎朝レポート」「週次バッチ」のように定期実行したい場面は多くあります。本記事では、Make、GitHub Actions、Cloud Run+Cloud Schedulerの3通りの定期実行方法をまとめました。
どれを選ぶかの指針
- Make:GUIで素早く試したい、非エンジニアも触る、15分間隔で十分。
- GitHub Actions:cron をコードで管理したい、PR レビューや履歴を残したい。
- Cloud Run+Cloud Scheduler:本番向け・認証(OIDC)必須・Secret Manager で鍵管理、将来の拡張性重視。
-
前提条件
- Dify をすでに動かしている
- Dify の API キーを取得済み(設定画面から確認可能)
-
必要な準備作業
- ワークフローを用意する(Dify 側で簡単なワークフローを作っておくとテストがスムーズ)
環境
- Dify クラウド版
Make.com での定期実行
まずは、Makeを用いてDifyのワークフローを定期実行する方法を紹介します。
Make とは?
Makeは、ノーコードの自動化サービスです。複数のアプリやAPIをつないで、ドラッグ&ドロップで処理の流れ(シナリオ)を作成・実行できます。
手順
- シナリオの作成
- HTTPモジュールの設定
- スケジュールの設定
- テストと確認
1. シナリオの作成
シナリオは自動化フローの全体像を定義する単位です。ここで「Difyワークフローを実行」という処理をまとめて管理するため、最初に作成します。
-
このページにアクセスし、「Create a new scenario」を選択します。
2. HTTPモジュールの作成
DifyのワークフローはREST API経由で実行するため、外部サービスと通信できるHTTPモジュールを使用します。ここで認証情報とエンドポイントを設定し、Dify APIにアクセスできるようにします。
-
HTTPモジュール「HTTP」を選択
-
「Make an API Key Auth request」を選択します。
-
「Credentials」の「Add」を選択後、以下の表のように項目を設定します。
APIキーを安全に使えるように設定をします。
項目 値 備考 Name Dify API Key 任意名(共有時に識別しやすい名前に) Key Bearer YOUR_API_KEY
Bearer␣
+APIキーを1行で。改行・余計な空白NG(例:Bearer app-xxxx
)。Dify の Workflow API Key を使用。 (Dify Docs)API Key placement In the header HTTPヘッダーに付与(自動で Authorization
に入る設定)API Key parameter name Authorization 既定のヘッダー名。変更不要 Dify APIはAuthorizationヘッダーにBearerトークンを入れて認証します。そのため、APIキーをBearer形式で登録し、リクエストごとに自動でヘッダーに付与させます。
-
他の項目を以下の表のように設定します。
項目 値 備考 URL https://api.dify.ai/v1/workflows/run
Dify のワークフロー実行エンドポイント。セルフホストの場合は自組織のベースURLに置換。 Method POST このAPIは POST で実行。 Headers (変更なし) - Query String (変更なし) 不要 Body type Raw JSONをそのまま送信 Content type JSON(application/json) application/json
を選択Request content 下記JSON inputs
はワークフロー側の入力に合わせて編集。response_mode
は通常blocking
(同期)。user
は呼び出し元の識別子。https://api.dify.ai/v1/workflows/run
はワークフローを実行する専用エンドポイントです。Bodyでinputs
を渡すことで、ワークフローに動的な入力を与えられます。body
{ "inputs": { "foo": "bar" }, "response_mode": "blocking", "user": "make" }
3. スケジュールの設定
-
「Every 15 minutes」を選択し、「Schedule setting」で定期実行したい日付を設定します。
今回は毎週月曜の午前9時に設定しました。
Makeの無料プランでは最短で15分間隔のスケジュール実行が可能です。これにより、業務時間内に定期的なレポートを自動生成できます。
4. テストと確認
-
「Run once」を選択し、テストを実行します。
-
Status codeが200であることが確認できました。
-
Dify のワークフローログにも表示されているため、成功しています。
GitHub Actions(dify-schedule)での定期実行
次に、GitHub Actionsを用いてDifyのワークフローを定期実行実行する手順を紹介します。
使用するリポジトリは、Dify OSSの公式にも解説があったこちらです。
既存のdify-schedule
リポジトリをフォークすることで、自分の環境に合わせてcron設定やSecretsを自由に変更できるようにします。
手順
- リポジトリのセットアップ
- Actionsの有効化
- Dify のAPIキーの設定
- cronスケジュール設定
- テストと確認
1. リポジトリのセットアップ
-
このリポジトリにアクセスし、フォークします。
2. Actionsの有効化
-
Actionsメニューを選択します。
-
GitHub Actionsの有効化の承認を求められるので、承認します。
3. Dify のAPIキー設定
-
Settingsメニューを選択し、左サイドの「Secrets and variables」の「Actions」を選択します。
その後、「Repository secrets」の「New repository secret」を選択します。
-
以下の表のように項目を設定し、「Add secret」を選択します。
💡なぜ Secrets に入れるのか?
APIキーをコードに直書きするとリポジトリを共有した際に流出するリスクがあります。
Secrets に保存することで安全に保管でき、Workflow 内からsecrets.DIFY_TOKEN
として参照可能になります。項目 値 備考 Name DIFY_TOKEN
ワークフロー内では secrets.DIFY_TOKEN
で参照Secret YOUR_API_KEY
Dify の Workflow API Key -
以下のようになっているか確認して下さい。
4. スケジュール設定
-
Actionsメニューを選択し、「Auto」タブで
auto.yml
を選択します。 -
鉛筆のマークを選択します。
-
定期実行したい日付をcronで設定します。
今回は毎週月曜の午前9時(
0 9 * * 1
)に設定しました。任意の時間を入力後、「Commit changes…」を選択し、「Commit changes」を選択します。
💡cronでの時間設定方法cronは定期実行のスケジュールを設定するための書式です。
今回設定したcronの各項目の意味は以下の通りです。
0:分(0分) 9:時(9時) *:日(毎日) *:月(毎月) 1:曜日(0=日曜、1=月曜、…)
この例では「毎週月曜日の午前9時」に処理が実行されます。
💡なぜ cron で管理するのか?cron式を使うことで、定期実行のスケジュールを「コード」として管理できます。
設定変更の履歴がコミットログに残るため、チームでレビュー・管理しやすくなります。
5. テストと確認
-
Dify のワークフローログにも表示されているため、成功しています。
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 式で実行タイミングを管理するサービスです。
flowchart LR subgraph GoogleCloud["Google Cloud"] Scheduler["Cloud Scheduler\n(cron式で定期実行)"] Functions["Cloud Functions\n(API呼び出しラッパー)"] Secret["Secret Manager\n(APIキーを安全に保存)"] end Dify["Dify API\n(ワークフロー実行)"] Scheduler -->|"OIDC 認証で呼び出し"| Functions Functions -->|"HTTP POST"| Dify Functions --> Secret
この構成のメリットは以下です。
- 認証付きで安全に実行できる
- APIキーを Secret Manager で集中管理できる
- GUI操作だけで本番環境レベルの定期実行が組める
- 将来の拡張(監視、アラート、リトライ)にも対応可能
👉 全体の流れは次のとおりです。
手順
- Secret ManagerにAPIキーを登録
- サービスアカウントの作成
- Cloud Run functionsで関数を作成
- Cloud Schedulerの設定
- テストと確認
1. Secret ManagerにAPIキーを登録
Dify の API キーは Secret Manager に登録します。これにより、コードやYAMLへの直書きを避けられ、① 漏えいリスクの低減、② IAM による最小権限のアクセス制御、③ バージョン管理とローテーション、④ 監査ログの取得 が可能になります。
-
こちらにアクセスし、「シークレットを作成」を選択します。
-
以下の表のように項目を設定し、「シークレットを作成」を選択します。
項目 値 備考 名前 dify_regular_execution
小文字スネークケース推奨(後から参照しやすい) シークレットの値 YOUR_API_KEY
Dify の Workflow API Key。改行なし/余計な空白なしで保存 -
シークレットのパスをコピーし、メモします。
2. サービスアカウントの作成
-
こちらにアクセスし、「サービスアカウントを作成」を選択します。
-
「①サービスアカウントの作成」で、任意のサービスアカウント名を入力します。
-
「②権限」の「ロールを選択」で、「Secret Managerのシークレットサクセサー」と「Cloud Run 起動元」を追加し、「完了」を選択します。
3. Cloud Run functions で関数を作成
-
こちらにアクセスし、「関数を作成」を選択します。
-
以下の表のように項目を設定します。
項目 値 備考 サービスの名前 dify-regular-execution
任意。後のURLやIAMで識別に使用 リージョン asia-northeast1
近いリージョンを推奨(レイテンシ/料金最適化) ランタイム Node.js 22 - 認証 認証が必要 後段の Cloud Scheduler から OIDC 付きで呼び出す前提 -
「コンテナ、ボリューム、ネットワーキング、セキュリティ」に移動し、「シークレットを参照」を選択します。
-
以下の表のように項目を設定してください。
項目 値 備考 名前 DIFY_API_KEY
環境変数名(コードで process.env.DIFY_API_KEY
などで参照可)シークレット dify_regular_execution
Secret Manager で作成したシークレット名 バージョン latest
固定でOK(ロールアウト時は固定バージョンも可) -
「セキュリティ」の「サービスアカウント」で、先ほど作成したサービスアカウントを選択し、「作成」を選択します。
-
index.js
に以下のコードをペーストします。SECRET_NAME
は先ほど保存したシークレットのパスを入力します。コード
index.js
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'); } });
-
package.json
に以下のコードをペーストします。scripts.deploy の
<SERVICE_ACCOUNT_EMAIL>
は、サービスアカウントのメールアドレスに置き換えてください。package.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>" } }
-
作成した関数のURLをコピーし、保存します。
4. Cloud Schedulerの設定
-
こちらにアクセスし、「ジョブを作成」を選択します。
-
「スケジュールを定義する」で、以下の表のように項目を設定します。
項目 値 備考 名前 dify-regular-execution
任意(ジョブID) リージョン asia-northeast1
関数と同一リージョンを推奨 頻度 0 9 * * 1
Cron(例:毎週月曜9:00 JST)。UTC基準にしない場合はタイムゾーン必ず指定 タイムゾーン 日本標準時(JST) 例: Asia/Tokyo
-
「実行内容を構成する」で、以下の表のように項目を設定します。
項目 値 備考 ターゲットタイプ HTTP Cloud Run/Functions を HTTP で呼び出し URL 関数の URL 例: https://<service>-<hash>-<region>.run.app/
HTTPメソッド POST Dify 実行エンドポイントが POST のため (認証)OIDC トークン サービスアカウント+aud=URL 必須(関数が認証必須の場合)。 Cloud Run Invoker
権限を付与し、aud はサービスURLを指定。
5. テストと確認
-
Cloud Schedulerで作成したジョブを選択し、「強制実行」を選択します。
-
「最後のステータス」が「成功」になったので、一連の流れが成功しました。
-
Dify のワークフローログにも表示されているため、成功しています。
おわりに
本記事では、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 などの方法を検討がいいかもしれません。
サービス紹介
Dify の構築や、ワークフローの作成は、見た目以上に複雑で思っていたより大変な部分も多いんです。でも、ご安心ください。弊社のサービスで、そんな面倒な作業も丸投げできちゃいます。
「自分たちで全部やるのは時間もないし無理だな」と感じたとき、ぜひお任せください。本当にやりたいことに集中できるよう、しっかりサポートいたします。お気軽にご相談ください!