この記事はボット (Bot) Advent Calendar 2017 - Qiitaの20日目の記事です。
最近はスマートスピーカーの機運が高まってきていますが、BOT勢もまだまだ勢いは衰えていませんよ!!!1
家にいない時に電気消したい?家にいない時にエアコンつけたい?これをやるにはBOTが必要ですよね!ということでそんなBOT開発者の為にLINE BOTをKotlin
で実装する為の雛形を作りました。
使用する技術スタックは表題にもありますが、以下の通りです。
- LINE BOT SDK
- Kotlin
- AWS Lambda
- API Gateway
- DynamoDB
- Serverless Framework
成果物
Githubで公開していますので、よろしければForkするなりIssues登録するなり好きにしてください:D
なお、本実装にはmoritalous/linebot-serverless-blueprint-javaを大いにパクっ参考にさせていただきました。この場を借りて御礼申し上げます:D
出来ること
これからBOT開発をしていく上で最低限必要な以下の機能を実装しています。
- 入力された文字列をオウム返しする
- 定期的にPushメッセージを送信する
入力された文字列によって処理を分岐したければそういうロジックを入れればよし、
定期的に何か別のAPIを叩きたければそういうロジックを書けばよし。
BOTにやらせたい処理って基本的にはどちらかに収束すると思うので、それをサクッと書き始められるような雛形、という位置づけです。
作成した経緯
以下の理由から、Kotlin
でLINE BOT書くしかねぇとなりまして。
Kotlin
使ってなんか書きたいけどGUI考えるのめんどくさ(ry => BOT書くしかねぇ- スマートホーム化=外部ネットワークからリクエストを送りたい => BOT書くしかねぇ
Amazon Echo全然買えない=> BOT書くしかねぇ
ところが、LINE BOTのKotlin
実装って非常に人気がないんですね。ググってもなかなか情報が出てきませんでした。
ないなら作ればいいじゃないということで、作りました。
ハマったところ
ハマったところというか、まだわかってないんですが()
Gradleの最新verは執筆時点で4.4
なんですが、これでビルドすると設定してるHandler
が見つからずにClassNotFoundException
吐いちゃうんですよね。
Class not found: com.serverless.Handler: java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: com.serverless.Handler
とりあえずバージョン落としてビルドすればなぜか通るので、2.13
まで落としています。原因わかる方いたら助けてプリーズ。
build.gradle
task wrapper(type: Wrapper) {
gradleVersion = '2.13'
}
gradle/wrapper/gradle-wrapper.properties
#Fri Feb 24 00:05:35 JST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-all.zip
その他に関しては、優秀なIDE(IntelliJ IDEA CE)に助けられながら、多少はKotlinぽい?コードになったのかなぁ…とか思ってます。Kotlin
ほぼ初見で書いているので、変な部分あれば容赦なく突っ込んでください:D