LoginSignup
20
21

More than 5 years have passed since last update.

Serverlessフレームワークを使ってSlackで遊ぶ

Posted at

この記事は Node.js Advent Calendar 2015 の 22日目の記事です。

今年はNode.jsにとって大きな変革となる1年となりました。
1年間追いかけていて、とても面白かったし、勉強になりました。
使用される場面も増えてきていると感じるので、来年はさらに盛り上がるといいなぁと思います!

では本題に入ります。

Serverless FrameworkはAWSを使用して、サーバーレスなアプリケーションを作成できるフレームワークです。Node.js v4で動作確認がされていて、npmを使用してインストールします。
Serverless自体の詳細についてはこちらの記事がわかりやすかったです。

今日はそのServerlessを使用してもう少し遊んでみようかなと思います。
サーバのことを考えずに、簡単にアプリケーションを作成できることを実感していただければと思います。

それでは、こちらを参考に、Slackのbotを作成してみましょう!
だいたいはREADME.mdに沿ってやっていくだけですが、少し詰まる箇所があったので追記していきます。


①Serverlessをインストールし、設定を行う。

  • こちらの記事を参考にしてください。

②Serverlessプロジェクトを作成する。

  • $ serverless project create
  • 対話的にプロジェクト名、ドメイン、メールアドレス、ACCESS KEY ID、SECRET ACCESS KEYを入力し、リージョンを選択してください。
  • Serverless: Successfully created project: xxx と表示されたらOKです。

③作成したプロジェクトに cd し、 serverless-slackbot をインストールする。

  • $ serverless module install https://github.com/serverless/serverless-slackbot
  • Serverless: Successfully installed serverless-slackbot module. と表示されたらOKです。
  • s-project.json がなんらかの理由で作成されなかった場合は { [ServerlessError: Must be in a Serverless project] name: 'ServerlessError', messageId: 12 } とエラーが出ます。僕はプロジェクトを作成し直しました。

④リソースをAWSにデプロイする。

  • $ serverless resources deploy
  • リージョンを選択してエンターを押下してください。
  • Serverless: Resource Deployer: Successfully deployed development resources to どっか と表示されたらOKです。

⑤functionとエンドポイントをデプロイする。

  • $ serverless dash deploy
serverless-slackbot - authorize
  function - authorize
  endpoint - slackbot/authorize - GET
serverless-slackbot - incoming
  function - incoming
  endpoint - slackbot/incoming - POST

を全て選択して、 Deploy でエンターを押下し、リージョンを選択してください。

  • GET のエンドポイントと POST のエンドポイントが出力されることを確認し、忘れないようにメモしておいてください。

⑥Slackを設定する。

  • https://api.slack.com/applicationsからCreate a new application を押下してください。
  • 必要事項を入力してください。 Redirect URI(s) には上でメモした GET のエンドポイントのURLを入力してください。
  • 発行される Client IDClient Secret の値をメモしておいてください。

⑦Slash Commandsを作成する。

  • Commandは何でも構いません(ここでは /command とします)。
  • Request URLに上でメモした POST のエンドポイントのURLを入力してください。

  • 表示された Verification Token の値をメモしておいてください。

⑧Bot Userを作成する。

  • 適当な名前を入力してBotユーザーを作成してください。

⑨環境変数を設定する。

  • $ serverless env set コマンドで以下の環境変数を設定してください。
  • SLACK_OAUTH_CLIENT_IDに上でメモしたClient ID
  • SLACK_OAUTH_CLIENT_SECRETに上でメモしたClient Secret
  • SLACK_TOKENに上でメモしたVerification Token
  • SERVERLESS_PROJECT_NAMEには適当な名前を入力してください。

    • Serverless: Enter env var key to set a value to: と表示されたらキーを、Serverless: Enter env var value to set to the provided key: `と表示されたらバリューを入力してください。
    • 設定できたかは $ serverless env list で確認してください。
    • $ serverless function deploy コマンドを実行して設定を反映させてください。以下の2つのfunctionをデプロイしてください。 function - authorize function - incoming

⑩Slackユーザーを設定する。

⑪確認する。

  • Slack上で /command help コマンドで You don\'t need an alarm clock, let your dreams wake you. と表示されたらOKです。

⑫修正する。

  • 多少バグがあるようなので練習も兼ねて修正しましょう。

    • この記事を投稿し終わったらソースをちゃんと読んでPR送ってみようかなと思ってます。
  • /back/modules/serverless-slackbot/lib/skills/team_list.js
    'list'null に変更してください。

module.exports = function(SlackBot) {

  SlackBot.addSkill('team', 'list', function(event, context, body, slackTeam) {

    // 中略

  });
};

module.exports = function(SlackBot) {

  SlackBot.addSkill('team', null, function(event, context, body, slackTeam) {

    // 中略

  });
};

に修正してください。

  • $ serverless function deploy でデプロイしたら、 /command team コマンドが使用できるかと思います。
  • このようにJSファイルを修正することで、ハンドルするイベントを増やしたり、APIを使用したりできます。

まとめ

  • サーバーレスで簡単にアプリを作成できて夢が広がりますね!
  • AWSやLambdaもこれから触って勉強していきたいと思います!!!!!!!

おまけ(npmにコントリビュートする方法)

npm-expansionsというリポジトリがあります。

下の画像のように、npmのページの左上にランダムで表示される、略すとnpmになる3語の言葉を募集しているリポジトリです。

スクリーンショット 2015-12-22 12.09.59.png

僕が面白いのを思いつかなかったので、もし何か思いついた方は是非PRを送ってみるといいかと思います。

それではメリークリスマス&良いお年を!

20
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21