この記事は 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 ID
、Client 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ユーザーを設定する。
-
https://slack.com/oauth/authorize?scope=incoming-webhook+commands+bot+team%3Aread+users%3Aread+chat%3Awrite%3Abot+emoji%3Aread+reactions%3Awrite&client_id=YOURSLACKCLIENTIDGOESHERE
(YOURSLACKCLIENTIDGOESHEREは上でメモしたID) にアクセスしてチャンネルなどの設定を行ってください。
⑪確認する。
- 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語の言葉を募集しているリポジトリです。
~~僕が面白いのを思いつかなかったので、~~もし何か思いついた方は是非PRを送ってみるといいかと思います。
それではメリークリスマス&良いお年を!