🔧 GASからRetoolへデータを一括送信する方法【コード例付き】

![GASからRetoolへデータを一括送信.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/2e8c4b9b-088e-a116-99ea-7da8dbfb3946.png)

## はじめに

Google Apps Script（以下、GAS）は、Googleの各種サービス―スプレッドシートやドキュメント、フォームなど―を自動化・カスタマイズできる軽量なJavaScript環境です。今回の記事では、ローコードツールとして注目されるRetoolとGASを組み合わせ、Webアプリや業務用ツールのデータ連携を自動化する方法にフォーカスします。  
  
💡 **ポイント**  
- GASを使うことで、Googleサービス内に自作のAPIエンドポイントを用意可能  
- Retoolは多彩なデータソース接続ができるため、既存業務の自動化やダッシュボード作成に最適

---

## GASとRetool連携の全体像

以下のフローチャートは、GASからRetool連携を自動化する大まかな流れを表しています。

```
[開始]
   │
   ▼
[Google スプレッドシートを作成]
   │
   ▼
[スクリプトエディタでGASプロジェクト作成]
   │
   ▼
[RetoolのAPIエンドポイント設計]
   │
   ▼
[GASでUrlFetchApp.fetch()を利用しリクエスト送信]
   │
   ▼
[Retoolがデータ加工・表示を実行]
   │
   ▼
[自動更新・通知]
   │
   ▼
[終了]
```

---

## ステップ 1: 必要な準備

まずは以下の環境を準備しましょう。

- **Googleアカウント**  
  ※スプレッドシートやGASを利用するために必要です

- **Google スプレッドシート**  
  ※操作対象のシート。自動連携の結果はここに出力

- **GASプロジェクトの作成**  
  ※スプレッドシートの「拡張機能」→「Apps Script」から新規プロジェクトを開始

- **Retoolアカウント**  
  ※ローコードツールRetool上にAPI連携用のリソース（エンドポイント）を作成しておきます

- **APIトークンや必要な認証情報**  
  ※連携先のAPI仕様に合わせて設定する情報

🚀 この準備段階ができれば、実際に自動化処理を行う準備はほぼ完了です。

---

## ステップ 2: GASでの基本操作

### GASプロジェクト作成と基本コード

1. Google スプレッドシートを開き、上部メニューから「拡張機能」→「Apps Script」を選択。  
2. 以下のようなサンプルコードを書いてみましょう。

```javascript
// GASプロジェクトのエントリーポイント：Retool連携関数
function triggerRetoolIntegration() {
  // Retool APIのエンドポイントURL（例）
  var retoolUrl = "https://api.retool.com/your-endpoint";
  
  // APIキーなどの認証情報（必要に応じて設定）
  var apiKey = "YOUR_API_KEY_HERE";
  
  // リクエストヘッダーの設定
  var headers = {
    "Authorization": "Bearer " + apiKey,
    "Content-Type": "application/json"
  };
  
  // 送信するデータ（例：スプレッドシート内の最新のデータを送る）
  var payload = {
    sheetData: getSheetData()  // 下記のgetSheetData()関数でシートのデータを取得
  };
  
  // リクエストオプションの作成
  var options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify(payload)
  };
  
  // Retool APIへリクエスト送信
  try {
    var response = UrlFetchApp.fetch(retoolUrl, options);
    Logger.log("Retoolからのレスポンス：" + response.getContentText());
  } catch (e) {
    Logger.log("エラー発生：" + e);
  }
}

// シンプルなサンプル：スプレッドシートのデータを取得する関数
function getSheetData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("データシート"); // 対象のシート名
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();
  return values;
}
```

🔍 **ポイント解説**  
- **UrlFetchApp.fetch()**  
  GASの組み込み関数で、HTTPリクエストを容易に実行できます。ここでは、POSTメソッドでRetool APIにデータを送信しています。  
- **JSON.stringify()**  
  送信するデータをJSON形式に変換。Retool側でデータを受け取って適切に処理するために必須です。

---

## ステップ 3: Retool側の設定

Retoolでは、取得したデータを使ってダッシュボードを作成したり、加工処理を実施できます。  
  
**Retoolで行う設定例：**

- APIエンドポイントの設定  
  → GASからのリクエストを受け付けるエンドポイントを構築  
- データソースの接続  
  → 受信データを内部データベースや既存のクラウドサービスと連携  
- コンポーネントの配置とデータ表示  
  → テーブル、グラフ、チャートなどを用いてデータを可視化

💡 **Tip:** RetoolではJavaScriptによるデータトランスフォームが可能なため、受信したデータを自由に整形でき、グラフ描画ライブラリ（Plotlyなど）ともスムーズに連携できます。

---

## ステップ 4: 自動化と定期実行の設定

GASでは、トリガー機能を利用して定期的にRetool連携処理を実行することが可能です。例えば、毎朝9時に最新データ連携を走らせる設定は以下のように行います。

1. GASエディタの左側メニュー「時計」アイコンをクリック。
2. 「トリガーを追加」を選択し、関数名に「triggerRetoolIntegration」、イベントの種類を「時間主導」、実行間隔を「毎日9:00～10:00」などに設定します。

これにより、手動操作なしで自動連携処理が実現できます。  
  
⏰ **自動化例:**  
- 毎朝のデータ更新  
- リアルタイムダッシュボードの更新通知  
- 定期レポートの生成・送信

---

## まとめ

この記事では、GASとRetoolを組み合わせた自動化連携の基本的な流れをご紹介しました。  
  
**振り返り：**  
- **ステップ 1:** 必要な環境（Googleアカウント・スプレッドシート・Retoolアカウント）の準備  
- **ステップ 2:** GASプロジェクト作成と基本操作、コードサンプルによるデータ取得・送信  
- **ステップ 3:** Retool側のAPIエンドポイントとデータ連携設定  
- **ステップ 4:** 定期実行トリガーの設定で自動化を実現  

ぜひこのガイドを参考に、あなたの業務自動化プロジェクトに活用してください。質問や不明点があれば、コメント欄や各コミュニティで気軽にシェアしてくださいね。  

Happy Coding! ✨🖥️

---

【参考リンク】  
- [Google Apps Script公式ドキュメント](https://developers.google.com/apps-script/overview?hl=ja)  
- [Retool公式ドキュメント](https://docs.retool.com/)

以上、GASとRetoolで実現する業務自動化の魅力を体感していただけると幸いです。

---
## **💖 ご支援いただけませんか？**

![スクリーンショット 2025-01-31 7.51.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/f9d94b4d-dbd3-ab70-6b2b-dfc289cda562.png)


このブログでは、高品質な情報提供と学習活動を通じて、読者の皆さまのお役に立つことを目指しています。もしこの記事が役立ったと感じていただけましたら、ご支援いただけると幸いです！

---

### **暗号資産による寄付**
以下のウォレットアドレスをご利用ください。**重要：Ethereum (ETH)、BNB Chain (BNB)、Polygon (MATIC)、Avalanche (AVAX) は、全て以下の同一アドレスを使用しますが、送金ネットワークの選択を間違えると資金が失われます！** 送金時には、**絶対に**使用するネットワーク（例: ERC-20、BEP-20、Polygon、Avalanche C-Chain）を**必ず**正しく選択してください。

---

<img src="https://cryptologos.cc/logos/ethereum-eth-logo.png" alt="Ethereum Logo" width="20">

**Ethereum (ETH)**  （ネットワーク: ERC-20）

```
0x5CDA2F68f59F641B00aD172475c3d5fC10321174
```
<img src="https://cryptologos.cc/logos/binance-coin-bnb-logo.png" alt="BNB Logo" width="20">

**BNB Chain (BNB)**  （ネットワーク: BEP-20）
```
0x5CDA2F68f59F641B00aD172475c3d5fC10321174
```
<img src="https://cryptologos.cc/logos/polygon-matic-logo.png" alt="Polygon Logo" width="20">

**Polygon (MATIC)**   （ネットワーク: Polygon）

```
0x5CDA2F68f59F641B00aD172475c3d5fC10321174  
```
<img src="https://cryptologos.cc/logos/avalanche-avax-logo.png" alt="Avalanche Logo" width="20">

**Avalanche (AVAX)**    （ネットワーク: Avalanche C-Chain）

```
0x5CDA2F68f59F641B00aD172475c3d5fC10321174
```
<img src="https://cryptologos.cc/logos/solana-sol-logo.png" alt="Solana Logo" width="20">

**Solana (SOL)**  
```
EnPFbqDbF67rU9mAPvfgh4YYtncJNbFQ9NLQ5R6z5S2f
```

<img src="https://cryptologos.cc/logos/stellar-xlm-logo.png" alt="Stellar Logo" width="20">

**Stellar (XLM)**    メモ: 必要に応じて入力してください。

```
GCSMWCACKVEZ737GZAV4AJRFL52ZZKVQ7M3B3KYY64JJGOAO2GDYKABO 
```

<img src="https://cryptologos.cc/logos/xrp-xrp-logo.png" alt="Ripple Logo" width="20"> 

**Ripple (XRP)**    タグ: 必要に応じて入力してください。

```
r1s4EASr3zQRrfpDA3ptTahezBhGo2hhN
```

<img src="https://cryptologos.cc/logos/cardano-ada-logo.png" alt="Cardano Logo" width="20">

**Cardano (ADA)**  

```
addr1q8heq6ddw8rwlqa5hqlucnfk36arah9tzc8ajxvu83870h7lrre25wzq9yemex857we56cm0xu8tmxqvm8nykmtgsjdqavdpv7
```

<img src="https://cryptologos.cc/logos/dogecoin-doge-logo.png" alt="Dogecoin Logo" width="20">

**Dogecoin (DOGE)**  
```
DRFZ9JhAk3DTtu1tV85cawekWNrm1vKm3H
```

---

### **資金用途**
寄付金は以下の目的で活用させていただきます：

1. サーバー維持費やデザインツール購入  
2. 学習活動（オンラインコース受講・書籍購入）  
3. 読者向け無料コンテンツ制作  

ご協力いただいた皆さまには心より感謝申し上げます！ 🙏

---

### **補足情報**
- **Ethereum (ETH)、BNB Chain (BNB)、Polygon (MATIC)、Avalanche (AVAX)について**  
  上記4つのネットワークは**同じウォレットアドレス**（`0x5CDA2F68f59F641B00aD172475c3d5fC10321174`）を使用します。ただし、送金時には、**絶対に**使用するネットワーク（例: ERC-20、BEP-20、Polygon、Avalanche C-Chain）を**必ず**正しく選択してください。

- USDCやUSDTなどのステーブルコインも、対応するネットワーク経由であれば送金可能です。ただし、**送金先のネットワークと選択するネットワークが一致していることを必ず確認してください。**

- 初回送金時には少額でテスト送金することをおすすめします。

---