SlackのBlock Kitでリッチなメッセージを構築しよう

Slack の Block Kit という機能の存在を知った。

この機能を活用することで、リッチで読みやすく理解しやすい Slack メッセージを構築することができるそうだ。

やってみる

Formatting text for app surfaces | Slack を参考に block を組み合わせてメッセージを構築してみる。

block は JSON で表現することができるので、プログラムから送信する際のリクエストボディに乗せる形となる。

下記がシンプルな block の例だ。

{
    "blocks": [
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*request timeout*"
            }
        }
    ]
}

Block Kit Builderを使うと可視化して確認することができる。

全ての block はその種類を指定するための type フィールドを持ち、その他にも block ごとに固有のフィールドを持つ。

この辺りは都度都度ドキュメントを参照するのが良いだろう。

block は複数組み合わせて使うことができる。

様々な種類の block を組み合わせて好き勝手カスタマイズできるので、気がついたら思ったより時間が経っていたなんてこともありそう。

{
    "blocks": [
        {
            "type": "header",
            "text": {
                "type": "plain_text",
                "text": "Error"
            }
        },
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*request timeout*"
            }
        }
    ]
}

メッセージ送信時には block はオブジェクトの最上位フィールドに指定して送信する。

block を使っている場合は、同階層の text フィールドの値はフォールバック値となる。

{
    "channel": "xxxxxx",
    "text": "Fallback",
    "blocks": [
        {
            "type": "header",
            "text": {
                "type": "plain_text",
                "text": "Error"
            }
        },
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*request timeout*"
            }
        }
    ]
}

感想

Block Kit Builder がかなり優秀で、これはメッセージ作りが捗ると感じた。

ただ、Slack 通知処理を SDK を使って実装するとなると、JSON のままではそのままコピペで使えないのでその部分が少し面倒だなと気になった。