初めに
初めまして@maru_0813 と申します。 2021年1月まで約5年間、営業やキャリアアドバイザーを経験し、この度ジョブチェンジした駆け出しエンジニアです。
早速ですが、
Slackへグラフ定期ポストを自動化するGASの実装方法は、調べればいくつか記事が出てくるかと思います。
今回の内容は、組織に多く在籍している非エンジニアの方向けに、さらに全社展開を目的とした内容になります。
@ouraが以前投稿している記事のアップデート版になります。
また、全社展開の方法にフォーカスさせていただきたいため、
本内容では、Slack Appの作成方法やGASのコードは、割愛させていただきます。
@ouraが以前投稿している記事を参照いただければと思います。
なぜやったのか?
- グラフを定期ポストしたいと思う方が管理職やリーダー
- そのうち非エンジニアの方が多く記事を見てもトライ&エラーが頻発する
- かつ、多忙でトライ&エラーの時間をかけれない
非エンジニア業務をしていた当時の原体験として
日々KPIをモニタリングしながら、Slackを活用してチームとコミュニケーションを取っている中で
「現状の状態をチーム全員と認識を揃えたい」や「アクションを促すきっかけを作りたい」という思いがありました。
日常業務の中で、GASを一から学習する時間が割けず、上記の思いを実現できずもどかしさを感じていました。
そのような思いをもつ、非エンジニアの方が一定数いるのではないかと考え、今回の仕組みを作りました。
前提
- Slack を利用している
- Google スプレッドシートでグラフをみている
- セキュリティ上の理由で Google スプレッドシートの公開範囲が組織内に制限されている
ざっくりとした仕様
- Slackチャンネル名、スプレッドシートのタイトルをフォームで回答させる
- Slackbotでアクションごとに区切られた手順書が呼び出される
- フォームで回答したSlackチャンネル名、スプレッドシートのタイトルが反映されたスクリプトが生成される
Todo
- SlackAppの作成
- Tokenのライブラリ化
- Slackワークフローの作成
1. Slack Appの作成
GASとSlack APIを利用してポストするのですが、
まずは、Slackにポストするためにトークンを取得する必要があります。
そのためにSlack Appを作成します。
- 参考記事
2. Tokenのライブラリ化
不特定多数の方が利用するため、トークンが乱用されるリスクを考慮してライブラリ化することでTokenを隠すことにしました。
やり方
・別のスプレッドシートを用意
※ライブラリ用のスクリプトを実装するために、別のスプレッドシートを用意します。
・GCPでプロジェクトの設定
※GCPは社内別部門が管理している可能性があるため、該当部門にお問い合わせください
・スクリプトプロパティにTokenを格納
コードのToken ID
を発行したTokenの値を入れ、実行します。
function setVal(){ //スクリプトプロパティで「OAUTH_TOKEN」キーに値を格納する PropertiesService.getScriptProperties().setProperty("OAUTH_TOKEN", "Token ID"); }
プロジェクトのプロパティを確認すると、値が入っていることが確認できます。
・ライブラリ化する
バージョンを固定し、実行可能なAPIとして公開します。 不具合が起きた時に、本番環境とdev環境で切り分けるためです。
・スクリプトプロパティを呼び出すコードを実装
common.getProperty()
で「ライブラリ名+メソッド」でライブラリを呼び出すコードになります。
function slack(chart) { var url = 'https://slack.com/api/files.upload'; var token = common.getProperty(); //←ライブラリを呼び出すコード var channel = cleaningResult(); var payload = { 'token' : token, 'channels' : channel, 'file' : chart, 'filename' : 'グラフ' }; var params = { 'method' : 'post', 'payload' : payload }; var response = UrlFetchApp.fetch(url, params); }
3. Slackワークフローの作成
手順作成
@ouraさんが以前投稿しているの記事をベースに手順をSlackワークフローに落とし込みます。 ステップを大きく分けると以下のように分けられます。
専用チャンネルの開設とショートカットの作成
「グラフ定期ポストを自動化する」の窓口として専用チャンネルを開設します。
そしてそのチャンネル内でSlackワークフローのショートカットを作成します。
変数の指定
変数が反映されたスクリプトを生成するためにフォーム化します。
Slackワークフローにフォームのステップを追加します。
SlackAppの追加
事前に作っておいたSlack Appをユーザーに追加してもらうよう手順化します。
変数が反映されたスクリプトを出力
ユーザーがコピペできるよう、完成されたコードを転記します。
下線部の「可変テキスト」は、フォームで投稿された変数になります。
変数を挿入を選択し、フォームで投稿された変数を設定し置き換えてください。
GASへ転記と設定
スプレッドシートからスクリプトエディタを開いてもらう手順を書き、GASをコピペするよう促します。
事前に作っておいたTokenを取得するライブラリを使用する手順を書きます。
そして、トリガーの設定の手順化をして、終了のアナウンスを設定します。 これで完成です。
全社へ展開
テキストで告知
隔週で全社MTGなどの時間がありましたら、 そちらでも口頭でも告知ができるといいかと思います。
終わりに
やってみての感想としては、
やり方は手探りではありましたが、課題やゴールが明確で、
自分の力で全社のために貢献できるイメージは持てていたので
モチベーション高く取り組むことができました。
もし、現在、他職種でエンジニアにこれからなりたいという方がいましたら、
トライする内容として参考にしていただければ幸いです。