イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

GAS入門 (シートに日付入力〜Slack通知までやってみた)

はじめまして!未経験中途の新人、すももです。
初ブログでいろいろ困ってますが、GAS好きの亜美さんから教えてもらって、GASをちょろちょろイジってみたので初めての方向けに書きたいと思います!

まずはスプレッドシートから
GASを実行するための基本操作!

1.スプレッドシートからスクリプトエディタを開く

・スプレッドシートを開いたら、メニューにある「ツール」をクリック
・上から2番目「スクリプトエディタ」という表示があるのでクリック

1.png

よし、スクリプトエディタが開いたぞ!

2.コードの編集

・初期状態ではmyFunctionという関数が書かれているので、関数名を変えたり中身のコードを書いてみる

function test() {
  // スプレッドシートを開いた時にメッセージダイアログを表示する
  Browser.msgBox('テスト');
}
  • 注意点!
    スプレッドシートは自動保存だが、スクリプトエディタは自動保存されないので、都度手動で保存が必要
    (編集が保存されてない時は「コード.gs」の前に赤いアスタリスクマークが出ます)

3.試しに実行してみよう!

・スクリプトエディタのメニューからプルダウンで関数名選ぶ
(コード保存すると勝手に関数名のプルダウンに反映する)
・「▶」(実行ボタン)を押すとGASが実行される

  • 注意点!
    初回実行時は「承認が必要です」というダイアログが出る為、「許可を確認」をクリック

    次の画面でGoogleアカウントを選択

    最後に「許可」をクリックすると承認される

2.png

わーい、実行できたー!

GAS実行の準備ができたので
さっそく作ってみよう!

今回作りたいもの
毎日スプレッドシートを見ながら、BLチェックという作業をするのですが、朝一やらないとやり忘れることがある…​!
…​なので、やり忘れていたら決まった時間にslackでお知らせしてほしい〜

お知らせ(slack)を送るまでの流れ
 ①スプレッドシート編集時に今日の日付を書き込む
 ②指定した時間に、シートに書き込まれている日付をチェックする
 ③書き込まれている日付が今日の日付でなければslackを送る
 ④送信先のslackbotにお知らせが届く

①-1.スプレッドシート編集時に今日の日付を書き込む(準備)

// 現在の日時を取ってくる
var today = new Date();

// 紐づいているファイル自体をとってくる!
var ss = SpreadsheetApp.getActiveSpreadsheet();

// 指定した名前のシートをとってくる(今回欲しいのは「2018年5月」という名前のシート)
var sheet = ss.getSheetByName(today.getFullYear() + '年' + (today.getMonth() + 1) + '月');

// 指定したセルそのものを取ってくる!
var cell = sheet.getRange('C1');

// 日付のみ入れる(2018年5月1日というような感じで)
var date = today.getFullYear() + '年' + (today.getMonth() + 1) + '月' + today.getDate() + '日';

①-2.スプレッドシート編集時に今日の日付を書き込む

// 日付を書き込む関数を作る(トリガーをスプレッドシート編集時に実行するよう設定)
function input_date() {
  // date(今日の日付)をcell(C1)に入れる
  cell.setValue(date);
}

トリガーの設定はスクリプトエディタのメニューにある「時計マークのボタン」→「新しいトリガーを追加」から行えます。

3 1.png

シートを編集したら日付が入力された!

②-1.指定した時間に、シートに書き込まれている日付をチェックする(準備)

// cell(C1)にセットされている値(日付)を取ってくる
var value = cell.getValue();

③-1.書き込まれている日付が今日の日付でなければslackを送る(準備)

// slackのトークンを入れておく
var token = 'xoxp-XXXXXXXX-XXXXXXXX-XXXXX';

// slackAppインスタンスを取得
var slackApp = SlackApp.create(token);

// slackのユーザー名を入れておく(slackの表示名ではなくユーザー名の方!)
var my_slackbot = '@XXXX';

// slack送信時のタイトルを入れておく
var bot_title = 'すももよりお知らせ';

// slack送信時の画像URLを入れておく(「FLAT ICON DESIGN」さんの画像をアイコンとして利用しています)
var icon_url = 'アイコンのURL';

Slackへの通知に関しては、以下サイトを参考にGASのライブラリを使用いたしました。
https://qiita.com/soundTricker/items/43267609a870fc9c7453
ライブラリの登録はスクリプトエディタのメニューにある「リソース」→「ライブラリ」→「ライブラリを追加」から行えます。

  • 注意点!
    slackのユーザー名は、いつも見ている表示名とは違う場合があります!
    「プロフィール&アカウント」→「アカウント設定」→「ユーザー名」→「開く」から確認できます。
    この事に気付くまで、「slack送れる人と送れない人がいる!なんで??」となりました…​

②-2.指定した時間に、シートに書き込まれている日付をチェックする
③-2.書き込まれている日付が今日の日付でなければslackを送る

// slackを送る関数を作る(トリガーから実行時間を指定)
function send_slack() {
  // もしvalue(入力されてる日付)がdate(今日の日付)と違っていたら
  if (value !== date) {
    // my_slackbot(すもものslackbot)にメッセージを送信する
    slackApp.postMessage(my_slackbot, "まだBLチェックやってないよー!",
                         {
                           username : bot_title,
                           icon_url : icon_url
                         });
  }
}

④送信先のslackbotにお知らせが届く

指定時間までシートが編集されず、入力されている日付が今日の日付じゃないと…​?

4.png

slackきたー!!!!

感想

GASはプログラミング初心者の私でもとっつきやすかったので、今後もいろいろ試してみたいなー!と思いました。

〜おしまい〜