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

  • 21
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事は 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を送ってみるといいかと思います。

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