java で line bot 作った話

32
Java LINE BOT 作った話 JAZUG福岡 2017#1 Daisuke Hirata (@daichan4649)

Upload: daisuke-hirata

Post on 15-Feb-2017

100 views

Category:

Engineering


0 download

TRANSCRIPT

Java で LINE BOT 作った話

JAZUG福岡 2017#1

Daisuke Hirata (@daichan4649)

Daisuke Hirata (@daichan4649)● 株式会社アバンテクニカ

○ 受託開発

○ 講師業

● Java、Android、Go

● GAE、Google Apps Script

● Jazz Vocal

● プログラマってこんなかんじ??

趣味でこんな LINE BOT 作りました

福岡のジャズスポットの

スケジュールを横断検索できる

BOT

● 「福岡」の JAZZ 好き

● 「福岡」の JAZZ プレイヤー

ターゲット

超ニッチ

解消したかったこと

欲しい情報になかなかたどりつけない

● 仕事帰りにサイトを見てまわるのがつらい

○ お店のサイト

○ blog

○ SNS (facebook、twitter・・)

● 横断検索できたらうれしい

デモ

リリース

● アルファ版リリース (BOT API Trial)

○ 2016/5/3 公開

○ 登録ユーザ数 50人 (上限値!)

● 正式版リリース (Messaging API)

○ 2016/10/24 公開

○ 登録ユーザ数 130人 (2017/2/8 時点)

○ 50 アクセス程度 / 日

月末、月初めにスケジュールデータを更新

● つらくない (自動化済)

○ スクレイピング可能なサイト

○ Google Calendar 使ってるお店

● つらい (人力)

○ スクレイピング不可なサイト

○ 店主にヒアリング

開発

とにかく開発スピード重視

● すぐに完成、実現させたかった

● 自分のメイン言語が Java

● Google 系サービスと連携しやすそう

● そんな軽い気持ちで GAE/J (standard environment) を選定

どうだった?

選定ミスった

GAE/Jとの戦いの記録

GAE/J とは

● standard environment ← こちらを選定

○ 環境自由度少ない (無料枠多い)

● flexible environment

○ 環境自由度高い (札束駆動)

GAE/J とは

● スピンダウン

○ アクセス数なくなるとインスタンス落ちする

● スピンアップ

○ アクセスがあるとインスタンス起動する

つらい (開発環境)

● standard environment は Java6、Servlet2.5 固定

● 開発者的にさびしい

つらい (開発環境)● LINE 社が公開してくれている line-bot-sdk が使えない

○ Java8、Spring Boot 前提で実装されている

○ GAE/J に Spring Boot 載せれるけど・・スピンアップが・・

つらい (スピンアップ)● スピンダウン→スピンアップが前提

● Java のスピンアップは特に遅い (資料 *3)

○ Java は 3.8 秒

○ Go は 0.3 秒

○ ということは BOT の応答が・・・

● スピンダウンしないくらいアクセス数あれば大丈夫?

つらい (固定IP ではない)● スピンアップ時に IP アドレスが変わる可能性あり

● 現在(2017/2/8 時点)は固定 IP でなくても大丈夫

● 仕様が変わらないか不安

● Trial 版では 固定 IP 必須だった

ざっくり構成

● JAX-RS (Jersey2)

○ LINE とのやり取り(callback)

○ RESTful API (スケジュールデータの CRUD)

● DataStore (Objectify)

● スクレイピング (Jsoup)

○ 各サイトのスケジュールデータ取得

LINE BOT の理想のバックエンド

● インスタンス落ちしない or 起動が速い

● Java だと Java8、Servlet3 系

○ 最近のライブラリ導入しやすい

● 固定 IP 可

○ いまは大丈夫だが、仕様がいつ変わるかわからない

○ Trial 時は 固定IP 必須だった

こういうのがいい

● 札束で GAE (flexible environment)

● 札束で heroku

● 札束で Azure

候補 (Java で本気運用するなら)

最後に

BOT を実際に運用してみて

● LINE はインターフェースとしては最高

○ スマホ (iPhone/Android)

○ ガラケー (一部)

● 別途インストール不要なので導入しやすい

○ 友だち登録だけで OK

○ 実際に導入してもらえたのはこのあたりは大きい

BOT を実際に運用してみて

● BOT 自体はわりと簡単に作れる

○ サーバサイドによっては 非エンジニア でも可能では?

● 自分で作ったものが身近な人に使ってもらえる喜び

○ 簡単に導入してもらえる → 反応がもらえる

○ こんなに開発モチベーションがあがったのは久しぶりだった

登録してご意見いただけるとうれしいです

公式サイト(facebook)

● 登録方法○ LINE 起動○ 友だちとして追加 (QRコード読込)

1. 2016年半ば現在のGoogle App Engine

2. 個人的に最強のPaaSプラットフォームGoogle App Engineの良い所を挙げてみる

3. GAE/go+ginとGAE/java+servletでそれぞれスピンアップの速度差をゆる〜く確認する

4. 大量メッセージが来ても安心な LINE BOTサーバのアーキテクチャ

5. [github] line-bot-sdk-java

資料