30分でできる！GAS×Slackで毎週しいたけ占いの結果を届けてくれるbotを作ろう

この記事は[Ateam Brides Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-brides)　24日目の記事です。本日は[エイチームブライズ](https://brides.a-tm.co.jp/)でエンジニアをしていた @kakakaori830 が記事を書きます。

# はじめに
約１年前に職種が変わって？エンジニアではなくなった私ですが、アドベントカレンダーの季節になるとやはり何かものづくりをしたくなるものです。
何を作ろうかな〜と考えたわけですが、弊社には[しいたけ占い](https://voguegirl.jp/horoscope/shiitake/)の信者が多数在籍しています。そんな彼らのために毎週月曜に占いの結果をSlackにお届けるすbotを作ることにしました。仕事でも使っているSlackに、占いの結果が届いたら便利ですよね！

# 作り方

## GoogleAppScriptでライブラリを読み込む
今回はSlackとの接続部分と、スクレイピング部分でライブラリを利用します。自前で作らなくてもいいので便利便利！

![スクリーンショット 2021-12-23 8.27.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/6840dce3-6ced-faab-a672-eb1ddc2e48ce.png)

ライブラリはここから追加します。

Slackとの連携に使うのは「SlackApp」というライブラリ。スクリプトIDの欄に

```:SlackApp
1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq
```
と入力して「検索」をクリック。IDのところが「SlackApp」になっていることを確認して「追加」を押したらライブラリの追加が完了。同じようにしてスクレイピングに使う「Parser」を追加していきます。スクリプトIDは

```:Parser
1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw
```
これら二つのライブラリを追加したら準備完了。

## Slack側でアプリ登録

[Slackのアプリ作成ページ](https://api.slack.com/apps)を開いてアプリを作っていきます。まず「Create an App」をクリック。
「アプリ名(App Name)」と「利用するSlackワークスペース名（Pick a workspace to develop your app in:）」を入力し、「Create App」をクリックします。
![スクリーンショット 2021-12-22 20.59.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/09ee93de-112c-dce9-e41d-8990b776b360.png)
これでアプリの作成は完了！簡単だー。

## パーミッションの設定

さっき作ったアプリの権限を変えていきます。
左のメニューにある「OAuth & Permissons」を選択して、「Add an OAuth Scope」をクリック。
![スクリーンショット 2021-12-22 21.00.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/7a150290-9b75-bd75-ab9e-2557a80e1c95.png)

Slack botに必要な権限を追加していきます。botに最小限必要な権限はチャットへの書き込み権限「chat:write」です。「chat:write.public」はパブリックチャンネルに対して許可なく書き込める権限なので、これにしておくと作成したSlackAppをパブリックチャンネルに追加しなくても書き込みができるようになるので便利です。

## botユーザーの追加

左のメニューから「App Home」を選択して、「App Display Name」で「Edit」をクリック。
![スクリーンショット 2021-12-22 21.03.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/edef4055-0300-2254-d9ae-527dd767dc8b.png)
「botの名前（Display Name）」と、「デフォルトのユーザー名（Default username）」を入力し、「Save」をクリックします。

## botのインストール

左のメニューから「Install App」を選択して、「Install to Workspace」をクリックし、Slack botをワークスペースにインストールしていきます。
![スクリーンショット 2021-12-22 21.03.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/7e4be616-ec04-b96a-14fa-3b75354d9540.png)

権限のリクエストが表示されるので、内容を確認して、「許可する」をクリックします。
画面が切り替わると「Bot User OAuth Token」が表示されるので、この文字列をコピーしておきます。これをGAS上に入力します。

## GASにコードを記述していく

今回はライブラリを使うので実際に書くコードはかなり少ないです。これだけでしいたけ占いの結果を持ってきてSlackに投げられる。すごいですねー。

```javascript:コード.gs
function myFunction() {
  const constellations = [
        "aries",
        "taurus",
        "gemini",
        "cancer",
        "leo",
        "virgo",
        "libra",
        "scorpio",
        "sagittarius",
        "capricorn",
        "aquarius",
        "pisces"
    ];

  const constellationsKana = [
        "【おひつじ座】",
        "【おうし座】",
        "【ふたご座】",
        "【かに座】",
        "【しし座】",
        "【おとめ座】",
        "【てんびん座】",
        "【さそり座】",
        "【いて座】",
        "【やぎ座】",
        "【みずがめ座】",
        "【うお座】"
    ];

  const urlBase = "https://voguegirl.jp/horoscope/shiitake/";
  const currentDate = new Date();
  const today = currentDate.getFullYear() + toDoubleDigits(currentDate.getMonth() + 1) + toDoubleDigits(currentDate.getDate());
  const token     = "xoxb-hogehogehoge"; // ここにコピーしておいたトークンを記入
  const slackApp  = SlackApp.create(token);
  const channelId = "#general";

  // 星座ごとにデータを取得
  constellations.forEach(function(constellation, key) {
    var url     = urlBase + constellation + "/" + today + "/";
    var content = UrlFetchApp.fetch(url).getContentText("UTF8");
    var resultText  = Parser.data(content).from('<div class="a-text">').to('</div>').build();
    var titleInfo   = Parser.data(content).from('<div class="o-shiitake-detail__title-area">').to('<div class="a-illust-caption">').build();
    var resultImage = Parser.data(titleInfo).from('data-src="').to('" alt').build();
   
    let message = constellationsKana[key] + "のあなたは…\n\n" + resultText.trim()
    slackApp.postMessage(channelId, message);

  }) ;   
}

/*
 * 1桁の数字を2桁にする
 */
var toDoubleDigits = function(num) {
  num += "";
  if (num.length === 1) {
    num = "0" + num;
  }
 return num;     
};
```

## 定期実行の登録

ここまできたらあとはGASのスケジュールを登録して毎週月曜の好きな時間に動くようにすれば完了！

## やってみた

はい、実行！

![スクリーンショット 2021-12-23 8.21.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200812/21e71a8c-8106-60f7-ddae-cef5d72c34ec.png)

ジャーン！
無事にSlackの#generalにしいたけ占いの結果が送られてきました。
これで弊社のしいたけ占い好き社員も安心して働くことができるようになりそうです。

# 最後に
いかがでしたか？
GoogleAppScriptもSlackも色々な機能が用意されているので非常に簡単にさまざまなbotが作れそうです。本当に簡単にが実装できましたね。私自身、これを作るのは30分かからずできちゃいました！
皆さんもぜひ自分好みのbotを作ってみてくださいねー！!

[Ateam Brides Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-brides)の最後は @kamatari1377 がなにか色々面白いことをしてくれるそうです。お楽しみに！