はじめに
ノーコード自動化ツール Make(旧 Integromat) を使って、Google FormsやWebhookをトリガーに、OCI上のMySQLへのデータ書き込みやDiscord通知を構築しました。
本記事では、Make初心者の私が実際につまづいたポイントをまとめます。公式ドキュメントだけではわかりにくい「あるある」が多かったので、これから始める方の参考になれば幸いです。
構築したシナリオ
保育園DXを想定した仕組みを作っています。
シナリオ1: Google Forms → MySQL → Discord通知
ユースケース1: 入園希望者が問い合わせを行った際に、DBに記録してDiscordへ通知する。

シナリオ2: Webhook → Iterator → Discord通知(Rails APIからの出欠データ受信用)
ユースケース2: 出席簿(スプレッドシート)を更新した際にGAS→APIを経由してDBに書き込みをする。更新完了時にWebHookを介して欠席者をDiscordに通知する。

つまづきポイント一覧
1. 「The module is not set up」は正常
Webhookモジュールを追加した直後、以下の警告が出て焦りました。
- The module is not set up.
- The module contains unsaved changes.
これは正常です。 Webhookはデータを一度受信しないとデータ構造が定まらないため、この警告が出ます。テストデータを送信すれば解消されます。
2. Webhookのテストは「Run once → データ送信」の順番が重要
Webhookにcurlでテストデータを送っても何も起きない…という状況にハマりました。
正しい手順:
- Make画面で Run once をクリック
- 「Waiting for data」 と表示されるのを確認
- その状態のまま curlやPostmanでデータを送信
Run onceを押す前にデータを送ると、Makeが待ち受けていないので受信されません。
3. 「Unprocessed data in webhook queue」が出たらOKを押す
Run onceのタイミングがずれた場合など、Webhookのキューにデータが溜まることがあります。
Unprocessed data in webhook queue
You can run the scenario with the existing data, or wait for more data.
このメッセージが出たら、慌てずに 「OK」をクリック すれば、キュー内のデータでシナリオが実行されます。
4. Google Formsの公開URLをそのまま入れてはいけない
Google FormsのWatch Responsesモジュールで、フォームの公開URL(https://docs.google.com/forms/d/e/xxxxx/viewform)をForm IDにそのまま入力したところ、以下のエラーが出ました。
404: NOT_FOUND - Requested entity was not found
原因: 公開URL内のIDと、Makeが必要とする編集用のフォームIDは別物です。
対処: Form ID欄にはURLを貼り付けず、ドロップダウンからフォームを選択 してください。ドロップダウンにフォームが表示されない場合は、接続しているGoogleアカウントがそのフォームのオーナーまたは編集者であるか確認してください。
5. Google Formsの回答データはネストが深い
Google Formsモジュールから取得したデータをMySQLにそのままマッピングすると、以下のようなJSON構造がそのまま入ってしまいます。
{"questionId":"256083fe","textAnswers":{"answers":[{"value":"テスト"}]}}
対処: マッピング時にデータ構造を展開し、value まで辿って選択する必要があります。
answers[1] > textAnswers > answers[] > value
番号はフォームの質問の並び順に対応しています。Google Formsモジュールをクリックして Output を展開すると、どの番号がどの質問かを確認できます。
6. 「Value must not be empty」で自動生成カラムに困る
MySQLの Insert a Row モジュールで、id や created_at など自動生成されるカラムを空欄にすると、以下のエラーが出ます。
Value must not be empty
対処法は2つ:
A. チェックボックスをオフにして除外する
各フィールドの左にあるチェックボックスをオフにして、マッピング対象から外す。
B. Execute a query モジュールに切り替える(確実)
Insert a Rowの代わりに Execute a query を使い、SQLで対象カラムだけを指定する。
INSERT INTO form_entries (name, email, message, created_at)
VALUES ('{{1.name}}', '{{1.email}}', '{{1.message}}', NOW())
Make側で日本時間のタイムスタンプを入れたい場合は、formatDate 関数が使えます。
{{formatDate(now; "YYYY-MM-DD HH:mm:ss"; "Asia/Tokyo")}}
7. マッピングの候補が出てこない
MySQLやDiscordモジュールのマッピング画面で、前のモジュールのデータが候補として表示されないことがありました。
原因: 前のモジュール(Google FormsやWebhook)が一度もデータを受信していない
対処:
- 後続のモジュールを一旦切り離す
- トリガーモジュールだけの状態で Run once → テストデータを送信
- データが取得できたことを確認してから、後続モジュールを再接続
Makeはモジュールが実際にデータを受信して初めて、データ構造を認識します。 未受信の状態では後続のマッピング候補に何も表示されません。
8. 「A trigger must be the first module in a scenario」
Discordモジュールを先に追加してからWebhookを追加しようとしたところ、以下のエラーが出ました。
A trigger must be the first module in a scenario.
Makeではトリガー(起点)モジュールが必ず最初でなければいけません。
対処:
- すべてのモジュールを削除
- まっさらなキャンバスで + をクリック
- トリガーモジュール(Webhookなど)を最初に追加
- その後で後続モジュールを追加
MakeのMySQLモジュールにテーブル変更検知のトリガーはない
当初、MakeのMySQLモジュールで attendances テーブルへのINSERTを自動検知してDiscord通知する構成を考えていました。しかし、MakeのMySQLモジュールにはテーブル変更を検知するトリガーがありません。
代替策として、Rails APIからMakeのWebhookを直接叩く 構成にしました。
GAS → Rails API → attendancesに書き込み
→ MakeのWebhook URLにPOST
→ Make → Iterator → Discord通知
Rails側に数行追加するだけで、DB書き込みと同時にリアルタイムでDiscord通知が飛びます。
まとめ
Makeは直感的なUIで自動化が組めるツールですが、初心者がハマりやすいポイントがいくつかあります。特に重要なのは以下の3点です。
- トリガーモジュールは必ず最初に配置する
- マッピング候補を出すには、先にテストデータを流す必要がある
- MakeのMySQLモジュールにテーブル変更検知はないので、Webhook連携で補う
これらを押さえておけば、スムーズにシナリオを構築できると思います。