Serverless×Slackでアプリを作ってみた話

坂部健一氏:最後にLTというかたちで参加させていただきます。余興みたいなかたちで聞いていただければと思います。「Serverless×Slackでアプリを作ってみた話」を発表させていただきます。よろしくお願いします。

まず自己紹介をさせてください。

坂部健一と申します。ネット上ではsaken649と名乗っていることが多いです。26歳、エンジニア歴3年半のまだまだクラウド勉強中のエンジニアです。オープンストリームという会社でここ1年くらいずっとC#を書くような仕事をしておりました。

趣味でちょっと作曲をやっています。クラスメソッドさんの広報キャラクターの「めそ子」というキャラクターがいるんですが、歌手デビューするということで。おめでとうございます。

(会場笑)

楽曲コンテストということで、デビュー曲を募集していたというのがありまして、私の作った曲が採用されて、めそ子のデビュー曲になりました。

(会場拍手)

発表というか発売されてないんですけれども(注:2019年6月2日現在、配信済み)、発売された暁には、この曲名がいかにもAWSな感じの曲https://creofuga.net/audios/154540( 『Future Method ~Amazing World Symphony~』)をぜひよろしくお願いします。

Serverless×SlackでBotづくり

今のは閑話なんですが、ここから本題です。ServerlessとSlackで、アプリのつもりだったんですけど、Botを作ってみました。

どんなBotかと申しますと、例えば変数名とかメソッド名の命名に困ったときに、「ユーザー名を取得する」というような感じで日本語で問い合わせをすると、右側のようにgetUsernameをローワーキャメルケースで返してみたり。例えばget以外にも単語ごとに、fetchとかそういった候補がありますよといったような提案をしてくれるBotになってます。

デモをしてみたいと思います。

さっきローワーキャメルだったのでスネークケースでやってみます。「ユーザーを更新する」とやると、このようにスネークケースでupdate_userと返ってくるというような、ちょっとしたBotを作ってみました。

どのような技術で実現したかと言うと、Cloud Functions for Firebaseの上でNode.jsとExpressを動かしています。英語の単語を翻訳する部分はcodicというサービスのAPIを使って実現をしております。使ってみた所感としまして、ちょっとしたBotのバックエンドにFirebaseはアリかもしれないと思いました。

命名規則を提案してくれるBot

まず業務の中で変数名とか命名の大喜利が開催されることが多くて、そんなときに命名を提案してくれるようなBotがあったらいいなと思ったんですが、わざわざそのためにサーバーを作って置いておくというのはちょっと嫌なので、思いつきをサーバー管理せずにオンライン稼働できるようなものとして、ちょっとFirebaseを考えてみました。

Node.jsのスクリプトを書いてコマンド一発でデプロイしてすぐ動いちゃうので、非常に手軽だなと思ったところです。

今までAWSとかも触ってきた中で動かすまでには一苦労でしたが、そういったこともなかったのが非常によかったと思っています。

Slackのイベントを投げる先のエンドポイントの設定もFirebaseのお作法ももちろんあるんですけど、Expressベースで気軽に適当にサクッと書いてもわりと動いてしまうというのがけっこういいなと思いました。

クラウドなんですけれども、ローカルで開発がほぼ完結してしまうというのが大きな特徴じゃないかなと思っております。ローカルでCloud Functionsを再現するエミュレーターが存在しまして、それをngrokというような固定URLから特定のポートにポートフォワードするようなサービスと連携すると、だいたいローカルだけで開発が済んじゃいます。

「クラウドなのにどうしてローカルで全部やってるんだろう?」という感じはありましたが、そういったことも実現できてしまいます。今回Cloud Functionsを使いましたが、それ以外にもFirestoreやAuthenticationのようなサービスでもローカルのエミュレーターから普通に呼べます。動確のためにわざわざデプロイがいらないというところで、気軽に作るにはすごくいいなと思いました。

無料でスピーディな開発を実現

お金の話です。基本的にはFirebaseは無料でけっこう使えるなと思いました。思いつきを気軽に稼働させるにはこれ以上ないくらい強い味方だと思います。

今回だとcodicのように、Googleの外と通信をするには若干課金しないといけません。従量制のプランもありまして、どうぜたいした規模じゃないので従量制でもたいしてお金はかかっていません。今日までのところでもぜんぜん請求はきてませんでした。

環境変数まわりなど、ちょっとしたハマりポイントは確かにあります。

Node.jsをお使いの方ならわかると思うんですけれども、process.envというのを環境変数で引っ張れるんですが、それが取れなくて「なんだこれは?」となったところで、Firebaseの作法に則ればそれも解決できます。

要はドキュメントにそのへんはちゃんと書いてありました。Bot程度を作るのであればドキュメントだけで解決するというのは非常に気軽に使えるところだと思います。

ちょっと駆け足になってしまったんですが、総括としましては、思いつきでオンライン稼働させやすい。

ローカルからだいたい動かせちゃうのでスピーディーに開発がしやすい。基本的には無料でできて、ちょっとした課金をすれば外部との通信もできる。そしてハマるポイントはあるんですけれども、だいたいドキュメントで解決する。このあたりが気軽にBotを動かしやすい要因であって、Firebaseが選べるんじゃないかなと思います。

さっきデモしたNameThinkingというちょっとしたBotをGitHubに置いておきましたので、ご興味ある方はこちらにアクセスしてみてください。業務をちょっとだけ楽にするかもしれないSlack BotをFirebaseで。そんなこともServerlessの事始めとしてやってみるのはいかがでしょうか。

ご静聴ありがとうございました。

(会場拍手)