TypeScript + Heroku で作成している Slack Bot です。
- Figmaファイルのバージョン更新をSlackに通知
- Figmaファイル上のコメントをSlackに通知
- コメントがTrelloカードへのリンクを含んでいる場合は、TrelloにFigmaファイルを添付
-
ngrokをインストール
- brew cask install ngrokなど
-
heroku CLIをインストール
-
このリポジトリを clone して、以下実行
asdf install asdf reshim yarn yarn
.env-template
ファイルを基に.env
ファイルを作成し、Slack Botのトークンを記述する。yarn build
でbackend.js
ファイルを生成する。- figma-notificationリポジトリ上で
heroku local
を実行(yarn start
でも可)。localhostの5000番ポートでリクエストを受信できる ngrok http 5000
で、先程のlocalhost:5000をngrok proxy 経由で露出- Figma APIサイト上で、SiiiboチームのWebhookを登録
- Webhook新規登録の場合はPOSTリクエスト
- Webhook Endpoint URL更新の場合はPUTリクエスト
- Herokuに free dyno でデプロイする
- アカウントは[email protected]。認証情報は既存メンバから取得する
- Heroku CLIをインストールすればローカルから情報の取得や設定ができる
- ローカル開発時に.envに設定している認証情報は、Heroku では Config Var として設定する
- 待ち受けポートは、自動的に Heroku によってPORT環境変数経由で設定される
- GitHub リポジトリと同期しているので、GitHub にmasterブランチを push すればデプロイされる
- HerokuのNode.jsビルドパックのビルドプロセスにしたがって、
build
及びheroku-postbuild
などのスクリプトが実行される - サーバ起動コマンドは
Procfile
に記述する
- HerokuのNode.jsビルドパックのビルドプロセスにしたがって、
当初figma-notificationはGoogle Apps Scriptで作成する予定だったが、Figma Webhookの制限のため断念した。現在はHerokuで実装しているが、Heroku無料枠の信頼性の低さから上記の制限が緩和されたらGASへの移行をしたい。
以下、GASで実装する際の注意点(https://github.com/siiibo/shujinosuke より)
- GASはデフォルトではファイルモジュールがサポートされていない
- ファイルを分割していてもグローバルスコープとなる
- ファイルモジュールが必要ない場合は
clasp
を利用するとTS→JSへのコンパイルを自動で行ってくれる - ファイルモジュールを扱うにはローカルで設定する必要があり、Figma-notificationは
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
している