【全手順を網羅】AWSを利用したSlackアプリの作り方

AWSで動くSlackアプリの作り方

「AWSを利用したSlackアプリを作りたいけど、どこから手を付けていいか分からない」という悩みはありませんか?

今回はAWSを利用したSlackアプリ「あいさつBot」を作ってみましたので、その作り方を解説します。手順まで詳細に解説していますので、AWSを利用したSlackアプリ開発の1歩目として最適です。

AWSにはストレージやデータベース・コンピューティングサービス等、便利なクラウドサービスが豊富にあります。AWS上で動作するSlackアプリならAWSのサービスとの連携も容易にできます。

Slack導入へ向けた提案書の書き方(無料)

Slack導入へ向けた提案書の書き方

Slack導入へ向けた提案書の書き方
Slackを導入のための提案書の書き方を解説した資料です。弊社の事例を踏まえて経営層への提案の仕方をまとめました。

あいさつBot完成イメージ

あいさつBot完成イメージ

上記画像のようにユーザが投稿したメッセージにメンション付きであいさつするBotを作成していきます。

あいさつBotは以下を使用して作成していきます。

プラットフォームAWS
AWSサービスLambda、API Gateway
フレームワークBolt ※Node.js

前提条件・開発環境

今回のアプリ作成は以下の前提・環境で実施しました。

・AWSアカウントを発行済み

・PCの環境がWindows

アプリ作成手順サマリ

まずはSlackアプリ作成の概要を説明します。

03_あいさつBotアーキテクチャ

AWS側とSlack側の手順で分けると、次のようになります。

  • AWS
    • LambdaでBoltパッケージをアップロードする
    • Lambdaでプログラムを書く
    • API Gatewayと統合する
  • Slack
    • アプリを新規作成する
    • AWSで作ったURLを設定
    • チャンネルにアプリを追加

それでは実際にアプリを作っていきましょう!

事前準備:BoltをLambdaにアップロード

Lambdaは標準でBoltを使用することができないため、Boltの機能をZipにまとめ(=パッケージ化)Lambdaのレイヤーに追加することで、Lambda上でBoltを使用できるようにします。

以下に手順を詳細に説明しますので、この通り実施してみてください。

手順詳細

1. Node.jsのインストール

パッケージ化するためにNode.jsが必要となりますので事前にインストールしてください。

https://nodejs.org/ja

「推奨版」をインストールしてください。
インストール内容を変更する必要はありません。

2. パッケージ化用フォルダを作成

パッケージ化を行うためのフォルダ(ここでは「パッケージ化用」フォルダ)を新規作成します。作成場所・フォルダ名は任意です。

パッケージ化用フォルダを作成

3. nodejsフォルダを作成

作成したフォルダを開き、さらに「nodejs」フォルダを新規作成します。

nodejsフォルダを作成

4. node_modulesフォルダを作成

作成した「nodejs」フォルダを開き、さらに「node_modules」フォルダを新規作成します。

node_modulesフォルダを作成

5. コマンドプロンプトを開く

作成した「node_modules」フォルダを開き、アドレスバーに「cmd」と入力しEnterキーを押下します。

コマンドプロンプトを開く

6. Bolt用のファイルをダウンロード

コマンドプロンプトが開くため、「npm install @slack/bolt」と入力しEnterキーを押下します。

「node_modules」フォルダにBoltを動かすために必要なファイルが自動的にダウンロードされます。

Bolt用のファイルをダウンロード

7. パッケージ化用のフォルダを開く

処理完了後、最初に作成したパッケージ化を行うためのフォルダを開きます。

パッケージ化用のフォルダを開く

8. nodejsフォルダを圧縮

「nodejs」フォルダを右クリックし、「送る(N)」→「圧縮 (zip 形式) フォルダー」を押下します。
圧縮が完了するまで少し時間がかかるので、終わるまで待ちます。

nodejsフォルダを圧縮

9. nodejs.zipを確認

「nodejs.zip」ファイルが作成されたことを確認します。

nodejszipを確認

10. AWSログイン

AWSにログインします。

AWSログイン

11. Lambdaを選択

画面上部の検索に「Lambda」と入力し、検索結果の「Lambda」を押下します。

Lambdaを選択

12. レイヤーの作成

サイドバーの「レイヤー」を押下し、右画面の「レイヤーの作成」を押下します。

レイヤーの作成

13. レイヤーの設定

以下の通りレイヤーを設定します。

名前任意の名前
アップロード手順8、9で作成した「nodejs.zip」を選択
互換性のあるランタイム「Node.js 18.x」のみ選択

その他の項目はデフォルトのままで問題ありません。

レイヤーの設定

設定後に「作成」を押下します。

14. 正常に作成されたことを確認

正常に作成されたことを確認します。

正常に作成されたことを確認

これでLambda上でBoltを使ったSlackアプリ開発を行う準備ができました。

手順:AWSで動く「あいさつBot」の作り方

ここから実際にSlackアプリを作る手順を説明します。

手順詳細

1. Slackのワークスペースを開き、左サイドバーから「アプリを追加する」を選択

「アプリを追加する」を押下

2. 「Appディレクトリ」を押下

「Appディレクトリ」を押下

3. 「ビルド」を押下

「ビルド」を押下

4. 「Your Apps」ボタン押下し、「Create an App」を押下

「Your apps」を押下
「Create an App」を押下

5. 「From scratch」を選択

「From scratch」を押下

6. App Nameにアプリ名、「Pick a workspace to develop your app in:」でアプリを導入したいワークスペース名を選択する

アプリ名等を設定

7. 開いた画面にある「Bots」を押下

「Bots」を押下

8. 「Review Scopes to Add」を押下

「Review Scopes to Add」を押下

9. 「Scopes」で「Add an OAuth Scope」を押下

「Add an OAuth Scope」を押下

10. 「chat:write」を追加

「chatwrite」を追加

この手順でBotに権限を与えています。

今回のあいさつBotは自動返信を行うため、「chat:write」を追加してチャットの書き込み権限を与えています。

Botへの権限は多数用意されています。実現したい機能に合わせて適宜追加しましょう。

11. 左サイドバーから「App Home」を選択

「App Home」を押下

12. 「App Display Name」で「Edit」を押下

「Edit」を押下

13. 「Display Name(Bot Name)」にボット名、「Default username」に適当なユーザ名を入力し、「Add」を押下

Display Name等を設定

14. 「Show Tabs」にある「Messages Tab」をオンにし、「Allow users to send Slash commands and messages from the messages tab」のチェックボックスをオンにする

Show Tabを設定

この手順により、あいさつBotにDMを送ることができるようになります。

15. 左サイドバーから「Install App」を選択し、「Install to Workspace」を押下

「Install to Workspace」を押下

16. 「許可する」を押下

「許可する」を押下

17. 左サイドバーから「OAuth & Permissions」を選択し、「Bot User OAuth Token」をコピーし、メモしておく

メモした値は手順32で使用します。

「Bot User OAuth Token」を押下

18. 左サイドバーから「Basic Information」を選択し、「Signing Secret」項目の「Show」を押下し表示させたのち、内容をコピーし、メモしておく

メモした値は手順32で使用します。

「Signing Secret」をコピー

19. AWSにログイン

AWSにログイン

20. 画面上部の検索に「Lambda」と入力し、検索結果の「Lambda」を押下

「Lambda」を押下

21. サイドバーの「関数」を押下し、右画面の「レイヤーの作成」を押下

「レイヤーの作成」を押下

22. 関数を作成

以下の通り設定し、「関数の作成」を押下

  • 一から作成
  • 関数名:任意の名前(ここでは「helloBot」)
  • ランタイム:Node.js 18.x

その他の項目はデフォルトのままで問題ありません。

関数の作成

23. 関数の作成が正常に完了後、画面真ん中あたりの「コードソース」までスクロール

「コードソース」までスクロール

24. 「index.mjs」を右クリックし、「Rename」を押下

「Rename」を押下

25. 「index.js」と入力し、Enterキーを押下

「Enter」キーを押下

26. 「index.js」ファイルの内容を以下に変更

const { App, AwsLambdaReceiver } = require('@slack/bolt');
 
// レシーバー初期化処理
const awsLambdaReceiver = new AwsLambdaReceiver({
  signingSecret: process.env.SLACK_SIGNING_SECRET,
});
 
// アプリ初期化処理
const app = new App({
  token: process.env.SLACK_BOT_TOKEN,
  receiver: awsLambdaReceiver,
});
 
// Lambda関数で最初に呼ばれる処理
module.exports.handler = async (event, context, callback) => {
  const handler = await awsLambdaReceiver.start();
  return handler(event, context, callback);
}
 
//メッセージが投稿された時に呼ばれるメソッド
app.message(async ({ message, say }) => {
  await say(`こんにちは!<@${message.user}>さん!`);
});

27. 内容変更後、「Deploy」ボタンを押下

「Deploy」を押下

28. 画面下部のレイヤーから「レイヤーの追加」を押下

「レイヤーの追加」を押下

29. 以下の通り設定し、「追加」を押下

レイヤーソースカスタムレイヤー
カスタムレイヤー事前準備で作成したレイヤー(ここでは「boltPackage」)
バージョン1(複数ある場合は一番大きい数字を選択)
レイヤーを追加

30. レイヤー追加後、「設定」→「環境変数」→「編集」と押下

「編集」を押下

31. 「環境変数の追加」を押下

今回は環境変数を2個追加するので、2回押下してください。

「環境変数の追加」を押下

32. 環境変数のキーを設定

追加した環境変数のキーと値を以下の通り設定し、「保存」を押下します。

キー
SLACK_BOT_TOKEN手順17でコピーしたBot User OAuth Token
SLACK_SIGNING_SECRET手順18でコピーしたSigning Secret
環境変数のキーを設定

33. 設定した内容が表示されていることを確認

設定内容確認

34. 画面上部の検索に「API Gateway」と入力し、検索結果の「API Gateway」を押下

「API Gateway」を押下

35. HTTP APIの構築

サイドバーの「レイヤー」を押下し、右画面の「HTTP API」の「構築」を押下します。

「構築」を押下

※APIが1つでも存在する場合は、右画面にAPI一覧画面が表示されます。
この場合は「APIを作成」を押下後に上記操作を行ってください。

「APIを作成」を押下

36. 統合を作成して設定

以下の通り設定し、「次へ」を押下します。

統合Lambda
Lambda 関数作成したLambda関数(ここでは「helloBot」)
API 名任意の名前(ここでは「helloBot-API」)

その他の項目はデフォルトのままで問題ありません。

統合を作成して設定

37. ルートを設定

以下の通り設定し、「次へ」を押下します。

メソッドPOST
リソースパス/slack/events

その他の項目はデフォルトのままで問題ありません。

ルートを設定

38. ステージを設定

内容は変更せず、「次へ」を押下

ステージを設定

39. 内容を確認し作成

内容に間違いがないことを確認し、「作成」を押下します。

内容確認

40. 作成したステージのURLをコピーする

作成したAPI詳細画面の中部にある「~のステージ」の「URLを呼び出す」に記載のURLをコピーし、メモしておきます。

URLコピー

41. Slack Botの設定画面に戻り、左サイドバーから「Event Subscriptions」を選択

「Event Subscriptions」を押下

42. 「Enable Events」を「On」にし、「Request URL」にURLを指定

先ほどメモしたURLを利用し、「メモしたURL/slack/events」を指定します。

URLを指定

43. 下部の「Subscribe to bot events」タブ内で以下3つのイベントを追加

イベントを追加

この手順はSlackでどのようなイベントが発生した際にアプリが動作してほしいかを設定します。

あいさつBotはメッセージを送った際に動作してほしいので以下の3つのイベントを設定しています。

  • message.im(あいさつBotのDM内でメッセージを送った際のイベント)
  • message.groups(プライベートチャンネル内でメッセージを送った際のイベント)
  • message.channels(パブリックチャンネル内でメッセージを送った際のイベント)

44. 上部に黄色で以下のメッセージが表示されるので、メッセージ内の「reinstall your app」を押下

「reinstall your app」を押下

Bot User Eventを追加するたびにインストールしなおす必要があります。

45. 「許可する」を押下

「許可する」を押下

46. Botを招待したいチャンネル名をクリック

チャンネル名を押下

47. 「インテグレーション」タブから「アプリを追加する」を押下

「アプリを追加する」を押下

48. 作成したアプリの「追加」を押下

「追加」を押下

ここでアプリを追加しないと、Botが反応できませんので、必ず追加してください。

49. 追加したチャンネル内でメッセージを投稿すると、アプリがあいさつしてくれることを確認

動作確認

これでアプリが完成しました!

まとめ

最後までご覧いただきありがとうございました。

当社ではLambdaを利用したSlackアプリの開発に力を入れており、AWSサービスのDynamoDBやS3と連携したアプリも開発しています。

Lambdaを利用すると他のAWSサービスと容易に連携できるので、幅広い開発ができます。ぜひAWSをマスターして、Slackアプリ開発の幅を広げていきましょう。

これからも弊社の取り組みやSlackに関する発見など発信していくのでチェックしてくださいね。

また、Slack導入や運用でお悩みの方は、こちらよりお気軽にご相談ください。