# Bolt for JavaでのSlackアプリ開発を試してみる
# BoltはSlackアプリ用のフレームワーク
瀬良さん(@seratch)がご担当ということで日本語ドキュメントがあるので試していきたいと思います 😃
📣Slack のフレームワーク Bolt は JavaScript だけでなく JVM でも利用可能になりました!https://t.co/GNmjRlzK7Q
— @seratch (瀬良) (@seratch_ja) March 20, 2020
Java 版は私が主担当なので、最初から完全な日本語ドキュメントを用意しています。 Java だけでなく #Kotlin との相性も良いので、ぜひ試してみてください。#SlackDevJP #JJUG https://t.co/XASq3NyIzO
今回はBoltの概要を一通りやっていきます。
# BoltアプリをGetting Started
とりあえずbolt-exampleというディレクトリを作ってみました。Javaは入ってて、作業はVS Codeでやっていきたいと思います。
$ mkdir bolt-example
$ cd bolt-example/
$ java -version
java version "11.0.4" 2019-07-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.4+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.4+10-LTS, mixed mode)
$ code .
とりあえずサンプルのままbuild.gradleに👇
plugins {
id("application")
}
repositories {
mavenCentral()
}
dependencies {
implementation("com.slack.api:bolt-jetty:1.0.1")
implementation("org.slf4j:slf4j-simple:1.7.30")
}
application {
mainClassName = "hello.MyApp"
}
run {
// gradle run -DslackLogLevel=debug
systemProperty "org.slf4j.simpleLogger.log.com.slack.api", System.getProperty("slackLogLevel")
}
gradleは今のマシンでまだインストールした記憶がないので、、
brew install gradle
# MyApp.javaを書いていきます
とりあえずディレクトリ作ってjavaファイルを作ります。
$ mkdir -p src/main/java/hello/
$ touch src/main/java/hello/MyApp.java
VS Codeに戻ってサンプルのコードをコピペします。
package hello;
import com.slack.api.bolt.App;
import com.slack.api.bolt.jetty.SlackAppServer;
public class MyApp {
public static void main(String[] args) throws Exception {
// SLACK_BOT_TOKEN と SLACK_SIGNING_SECRET は管理画面から取得して環境変数へ
App app = new App();
app.command("/hello", (req, ctx) -> {
return ctx.ack(":candy: はい、アメちゃん!");
});
SlackAppServer server = new SlackAppServer(app);
server.start(); // http://localhost:3000/slack/events
}
}
# 書いたプログラムを実行してみる
api.slack.com/apps/〜 からデータをコピって環境変数に設定しておきます
$ export SLACK_BOT_TOKEN=xxxx
$ export SLACK_SIGNING_SECRET=xxxx
gradle buildはとりあえず成功したっぽい
$ gradle build
BUILD SUCCESSFUL in 10s
5 actionable tasks: 5 executed
続いてgradle run👇。動いてはいるみたいです。
$ gradle run
> Task :run
[main] INFO org.eclipse.jetty.util.log - Logging initialized @382ms to org.eclipse.jetty.util.log.Slf4jLog
[main] INFO org.eclipse.jetty.server.Server - jetty-9.4.24.v20191120; built: 2019-11-20T21:37:49.771Z; git: 363d5f2df3a8a28de40604320230664b9c793c16; jvm 11.0.4+10-LTS
[main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@7bbc8656{/,null,AVAILABLE}
[main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@13fd2ccd{HTTP/1.1,[http/1.1]}{0.0.0.0:3000}
[main] INFO org.eclipse.jetty.server.Server - Started @493ms
[main] INFO com.slack.api.bolt.jetty.SlackAppServer - ⚡️ Bolt app is running!
<=========----> 75% EXECUTING [18s]
ngrok をダウンロードしてきて、プロジェクトディレクトリに配置して叩きます。
👆のRequest URLをSlackアプリの管理画面のSlash Commandから追加したRequest URLに記載するという流れ。
# /helloをワークスペースで叩いてみる
そんなこんなでワークスペースから /hello すると👇のように 😃
確かにコレはお手軽ですね〜。ちなみにngrokを落とすとちゃんと👇のようなエラーを出してくれます。
/hello はエラー「http_client_error」により失敗しました
前前職ではSpringで社内系のツールとかも作ったりしてたので、久しぶりにSpring Boot触ってみたい気もしてきました。本でも買って勉強するかな、、
👇こっちはKindleだと安い予感
それとも技術書典で今風なのがあったりとかするのだろうか、、