Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How to post bulleted lists using Slack Webhook URL.

2025年09月11日に「Dev.to」が公開したITニュース「How to post bulleted lists using Slack Webhook URL.」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Slack Webhookで箇条書きを投稿する際、公式Markdown例が機能しないバグがある。これを解決するには「Rich text block」を用いると良い。外側を`rich_text`ブロック、内側に`rich_text_list`(bulletスタイル)を配置し、各項目を`rich_text_section`として定義することで、正確に箇条書きを表示できる。

ITニュース解説

Slackは、チームやプロジェクト内のコミュニケーションを効率的に行うための強力なツールであり、システムエンジニアの業務でも頻繁に利用される。Slackには、手動でメッセージを投稿するだけでなく、プログラムから自動的にメッセージを送信する便利な機能が存在する。その一つが「Webhook(ウェブフック)」という仕組みだ。Webhookは、特定のURLにデータを送信することで、Slackの特定のチャンネルに自動的にメッセージを投稿できる機能である。システムからの通知や定期的なレポートなど、様々な情報を自動で共有する際に役立つ。

しかし、このWebhookを使ってSlackにメッセージを送る際、一般的なテキストの装飾である「箇条書き」をうまく表示できないという問題が発生することがある。通常、Slackのメッセージは「Markdown(マークダウン)」というシンプルな記法に対応しており、テキストの前に「-」や「*」を付けることで箇条書きとして表示されるはずだ。だが、Webhook経由でこのMarkdown形式の箇条書きを送信しても、期待通りに表示されず、ただのテキスト行として認識されてしまうという現象が確認されている。これは、Slackのシステム内部でMarkdownを処理する部分に、何らかの想定外の挙動、つまり「バグ」が存在するためと考えられている。このため、公式のMarkdown記法を使っても、きれいに整った箇条書きを自動投稿することは困難な場合がある。

このような問題を解決し、Webhook経由でもSlackに確実に箇条書きを投稿する方法が存在する。それが「Rich text block(リッチテキストブロック)」と呼ばれる機能を利用する方法だ。Rich text blockは、単なるテキストだけでなく、画像、ボタン、そして今回のように整形されたリストなど、より複雑なレイアウトのメッセージを構成するためにSlackが提供している仕組みである。箇条書きを正しく表示させるためには、このRich text blockの特定の構造を使ってメッセージを作成し、Webhook経由で送信する必要がある。

Rich text blockを用いて箇条書きメッセージを作成するには、JSON(JavaScript Object Notation)という形式でメッセージの構造を記述する。JSONは、プログラミング言語間でデータをやり取りする際によく使われる、人間にも読みやすいデータ形式だ。キーと値のペアで構成され、階層的なデータを表現できる。システムエンジニアにとって、JSONのようなデータ構造を理解し、扱えることは基本的なスキルの一つとなる。

Slackに送信するメッセージ全体は、複数の「ブロック」の集まりとして構成される。今回の箇条書きメッセージを構成する最も外側のブロックは、必ず type"rich_text" である必要がある。これは、このブロックが多様な書式設定が可能なテキスト情報を含むことを示している。

この "rich_text" タイプのブロックの elements という部分に、実際に表示したいコンテンツを定義していく。elements は通常、複数の要素を格納できるリスト形式になっている。箇条書きを表現するためには、この elements の中に type"rich_text_list" の要素を配置する。

"rich_text_list" 要素の中には、箇条書きのスタイルを指定する style というキーがある。ここで style"bullet" と設定することで、点(・)を使った標準的な箇条書きとして表示されるようになる。また、indent というキーでリストの字下げレベルを指定できるが、今回の例では 0 となっており、最も外側のリストとして扱われることを意味する。

そして、この "rich_text_list" 要素の elements の中に、箇条書きの各項目を記述していく。ここもリスト形式になっており、箇条書きの一行一行がそれぞれ独立した要素として定義される。各項目は type"rich_text_section" というブロックで表現される。"rich_text_section" は、テキストのまとまりを意味するブロックの種別である。

さらに、"rich_text_section"elements の中に、実際に表示したいテキストの情報を記述する。ここには type"text" の要素を配置し、text キーに「foo」「bar」「baz」といった具体的なテキストの文字列を指定する。このようにして、一つ一つのテキストが箇条書きの項目として構成される。

この詳細なJSON構造を組み立て、Pythonなどのプログラミング言語からWebhook経由でSlackに送信するのが、実際のプログラムの流れとなる。ニュース記事の例では、slack_sdk というPythonライブラリの WebhookClient を利用している。WebhookClient は、指定されたWebhook URLに対して、作成したメッセージのブロック情報を簡単に送信できる便利なツールだ。

Pythonコードの unordered_list_elements という変数が、箇条書きの各項目("rich_text_section" の部分)を動的に生成している様子を示している。for ループを使って「foo」「bar」「baz」といった文字列から、それぞれに対応する rich_text_section を作成し、リストに追加している。

最終的に api_client.send メソッドが呼び出され、上記の構造で作成されたブロック情報(blocks リスト)がSlackのWebhook URLに送信される。これにより、一般的なMarkdown記法では難しかった、期待通りの箇条書きメッセージがSlackに正確に投稿される仕組みが実現する。

このように、SlackのWebhookで箇条書きを確実に投稿するには、一般的なMarkdown記法では対応できないという制約があるものの、Rich text blockという詳細な構造定義を用いることで、この問題を回避できる。特定のJSON形式のルールに従ってメッセージの構造を記述し、それをプログラムからWebhook経由で送信するというアプローチは、システム開発においてAPI(Application Programming Interface)連携を行う際の基本的な考え方の一つである。システムエンジニアを目指す上では、既存のシステムやサービスと連携する際に発生するこのような課題を理解し、その解決策となる技術やデータ形式(JSONなど)を習得することが、非常に重要なスキルとなるだろう。