🙋‍♀️

ド級の機械音痴の妻にプログラミングさせてみたwww

に公開

1. はじめに

株式会社 MBK デジタルの古畑です。

突然ですが、皆さんの職場では、こんな「虚無時間」ありませんか?
「スプレッドシートで管理しているタスク、誰が未対応だっけ…?」と何度も確認し、個別でリマインドを送る作業。

この「何度も同じリマインドを送る作業」、地味にメンタルと時間を削ってきますよね。
実はこの悩み、私の妻(同僚、プログラムを書いた経験は1行もなし)が実際に抱えていたもの。

夫の私に聞こうにも忙しそうにしていたらしく、代わりに彼女が頼ったのがAIの「Gemini」でした。
最終的にGeminiは、この課題を解決する2つの方法を提示してくれました。

  • プログラミング不要のツール「Zapier」を使う方法
  • スプレッドシートの機能「Google Apps Script(GAS)」を使う方法

果たして、初心者は無事に「虚無時間」から解放されるのでしょうか…!?

この記事は、こんな方におすすめです。

  • 面倒なリマインド業務を自動化したい非エンジニアの方
  • プログラミングに興味はあるけど、何から始めたらいいかわからない方
  • GASやZapierって聞いたことあるけど、実際どうなの?と思っている方

2.【ノーコード編】Zapierでサクッと解決!

最初にGeminiが提案したのが、プログラミングが一切不要な「Zapier(ザピアー)」というツールを使う方法です。

Zapierとは?
異なるWebサービス同士を連携させ、作業を自動化できるツール。
「〇〇したら、△△する」というルール(Zap)を作るだけで、プログラミング無しに色々なサービスを繋げられます。

ステップ1:スプレッドシートを整える

Zapierが「誰に」「何を」送るのかを読み取れるように、スプレッドシートの列を整えます。

A列:案件名など(メッセージに含めたい内容)
B列:対応状況(「未対応」「完了」などを入力)
C列:Slackの担当者名(重要: Slackの「表示名」と一字一句同じ名前を入力)

案件名 対応状況 Slackの担当者名
7月度A社請求書作成 未対応 山田 太郎
B社向け提案資料作成 対応済 鈴木 一郎

ステップ2: トリガー(きっかけ)を設定する

  • Zapierにログインし、「+ Create」>「New Zap」を選択。
  • トリガーに「Google Sheets」を選び、イベントを「New or Updated Spreadsheet Row(行が追加・更新されたら)」に設定。
  • 監視したいスプレッドシートとシート名を選択。

ステップ3: フィルター(条件)を設定する

  • このままだと「完了」の時も通知が飛んでしまうので、条件を追加。
  • 「+」ボタンで「Filter」を追加。
  • 「Field: 対応状況」 「Condition: (Text) Exactly matches」 「Value: 未対応」 と設定し、「対応状況が "未対応" の場合のみ」次に進むようにします。

ステップ4: アクション(実行すること)を設定する

  • アクションに「Slack」を選び、イベントを「Send Direct Message」に設定。
  • To Username (宛先): スプレッドシートから取得した「C列:Slackの担当者名」のデータを指定。
  • Message Text (本文): 「【未対応タスク】案件名:[A列の案件名データ] の確認をお願いします!」のように、スプレッドシートのデータと固定メッセージを組み合わせて作成。
  • 最後に「Publish」を押して有効化すれば完了!

実際に妻も挑戦しようとしたのですが…

妻の感想:「うーん、画面が全部英語でちょっと怖いかも…。よくわからないツールを会社のPCに入れていいのかも不安だし…」

そう、多くの非エンジニアの方が直面する「英語の壁」と「セキュリティの壁」です。
便利なツールであることは間違いないのですが、見慣れない英語の画面に戸惑ってしまったり、そもそも外部ツールを自由に追加して良いのか分からなかったり、というケースは少なくありません。

【メリット】

  • プログラミング知識が一切不要。
  • 直感的なUIで、視覚的に設定できる。

【デメリット】

  • UIが基本的に英語。
  • 無料プランだと機能に制限がある。
  • 会社のセキュリティポリシーによっては利用が難しい場合がある。

というわけで、Zapierの導入は一旦見送りに。そして妻は、社内のSlackに助けを求めました。

【誰かPCに詳しい人】
依頼タスク未対応の方に個別リマインドする虚無時間をどうにか減らしたく、Gemini先生に「スプシとSlack連携して、未対応者に勝手にDM送れない?」って相談してみたんですが、その中で出てきた「Zapier」って信頼できるやつなんですかね…?
もし他に「それならこっちの方法の方が簡単だよ〜」みたいなのがあれば、教えてほしいです…!!

3.【プログラミング(コピペ)編】GASでがっつりカスタマイズ!

すると、この妻の投稿に、社内のエンジニアからはこんな声が。

スプシで管理しているならGASをぺろって書いちゃえば解決....
GeminiはまだAPIつかってゴニョゴニョするのが苦手なのでGAS書いた方が確実ですね

Googleスプレッドシートに標準で備わっている「Google Apps Script(GAS)」を使えば、無料で、より柔軟な自動化ができるようです。
「プログラミング…」と一瞬顔が曇る妻でしたが、再びGeminiに「GASを使った方法を教えて!」と聞き、「コピペでいける!」とわかると、再び挑戦してくれることに。

ステップ1:【準備】Slack側の設定(許可証をもらう)

まず、GASがあなたの代わりにSlackへ投稿できるよう、専用の「許可証」を発行します。

  • Slack API のサイトにアクセスし、「Create New App」→「From scratch」を選択。
  • アプリ名を「スプレッドシート連携」などと付け、連携したいワークスペースを選択。
  • 左メニュー「OAuth & Permissions」を選び、下にスクロール。
  • 「Scopes」>「Bot Token Scopes」で「Add an OAuth Scope」をクリックし、「chat:write」を追加。
  • ページ上部の「Install to Workspace」をクリックし、許可。
  • xoxb- から始まる「Bot User OAuth Token」が表示されたら、コピーしてメモ帳などに貼り付けておきます。これが許可証です。

ステップ2:【準備】スプレッドシートの用意

Zapierの時と少しだけ列名が変わります。特にC列が重要です。

A列:案件名
B列:対応状況
C列:SlackメンバーID(重要!)

案件名 対応状況 SlackメンバーID
7月度A社請求書作成 未対応 U012A3BCDE
B社向け提案資料作成 対応済 U456F7GHJK

※ SlackメンバーIDの調べ方
SlackでDMを送りたい相手のプロフィールを開き、「その他(…)」>「メンバーIDをコピー」で取得できます。

ステップ3:【実践】GASの作成(コードをコピペ&設定)

いよいよプログラミングです!と言っても、ほぼコピペでOK!

  • 準備したスプレッドシートのメニューから「拡張機能」>「Apps Script」を選びます。
  • 最初から書かれているコードを全て消して、以下のコードをそのまま貼り付けてください。

// ▼▼▼ 設定項目 ▼▼▼

// 1. Slackの許可証(ボットトークン)を貼り付けてください
const SLACK_ACCESS_TOKEN = 'ここにSlackのトークンを貼り付け';

// 2. データを読み込むシート名を入力してください
// (例:シート名が「タスク一覧」なら 'タスク一覧' と入力)
const SHEET_NAME = 'task'; // ここではシート名を「task」にしています

// ▲▲▲ 設定はここまで ▲▲▲


// 未対応タスクをSlackに通知するメインの関数
function sendReminder() {
  // 指定したシートを取得します
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
  
  // シートの全てのデータを二次元配列として取得します
  const data = sheet.getDataRange().getValues();
  
  // 1行目はヘッダーなので、2行目からチェックを開始します
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    const taskName = row[0]; // A列の案件名
    const status = row[1];   // B列の対応状況
    const memberId = row[2]; // C列のSlackメンバーID
    
    // もしB列が「未対応」で、C列にIDが入っていたら
    if (status === '未対応' && memberId !== '') {
      // Slackに送信するメッセージを作成します
      const message = `【未対応タスクのお知らせ】\n担当の「${taskName}」が未対応のままです。\n確認をお願いします!`;
      
      // SlackにDMを送信する関数を呼び出します
      sendSlackDM(memberId, message);
    }
  }
}

// SlackにDMを送信する専門の関数
function sendSlackDM(memberId, message) {
  const url = 'https://slack.com/api/chat.postMessage';
  const options = {
    'method': 'post',
    'contentType': 'application/json; charset=utf-8',
    'headers': {
      'Authorization': 'Bearer ' + SLACK_ACCESS_TOKEN
    },
    'payload': JSON.stringify({
      'channel': memberId, // 送信先のメンバーID
      'text': message      // 送信するメッセージ本文
    })
  };
  
  UrlFetchApp.fetch(url, options);
}

  • 貼り付けたコードの**設定項目(▼▼▼〜▲▲▲の間)**を書き換えます。
    • 'ここにSlackのトークンを貼り付け' の部分を、ステップ1でメモしたxoxb-...の文字列に置き換えます。
    • 'task' の部分を、実際に使うシート名に書き換えます。
  • フロッピーディスクのアイコン💾「プロジェクトを保存」をクリックします。

ステップ4:テスト実行と権限の承認

コードが正しく動くかテストします。ここが初心者にとって一番の山場です!

  • エディタ上部の「▷ 実行」ボタンをクリックします。
  • 「承認が必要です」と表示されたら「権限を確認」をクリック。
  • 自分のGoogleアカウントを選択します。
  • 「このアプリは Google で確認されていません」という警告が出ますが、自分で作った安全なプログラムなので大丈夫。「詳細」を押し、一番下の「(安全ではないページ)に移動」をクリックします。
  • 最後に「許可」をクリックします。
  • 実行が完了し、スプレッドシートで「未対応」になっている担当者にSlack DMが届けば大成功です!

ステップ5:【自動化】トリガーの設定

最後に、このプログラムが毎日決まった時間に自動で動くように設定します。

  • GASエディタの左メニュー、時計のアイコン「トリガー」をクリック。
  • 右下の「+ トリガーを追加」をクリック。
  • 以下の通り設定し、「保存」をクリックします。
    • 実行する関数を選択: sendReminder
    • イベントのソースを選択: 時間主導型
    • 時間ベースのトリガーのタイプを選択: 日付ベースのタイマー
    • 時刻を選択: 午前 9 時~10 時 など、好きな時間帯を選ぶ。

妻も挑戦した結果…

妻の感想:「自分の手で『リマインドbot』が動いた瞬間、めちゃくちゃ感動した!ちょっと賢くなった気分!」

少し手順は多いですが、一度設定してしまえば、あとは完全に放置でOK。無料で使えるのも大きな魅力です。

【メリット】

  • 完全無料で利用できる。
  • コードを書き換えれば、メッセージ内容などを自由にカスタマイズできる。

【デメリット】

  • 最初の設定(特にAPIトークン取得と権限承認)が少し複雑。
  • コードにアレルギー反応が出る人もいる。

4. まとめ

1時間後、私のSlackにも、無事にテストDMが届きました。
ド級の機械音痴でも、コピペとAIによる丁寧な手順書、そして同僚からの的確な助言さえあれば、業務改善ツールを自作できることが証明された瞬間でした。

今回は、面倒なリマインド業務を自動化する2つの方法を紹介させていただきました。

  • 手軽さ最優先!まず試したいなら → Zapier
  • 無料でがっつり使いたい!少し挑戦したいなら → GAS

あなたの目的やITスキルに合わせて、最適な方法を選んでみてください。
「ちょっと面倒だな」と感じるその作業、ほんの少しの勇気で、自動化できるかもしれませんよ!

GitHubで編集を提案
株式会社 MBK デジタル

Discussion