2021/12/13(月)の回です。
前の日は、@kaizen_nagoyaさんによる『あなたもdocker, 私もdockerから5ヶ月。』でした。
私は
$\huge{どっかーら}$
やってこうかしら。
そうだ! Slackアプリをイゴかしてみよう1!!!
はじめに
dockerを楽しんでいますか
Slackを楽しんでいますか
Hacobuneを楽しんでいますか
「Bolt 入門ガイド(Bolt for Python)」はとてもすぐれたガイドです。
こちらを一周することで、Slackアプリの制作を完全に理解2できます。
さてどこでイゴかそう1かとお悩みの方はいらっしゃいませんか
そんな、あなたに、さくらインターネットさんのHacobuneをご紹介します。
2021/11/24 現在、オープンβ版とのことで無料で使わせていただけます!
What is Hacobune ?
Hacobuneは、当社が「インフラを意識しない世界を実現する」をビジョンに開発したPaaS型クラウドサービスです。スタートアップ企業や少人数でのサービスの開発を行うお客さまなど、スモールスタートでの開発に適しています。Hacobuneを利用することで、インフラの構築が不要となり、お客さまはアプリケーションの開発およびアップデートのみに専念することができ、サービスリリースのサイクルを加速させることが可能となります。
(https://www.sakura.ad.jp/information/announcements/2021/08/12/1968207782/)
ハイライト
Dockerfile
をつくればでデプロイできちゃいます
「Bolt 入門ガイド(Bolt for Python)」をまだやっていない方は一周やってみてください。
タイポレベルですが日本語訳の誤りは私がプルリク出して、マージしてもらっていますから、な〜んにも迷うところはありません。
私が出して取り込んでもらったプルリク
- https://github.com/slackapi/bolt-python/pull/507
- https://github.com/slackapi/bolt-python/pull/508
- https://github.com/slackapi/bolt-python/pull/519
マージされたとおもったら即座に日本語サイトの内容が更新されていたことに感動しました
世界を相手にしているスピード感はさすがだと感服いたしました。
用意するもの
ここからは用意するものを書いておきます。
app.py
「Bolt 入門ガイド(Bolt for Python)」に記載のソースコードそのままです。
あなたのアプリケーションをご用意ください。
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# ボットトークンと署名シークレットを使ってアプリを初期化します
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
# 'hello' を含むメッセージをリッスンします
@app.message("hello")
def message_hello(message, say):
# イベントがトリガーされたチャンネルへ say() でメッセージを送信します
say(
blocks=[
{
"type": "section",
"text": {"type": "mrkdwn", "text": f"Hey there <@{message['user']}>!"},
"accessory": {
"type": "button",
"text": {"type": "plain_text", "text":"Click Me"},
"action_id": "button_click"
}
}
],
text=f"Hey there <@{message['user']}>!"
)
@app.action("button_click")
def action_button_click(body, ack, say):
# アクションを確認したことを即時で応答します
ack()
# チャンネルにメッセージを投稿します
say(f"<@{body['user']['id']}> clicked the button")
# アプリを起動します
if __name__ == "__main__":
SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
Slackアプリ
ガイドの通りに、Slackアプリの各種設定を行っておいてください。
そもそもこれをきちんと設定しないと、SLACK_APP_TOKEN
やSLACK_BOT_TOKEN
をもらえませんからね〜
Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./app.py" ]
に記載の通りそのままです。
requirements.txt
slack_bolt
Hacobuneへのデプロイ
さ〜ていよいよお待ちかね、デプロイの時間ですよ。
Deploy Time!
この記事のハイライトです。
公式ドキュメントです。
事前準備
デプロイ方法は次の3種類とのことです。
①パブリックのDockerイメージを使用
②プライベートのDockerイメージを使用
③GitHubレポジトリをHacobuneに接続して使用(Dockerfileが必須)
①パブリックのDockerイメージを使用を説明します。
dockerhubを使う例で書きます。
$ docker build -t first-bolt-app .
$ docker tag first-bolt-app <your_username>/first-bolt-app
$ docker login
$ docker push torifukukaiou/first-bolt-app
Hacobune
に従ってすすめるとよいです。
こんな感じです。
ソケットモードを利用する場合、外部公開はOFFでよく、アプリケーションのポートは適当でよいです。
あとは環境変数の設定を行ってください。
先述のapp.py
では次の2つの環境変数を設定する必要があります。
- SLACK_BOT_TOKEN
- SLACK_APP_TOKEN
たったこれだけで、しかもいまなら無料!!! で、Slackアプリをイゴかすことができます
$\huge{Thank\ you\ very\ much!!!}$
Wrapping up
Enjoy docker!!!
Enjoy Slack!!!
Enjoy Hacobune!!!
-
「動かそう」の意。おそらく西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針3イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg= ↩ ↩2
-
例の完全に理解した: https://twitter.com/ito_yusaku/status/1042604780718157824 ↩
-
大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。 ↩