# Bolt for JavaでのSlackアプリ開発を試してみる

# BoltはSlackアプリ用のフレームワーク

瀬良さん(@seratch)がご担当ということで日本語ドキュメントがあるので試していきたいと思います 😃

今回は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 をダウンロードしてきて、プロジェクトディレクトリに配置して叩きます。

ngrok

👆のRequest URLをSlackアプリの管理画面のSlash Commandから追加したRequest URLに記載するという流れ。

ngrok

# /helloをワークスペースで叩いてみる

そんなこんなでワークスペースから /hello すると👇のように 😃

ngrok

確かにコレはお手軽ですね〜。ちなみにngrokを落とすとちゃんと👇のようなエラーを出してくれます。

/hello はエラー「http_client_error」により失敗しました

前前職ではSpringで社内系のツールとかも作ったりしてたので、久しぶりにSpring Boot触ってみたい気もしてきました。本でも買って勉強するかな、、

現場至上主義 Spring Boot2 徹底活用

👇こっちはKindleだと安い予感

Spring Boot 2 プログラミング入門

それとも技術書典で今風なのがあったりとかするのだろうか、、

このエントリーをはてなブックマークに追加

Algolia検索からの流入のみConversionボタン表示