Google Apps Script で作成している Slack Bot です。
※ 2021 年4月に Heroku から GAS 環境へ移行し、開発を JavaScript ではなく TypeScript で行うように変更しました。
- 週次定例 MTG のファシリテータ
- 新規カスタム絵文字追加の通知
- 複数チャンネル対応
- 設定変更と永続化
- GASプロジェクトの保管場所の指定
-
Shujinoske slack appのコラボレータに招待してもらう
-
このリポジトリを clone して、以下実行
asdf install asdf reshim yarn yarn
-
yarn clasp login
を実行- Shujinosuke の GAS プロジェクトにアクセスできるアカウントでclaspの設定
-
完全に新しいGASプロジェクトに移行する時は初回のみ以下の操作が必要(更新の場合は不要)
yarn run buildpush
を実行- GASエディタを開き(
clasp open
)、init
関数を実行する- 初回の実行時はGASに権限付与する必要があるので、画面にしたがって権限を付与する
init
によってSlackTokenなど必要な情報がGASプロジェクトに登録される
- GHAでclaspを利用するためにGitHub Secretsに値を設定する
- 2021/06/21時点では
masaya.hirose@siiibo.com
の値が登録されている
- 2021/06/21時点では
- 設定する値は以下の通り
- clasp の設定は
~/.clasprc.json
に保存されている(Mac の場合)
- clasp の設定は
KEY | 説明 |
---|---|
ACCESS_TOKEN | claspの設定 |
CLIENT_ID | claspの設定 |
CLIENT_SECRET | claspの設定 |
DEPLOYMENT_ID | claspの設定 |
EXPIRY_DATE | claspの設定 |
ID_TOKEN | claspの設定 |
REFRESH_TOKEN | claspの設定 |
SCRIPT_ID | GASプロジェクトのスクリプトID |
- テスト環境で開発する場合は
clasp deploy
で新規デプロイを行う- GASはデプロイの度に新規URLが作成されるので注意
- コードを更新することが目的の場合は、新規デプロイではなくデプロイを更新する
- デプロイの更新をするには
clasp deploy -i <deploymentID>
を実行する
- デプロイの更新をするには
https://api.slack.com/apps/A0108T7KFV0/event-subscriptions
からGASでデプロイしたWebAppのURL を設定https://script.google.com/macros/s/<deploymentID>/exec
のような値
https://api.slack.com/apps/A0108T7KFV0/interactive-messages
にも同じ値を設定- 適当なテストチャンネルに"Shujinosuke"アプリをインストール、もしくはすでにインストール済みのチャンネルで作業
- チャンネルで、
@Shujinosuke status
と投稿して疎通確認 - すでにクラウドにデプロイしたものがある場合、上記開発作業が完了したらデプロイ先ドメインの値に戻す
- GitHub リポジトリと同期しているので、GitHub に
master
ブランチを push すればデプロイされる - ローカルでコードを変更した後手動でデプロイ
yarn run buildpush
を実行clasp deploy -i <deploymentId>
を実行
- GASはデフォルトではファイルモジュールがサポートされていない
- ファイルを分割していてもグローバルスコープとなる
- ファイルモジュールが必要ない場合は
clasp
を利用するとTS→JSへのコンパイルを自動で行ってくれる - ファイルモジュールを扱うにはローカルで設定する必要があり、Shujinosukeは
webpack
を利用することで実現している- 関連する設定ファイルは
- デプロイまでの流れは以下の通り
webpack
でビルドclasp push
でコードをGAS環境にpushclasp deploy -i <deploymentID>
でデプロイの更新
- GASプロジェクトをローカルで管理する場合、以下の2つのファイルが必要
- .clasp.json
clasp
でpushやdeployする対象のGASプロジェクトを設定
- appsscript.json
- ランタイムやタイムゾーンなど、GAS側で必要な情報の設定
- ブラウザ上で新規プロジェクトを作成する場合は自動で作成される
- 初期設定ではオンラインエディタ上に表示されないようになっているが変更することで表示可能
- .clasp.json
- SlackのWebClientには @slack/web-apiという公式ツールがある
- しかしGASはNode.jsと完全な互換性はないので上記ツールを利用することができない
- 上記ツールにはTypeScriptで開発する上で便利な情報が定義されているため、これをGASでも利用できるようにした
- リンクはhi-se/node-slack-sdk
https://gitpkg.now.sh/
を利用してyarn install
している