2019.07.17 📅 Otemachi.rb #19
Bot開発でRubyを学ぶ岡部 恭平 / Mynavi Corporation 2019.07.17 Otemachi.rb #19
View Slide
IT戦略事業部 IT開発統括部 ITマネジメント2部 開発1課(マイナビニュース) 岡部恭平 @okabeeeat Webアプリケーションエンジニア
マイナビニュース
マイナビニュースを支える技術
本題
最近の悩み個人的な悩み● 普段、業務で Rails を書いている● Ruby は確かに書いてはいるが、あくまでレールに乗った上で書いているためRuby自体を使いこなせてるか不安になる時がある● 急に独自のクラスやモジュールを書くぞ!ってなった時に焦る業務でのちょっとした悩み● GitHub の Issue 作成など画面でポチポチする系の作業が面倒だと感じる時がある
そうだ! Botを作ろう
選定したBotフレームワーク● Ruboty○ https://github.com/r7kamura/ruboty○ カスタマイズ性が高い○ 国産で導入事例やナレッジ、様々なプラグインがある● タイミングを見て Lita でも Bot を作って検証してみたい○ Lita: https://github.com/litaio/lita
導入はこんなに簡単① Bot の追加と API トークンを取得 ② Ruboty のインストールと起動③確認
作ったBotなぜなぜベア● マイナビベアが Slack 上で GitHub の Issue 名を「なぜなぜ分析※1」し、 Issue を磨いてくれる Bot● マイナビベアはユーザに対して「なぜなぜ」を 5回繰り返す● マイナビベアは 5回目の「なぜなぜ」で GitHub の Issue を作成する○ Octokit.rb で GitHub API を実行し Issue を作成する○ https://github.com/octokit/octokit.rb● まずは最低限の機能のみを実装する※1 イシューからはじめよ ― 知的生産の「シンプルな本質」 第一章より
実装してみた(一部)
動かしてみた
Issueができた
Botを作ってみて● 久しぶりに「 Rails から離れた Ruby 」が書けた○ Rails が偉大なフレームワークであることを再認識した○ あれ? 結局フレームワークに縛られてる !?■ Bot フレームワーク無しで作ってみたら更に勉強になりそう■ ディレクトリ構成の検討、クラス・モジュールの設計・実装...色々勉強になりそう!● 以下のようなモチベーションを得た→オリジナルサービス開発していた時のように Bot に愛着が湧く→ Bot に色んな機能を実装したい→ Ruby をもっと勉強したい→ Ruby 書くのが楽しい!!● Octokit.rb が驚くほど便利だった● 今回のような要領で Gem 作りもやれば良いのでは ? という気づきを得た
今後● 業務で使えるレベルの品質にする○ 例外処理の追加○ リファクタリング● 普段の業務が楽になる機能をドンドン追加する● AWS や Heroku にデプロイしてみる
参考● チャットボットフレームワーク Ruboty を振り返る○ https://medium.com/@r7kamura/%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%9C%E3%83%83%E3%83%88%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-ruboty-%E3%82%92%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8B-be95e56d2400● 5分でできるRubotyのインストールとプラグインチュートリアル○ https://48n.jp/blog/2016/07/29/first-step-ruboty/● Botsインテグレーションを使って手軽にRubotyをSlackで動かす○ https://48n.jp/blog/2016/08/02/ruboty-and-slack/● Ruboty | Brain ボットの脳にデータを記憶 #ruboty #chatops○ https://qiita.com/tbpgr/items/74027b2aa3d6a6a575a7● Octokit で GitHub の Issue を作成する○ http://tbpgr.hatenablog.com/entry/2016/12/09/234718
!?
We're Hiring!!!https://www.wantedly.com/projects/301633 https://www.wantedly.com/projects/325946エンジニア 開発ディレクター