はじめに
業務効率化の一環として、Slackチャンネル内でコマンドを実行するだけでGoogleスプレッドシートを編集できるように設定しました。本記事では、その設定手順をまとめています。
同様の仕組みを導入される際に、少しでも参考になれば幸いです。
ここでは、「iPhone端末」の貸し出し状況を管理するスプレッドシートを例に挙げて説明します。
背景
私が所属する開発部署では、検証用の端末を借りる際に、利用者が端末の写真を撮影し、「何時まで借りたいか」を添えて毎回Slackで端末管理者(私)にメンションを送る必要がありました。
しかし、管理者には一日に何度もメンションが届くため作業が頻繁に中断されてしまい、借りる側も写真を撮って連絡する手間がかかっていました。
そこで、これらの手間を減らし、借りる人・管理者双方の負担を軽くするために、Slackから直接スプレッドシートを操作できる仕組みを導入することにしました。
処理の流れ
-
Slackでコマンド実行
例: /borrow {端末ID} {返却日時} のような入力 -
Slack AppがGASのWebhook URLへHTTPリクエストを送信
→ doPost(e) 関数で受け取る -
GASがスプレッドシートを操作(記入・更新・検索など)
-
必要に応じてSlackにレスポンスを返す(即時 or 非同期)
Webhookとは?仕組みやメリット、APIとの違い、利用方法について分かりやすく解説
手順1: Googleスプレッドシートを作成
https://sheets.google.com にアクセスして、コマンドによる編集の対象となるGoogleスプレッドシートを作成します。
ファイル名:”貸し出し管理”
シート名:”iPhone”
各列と行は、以下の画像のように作成しました。
手順2: GASを作成
Googleスプレッドシートが作成できたら、GAS(Google Apps Script)を作成します。
スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択
以下のようなコードを貼り付けます
function doPost(e) {
// Slack から送られてくるコマンド名を取得 (例: /borrow)
const command = e.parameter.command;
// Slack で入力されたテキストを取得 (例: "5 7月31日18時")
const text = e.parameter.text;
// Slack ユーザー名を取得(未設定なら "unknown" を入れる)
const userName = e.parameter.user_name || "unknown";
// 借用処理は /borrow コマンドのみ対応する
if (command !== '/borrow') {
return ContentService.createTextOutput("無効なコマンドです");
}
// 入力テキストをスペース区切りで分割
// 先頭を deviceId として扱い、残りを返却予定日時としてまとめる
const [deviceIdStr, ...dateParts] = text.trim().split(" ");
const deviceId = Number(deviceIdStr); // 端末IDを数値に変換
const returnDate = dateParts.join(" "); // 日時部分を再結合
// 入力チェック: ID が数値でない or 日付が空の場合はエラーを返す
if (isNaN(deviceId) || !returnDate) {
return ContentService.createTextOutput("形式が不正です。例: `/borrow 5 7月31日18時`");
}
// 操作対象のスプレッドシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues(); // 全データを配列として取得
// deviceId が一致する行を探す (1行目はヘッダーのため i=1 から開始)
for (let i = 1; i < data.length; i++) {
if (Number(data[i][0]) === deviceId) {
// C列(3列目)に借りた人の名前を記録
sheet.getRange(i + 1, 3).setValue(userName);
// D列(4列目)に返却予定日時を記録
sheet.getRange(i + 1, 4).setValue(returnDate);
// Slack に成功メッセージを返す
return ContentService.createTextOutput(`端末ID ${deviceId} を ${userName} さんで登録しました`);
}
}
// 一致する端末IDが見つからなかった場合のエラーメッセージ
return ContentService.createTextOutput("該当する端末IDが見つかりませんでした");
}
- 右上の「デプロイ」をクリック
- 「新しいデプロイ」を選択
- 以下内容の内容を設定し、「デプロイ」をクリック
種類の選択:ウェブアプリ
説明:任意の説明文
次のユーザーとして実行:自分
アクセスできるユーザー:全員 - ウェブアプリURLが発行されるので、コピーしておきます
手順3: Slack Appを作成
GASのデプロイが完了したら、作成したGASを実行するためのSlack Appを作成します。
- https://api.slack.com/apps にアクセスし、「Create New App」
- 「From scratch」で作成
- アプリ名とワークスペースを指定して「Create App」
App Name:(例)RentalDevice
ワークスペース:コマンドを実行したいSlackのワークスペース - 作成したSlack Appの Settings >> Basic Information のページが表示される
手順4: コマンドを作成
作成したSlack Appに、コマンドを登録します。
- サイドメニューから「Slash Commands」を選択
- 「Create New Command」を選択
- 以下の画像のように設定し、「Save」をクリックします
手順5: Slackにインストール
作成したSlack Appを、Slackのワークスペースにインストールします。
- サイドメニューから「Install App」を選択
- 「Install to {ワークスペース名}」をクリック
手順6: コマンドを実行
Slackのワークスペース内の任意のチャンネル内で、以下のコマンドを実行します。
/borrow {端末ID} {返却日時}
例)/borrow 5 7月22日10時
以下の画像のように、スプレッドシートが編集されていると思います。
GASを編集したい場合
あとからコマンドの処理内容を変更したい場合は、
- GASを修正する
- 右上の「デプロイ」をクリック
- 「デプロイを管理」を選択
- 編集ボタンをクリック
- 「バージョン」をクリック
- 「新バージョン」を選択
- 「デプロイ」をクリック
おわりに
この仕組みを導入したことで、誰もが端末の貸し出し状況を把握しやすくなりました。
また、端末管理者が毎回貸し出し/返却の管理をする必要がなくなりました。
AIエージェントを使って便利なコマンドをどんどん追加していきましょう!