Blog

【初心者でもできる!】SlackのTimesチャンネルの開設を通知しよう!

はじめに

こんにちは!新卒3年目の加藤です。普段は社内システムの運用・開発を担当しています。
一番好きな社内ツールはSlackです。


Slackには単純にメッセージを投稿するだけではなく、APIを利用してアプリを作ることが可能です。
その中でも、何かのトリガーを元に処理を行うSlack Events APIというものがあります。

今回は試しに、そのSlack Events APIを利用し、「Timesチャンネルが開設されたときに通知をしてくれるアプリ」の作り方をご紹介します。

SlackのTimesチャンネルとは??

いわゆる「分報」と呼ばれるものです。
(別名「社内Twitter」とも)

今何をしているか、何に困っているかといった業務のことから、ちょっとした雑談など、個人個人が開設し、自由に利用することができるチャンネルです。

他の人のTimesチャンネルに参加しておけば、業務の合間の雑談やその人が何の業務をしているのかがわかるので、コミュニケーションの活性化に繋がります。

ニフティでもこのTimesチャンネルが活発に活用されていて、自身も、開発で詰まってしまった部分を呟いた際に、部署の垣根を超えて他のエンジニアの方が教えてくれた経験もよくあります。

また、配属1年目の新人の方には先輩のトレーナーがついてOJTを行いますが、リモートワーク全盛の昨今、常に隣に座って相談に乗るということが出来ません。
また新人の方も先輩の顔が見えないなか遠慮してしまい、積極的に先輩社員に質問するというのも難しかったりします。
そこで、Slackを使って今の自分自身の進捗や困ったことをどんどん自身のTimesに載せて、トレーナーがアドバイスをしてくれるような新しい働き方など、様々な使われ方がされています。
(中には、トレーナーを呼び出すボタンをTimesチャンネルに設置している新人もいるとか…?)

今回は、このTimesチャンネルを誰かが開設した際に、いち早く参加するために、その開設のお知らせをチャンネルにするアプリを作ってみます。

事前に準備するもの

次のものは事前に準備されていることを想定しています。
  • Python(手元ではver 3.8で実行)
  • Node.js(手元ではver 16で実行)
  • AWSアカウント
  • AWS CLIのインストールとプロファイルの設定
なお、手元ではMacを利用しています。

サービスの構成

今回はSlack APIから来たデータをAmazon API Gatewayを介してAWS Lambdaで処理するという、とてもシンプルな構成で作りたいと思います。

なお、AWSのサービスをGUIで設定するのは大変なので、今回はServerless Frameworkを用いてInfrastructure as Code(IaC)も組んでみたいと思います。

手順

では早速アプリを作っていきましょう!
作業はすべて適当なディレクトリにて行います。
最終的には、次のようなファイル・ディレクトリ構成になります。

1. Slackアプリの設定

まずはSlack APIを利用するためにSlackアプリの設定をします。

https://api.slack.com/ の「Create an app」からSlack アプリを作成しましょう。
その際、以下のような画面が出ると思います。
これは、Slackアプリをどうやって設定するか選択する画面です。
From scratch で画面からポチポチ設定していってもいいですが、少し大変なので、今回は manifest を使ってみましょう。

ワークスペースを選んで、YAMLには下記をコピペします。 これで「Create」をし、アプリができたら「Install to Workspace」をクリックしてワークスペースにインストールしておきましょう。

2. 環境構築系

実際のアプリを作っていく前にアプリを構築するための環境を整備しましょう。

まずは、デプロイに利用するServerless Frameworkと、デプロイパッケージにPythonの依存パッケージを自動で含めてくれる便利なプラグインをインストールします。
次にPython関連の準備です。
今回は、仮想環境として pipenv を使うので、そのインストールと仮想環境の作成をします。 最後に、作成した仮想環境に対して、今回の開発に必要なPythonパッケージをインストールしましょう。


3. Serverless Frameworkの整備

AWSのリソースを自動で作成してくれるServerless Frameworkの設定ファイルを作ります。

serverless.yml



4. Lambda関数の準備

では、実際にLambdaで動かすスクリプトを作ります。

lambda_function.py



5. 環境変数の設定

デプロイに必要な環境変数を設定します。
APIトークンは「OAuth & Permissions」に、Signing Secretは「Basic Information」にそれぞれ書かれています。


6. デプロイ

ではデプロイしましょう!

7. イベント通知先のURLを設定する

デプロイに成功すると、ターミナルの最後の方にendpoint URLが記載されているはずです。
これが、今回のデプロイで作成されたAPI GatewayのURLになるので、これをSlack APIに設定しましょう。
これで、チャンネルが作成された場合に、Lambdaが起動するようになります。


動作確認

Timesチャンネルを作成してみると…
無事に通知されました!

最後に

ニフティではTimesチャンネルを多く活用しており、コミュニケーションの活性化に繋げています。
近年ではリモートワークによりコミュニケーションが希薄になりがちですが、そんな中でもSlackを通じてコミュニケーションを維持し、困ったことや雑談に対して誰かがすぐに反応をくれる文化は、ニフティの良い文化かなと個人的に思っています。

今回は、そんなTimesチャンネルのメリットを最大限に活かすために、Slack Events APIを用いて、Timesチャンネルの開設を通知してくれるアプリを作ってみました。
もし、Slackを活用していらっしゃれば、ぜひ参考にしてみてください。

また、今回はAPIのイベントトリガーとして「チャンネルが作られたら」というトリガーのみ利用しましたが、それ以外にもたくさんのトリガーで処理をさせることができるので、ぜひ試してみてください!

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!