【超入門】GASで簡単自動化システムを作ってみる

どうも[mr](https://twitter.com/MasujimaRyohei)です。

この記事の目標はGoogle Apps Script(GAS)を使って、
GoogleスプレッドシートとGmailを連携させることです。

とてもシンプルな内容となっていますので、GAS？なにそれ？それで何ができるの？くらいの人をターゲットにしています。

## 作りたいもの
進捗管理表で期限が過ぎてしまっているものをGmailで通知したい

## 必要なもの
・Googleアカウント
スプレッドシートの作成に必要なため

## やること
1. スプレッドシートに進捗管理表を作る
2. GASを書く
3. Gmailで結果を確認する
4. 定期実行する

この三つを行っていきます。

## 1. スプレッドシートに進捗管理表を作る
進捗管理表には「No」「進捗状態」「タイトル」「詳細」「期限」を入れます。
![2022-03-26 13.41.21 docs.google.com a4aa758f9996.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/96814de5-6fe8-801e-7616-cd02fb2d48ac.png)


番号には連番を入れておきます。
![2022-03-26 13.46.03 docs.google.com 3c3a6f981fb3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/43e80cac-3d09-0226-be7e-429ea8f37734.png)



進捗状態には「データの入力規則」を用いて「未着手」「実行中」「完了」「保留」の4つを選択できるようにします。
![2022-03-26 13.49.33 docs.google.com 00db9ee0ca36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/abe6dbad-b4dc-2f32-f778-7af1ad1a5d0d.png)



タイトルには適当にタスク＋連番を入れておきます。
![2022-03-26 13.46.45 docs.google.com f88541084f50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/a508bc2f-074a-0d02-0bfe-733d1d1dc1ba.png)

期限は結果が確認しやすいように、今日の日付から前後10日間くらいを入れておきます。

当記事執筆日は3/26です。
![2022-03-26 13.47.28 docs.google.com ce190a4e257c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/85e69d92-6449-0295-51fd-9ea7f146dd0b.png)

次に本日の日付をスプレッドシートに記入します。
ですが、3/26をそのまま直打ちしてしまうと、日付が変わるたびに変更しなくてはいけないので、
TODAY関数を使用します。
スプレッドシートのセルG1に本日と、
セルG2に =TODAY() と入力してください。
![2022-03-26 13.47.57 docs.google.com f963b597c42c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/f0e64852-1949-e31d-b1d1-8aff07fb34ae.png)

すると自動的に本日の下に今日の日付が入っているかと思います。

これでタスクの３分の１くらいが期限が切れてしまった進捗管理表ができあがりました。

次にこの進捗管理表の通知を飛ばすメールリストを作ります。
今回は右側の余白にこのようなメールリストの項目を作って、飛ばすようにします。

![2022-03-26 13.48.38 docs.google.com 49c2f83ce19e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/8bc14e54-1d19-13e7-7b07-6613c9257221.png)

画像にも書いてある通り、自身が使っているメールアドレスを入力してください。
この後にこのメールアドレスに結果を送信するので、人のメールアドレスを入力すると迷惑になってしまいます。
本番利用する際は良いとは思いますが、まだテスト段階なので、自身のメールアドレスのみにしておきましょう。

## 2. GASの作成
スプレッドシートのメニューの「拡張機能」から「Apps Script」を選択してください。

![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/a6410ba7-8896-e6fb-5138-0b3485b4491a.png)

このような画面になると思います。

![2022-03-26 14.24.39 script.google.com 2c746e6c7de5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/7bdef672-6bdc-b860-b9d7-9c5fe645cfe1.png)

次に以下のプログラムをコピペしてください。
セル番号がずれてしまっている方は気を付けてください。

今回はプログラムについての詳しい解説はしないので、コメントを参照してください。


```js:コード.gs
function myFunction() {
  // スプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // 今日の日付を取得
  var today = ss.getRange("G2").getValue();

  // タスクリストを取得
  var tasks = ss.getRange("A2:E23").getValues();

  // Gmail通知用の文
  var log = "";

  // 期限切れのタスクを検索する
  for(var i = 0; i < tasks.length; i++) {
    if(today > tasks[i][4]) {
      // ログに 【期限切れ】No タイトル (改行)を追加する
      log +="【期限切れ】 " + tasks[i][0] + " " + tasks[i][2] + "\n";
    }
  }

  // ログが空のままの場合は期限切れ無し
  if(log =="") {
    log = "期限切れはありません。";
  }

  // メールリストを取得
  var mailList = ss.getRange("I2:I23").getValues();

  for(var i = 0; i < mailList.length; i++) {
    // アドレスの部分が空でなければそこに書かれているアドレスにメールを送信する
    if(mailList[i][0] != "") {
      MailApp.sendEmail(mailList[i][0], "本日の進捗状況", log);
    }
  }
}
```


　



コピペできましたら、保存ボタンを押して実行を押すと無事にメールリストのアドレスへメールが送信されます。
![2022-03-26 14.28.50 script.google.com 67939893e955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/bf561891-aa0b-e477-eef6-77a6aa192f3a.png)


## 3. Gmailで結果を確認する
自分自身のメールアドレスを設定すれば自分からメールが届きます。
![2022-03-26 14.38.22 mail.google.com e9ec2d0d8959.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/9d18b6fb-79c0-1b89-05d2-54ccfa46b73d.png)


## 4. 定期実行する
タスクの期限が切れてしまっているのを気づけないとよくないので、
次にこの処理を定期実行してみましょう。
GASのスクリプトはトリガーというところから定期実行できます。
![2022-03-26 14.31.32 script.google.com 4fc9c79aacd1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/bc3fca92-40c7-bda7-b878-f6715d18c2be.png)

毎日お知らせするのもいいですが、それだとうるさすぎるかもしれないので、今回は1週間ごとに通知するようにします。

右下の「トリガーの追加ボタン」からトリガー設定画面を開いて、このように設定してみてください。

![2022-03-26 14.35.10 script.google.com 51e4e04cb950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123827/f17be7be-df4f-6c3b-6d7e-66193b24691f.png)

これで毎週月曜日の午前9時すぎごろに通知されるようになります。


以上で、とてもシンプルな進捗管理表が作成できると思います。

## 最後に

シートごとに通知する頻度を変えた表を作ってみたり、
もっと見やすいようにスプレッドシートのデザインを変えてみたりするともっと有意義なものになると思うので、
ぜひいろいろいじってみてください！

分からないことは気軽にコメントしてください！
[TwitterのDM](https://twitter.com/messages/compose?recipient_id=3024239365)も開放してるので、他の人に見られたくない人はそちらから質問していただいても構いません！