APIとWebhookで「繋ぐ」自動化

ノーコードツールの限界

ZapierやMake(旧Integromat)、Microsoft Power Automateなどのノーコードツールは、対応しているサービス同士を視覚的に「繋ぐ」ことで自動化を実現します。コードを書かずに設定できる手軽さがある一方、以下のような限界もあります。

  • 対応サービスの制限:あらかじめ用意されているコネクターに存在しないサービスは直接繋げられない
  • 処理の柔軟性:「もし〇〇だったら別の処理を」という分岐や、データ変換の細かい制御が難しい
  • コスト:実行回数や機能に応じた課金が発生し、業務規模が大きくなると月額費用が膨らむ

これらの限界に突き当たったとき、APIとWebhookを直接扱う方法が選択肢に入ってきます。

APIとは何か

API(Application Programming Interface)は、サービス同士がデータをやりとりするための窓口です。多くのクラウドサービスはAPIを公開しており、定められた形式でリクエストを送ると、データの取得・登録・更新・削除などの操作を外部から行えます。

たとえばGoogleスプレッドシートのAPIを使えば、Pythonスクリプトから直接シートにデータを書き込めます。SlackのAPIを使えば、プログラムから任意のチャンネルにメッセージを送れます。

ノーコードツールのコネクターは、このAPIをGUIから扱えるようラップしたものです。APIを直接使うということは、その中間層を取り除いて直接操作するということです。

Webhookとは何か

Webhookは、「何かが起きたとき、指定したURLに自動でデータを送る」仕組みです。APIがこちらからサービスに問い合わせる「引き型」だとすると、Webhookはサービス側からデータが届く「押し型」です。

代表的な使用例:

  • GitHubにコードがプッシュされたとき → 指定URLにイベント情報を送信
  • Stripeで決済が完了したとき → 指定URLに決済データを送信
  • Google Formに回答があったとき → Apps Scriptを経由してデータを転送

Webhookを受け取る側は、送られてきたデータを処理するプログラムを用意しておく必要があります。

具体的な連携例

以下は、APIとWebhookを組み合わせた典型的な自動化フローです。

フォーム送信 → Slack通知 → スプレッドシート記録

  1. Googleフォームに回答が送信される
  2. Google Apps Script(GAS)のWebhook受信関数が起動
  3. 回答内容をSlack APIで指定チャンネルに通知
  4. 同時に、Google Sheets APIで管理用スプレッドシートに行を追加

このフローはノーコードツールでも実現できますが、「通知メッセージのフォーマットを複雑に制御したい」「特定の回答内容によって送信先チャンネルを変えたい」「スプレッドシートの複数シートに条件で振り分けたい」といった要件が加わると、プログラムによるAPI連携の方が対応しやすくなります。

Google Apps Scriptの活用

Googleのサービスと連携する自動化では、Google Apps Script(GAS)が有効な選択肢です。JavaScriptベースで記述でき、以下の特徴があります。

  • GoogleスプレッドシートやGmailと同じアカウントで動作する
  • トリガー機能で「フォーム送信時」「時刻になったら」などの起点を設定できる
  • 外部APIへのHTTPリクエストを送信する UrlFetchApp が標準で使える
  • サーバーの準備が不要で、ブラウザ上でコードを書いて即実行できる

たとえば以下のようなコードで、SlackにメッセージをPOSTできます。

function sendSlackNotification(message) {
  const webhookUrl = 'https://hooks.slack.com/services/XXXX/XXXX/XXXX';
  const payload = JSON.stringify({ text: message });
  UrlFetchApp.fetch(webhookUrl, {
    method: 'post',
    contentType: 'application/json',
    payload: payload
  });
}

Pythonで外部APIを呼ぶ基本

Python環境がある場合、requestsライブラリを使ってAPIを呼ぶのが基本的な方法です。

import requests

url = 'https://hooks.slack.com/services/XXXX/XXXX/XXXX'
data = {'text': 'テスト通知'}
response = requests.post(url, json=data)
print(response.status_code)

認証が必要なAPIでは、リクエストヘッダーにAPIキーやトークンを付与します。各サービスのAPIドキュメントに記載された形式に従います。

どこから始めるか

APIとWebhook連携を始める際の現実的なステップは以下の通りです。

  1. まずノーコードツールで試す:Zapier・Makeで実現できるなら、それで十分です。コードを書く必要はありません
  2. 限界を感じたら一部をGASに置き換える:Googleサービスが絡む処理はGASが扱いやすい。既存のノーコードフローと並行して使えます
  3. Python連携は処理が複雑になってから:データ加工・複数APIの組み合わせ・定期バッチ処理が必要になった段階で検討します

ノーコードツールとAPIの直接連携は排他的ではありません。「ノーコードツールでWebhookを受け取り、PythonでデータをAPIに送る」のような組み合わせも実務では一般的です。

ツールを目的にせず、「この業務をどう自動化するか」という問いから逆算してツールを選ぶことが、無駄のない自動化につながります。