Zudo Slack Wisdom
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

その場での更新

chat.update がもつ絶対的な読み取り専用保証、ピン留めダッシュボードのパターン、Table ブロックの制限

更新できるのは投稿したアプリだけ

chat.update は既存メッセージのテキストとブロックを編集する。Slack 自身のドキュメントに よれば「更新できるのは認証済みユーザーが投稿したメッセージのみ」であり (chat.update)、この「認証済み ユーザー」とはトークンの主体を指す — 必ずしもアプリのことではない。bot トークンの場合は bot 自身がそれにあたる。あるメッセージを編集できるのは、それを最初に投稿した bot だけだ。 設定すべき ACL もなければ、設定を誤りうる共有ダイアログもなく、別のアプリや人間にメッセージ 本文の編集権限を与える管理者の上書きも存在しない。ただしユーザートークンは人間として 認証されるため、それを使って呼んだ chat.update は、その人間が書いたメッセージであれば 何でも編集できる — 別のアプリがその人になり代わって投稿したもの(Slack コネクトや ワークフロー連携など)も含めてだ。以下で述べる絶対的かつ設定不要の読み取り専用保証は、この ページが扱う bot トークンによるダッシュボードのパターンで成り立つものであって、ユーザー トークンを使う連携が自動的に得られるものではない。

通知なし、「編集済み」表示なし — ブロックを使う場合

メッセージをその場で編集してもチャンネルへの通知は発生しない。更新のたびにチャンネルを 騒がせたくないステータスボードにとっては、これが正しい挙動だ。メッセージの中身が素の text ではなく Block Kit の blocks である場合、Slack は「(編集済み)」の表示も出さない。つまり chat.update で更新された Block Kit メッセージは、何度更新されても見た目上は最初に投稿された ときとまったく同じに読める。

ピン留めダッシュボードのパターン

以上の組み合わせ — bot だけが書き込めること、静かに更新されること、「ここが変わった」という 視覚的なマーカーが出ないこと — によって、chat.update は Slack 内ステータスボードを組み立てる ときの既定の部品になる。

  1. 最初のブロック本文とともに chat.postMessage を 1 回だけ実行する。

  2. 得られたメッセージを pins.add して、チャンネルのピン留めアイテムのパネルから辿れるように する。

  3. cron(あるいは任意のトリガー)で、同じ channel + ts に対して新しくレンダリングした blocks ペイロードを chat.update する。

これは更新 1 回あたりちょうど API 呼び出し 1 回で済み、channel/ts のペア以外に状態を持つ 必要がなく、追加設定ゼロで前述の読み取り専用保証を引き継ぐ。なおピン留めしても、メッセージが チャンネルのタイムライン上部に固定されるわけではない。ピン留めアイテムの一覧に追加される だけなので、新しいメッセージが届けばダッシュボードは可視範囲の履歴から流れていく。ピンは、 スクロール位置にかかわらず読み手がそこへ戻れるようにするためのものだ。ピンはチャンネルの メンバーなら誰でも外せるが、ピンを外してもメッセージが削除されるわけではない。ダッシュボード 自体は残り、ピン留めアイテムの一覧から外れるだけだ。

bot が書き込める表示面のなかでの既定の選択肢

bot がダッシュボードを書き込める他の面 — Slack リスト、キャンバス、App Home タブ、外部ページ へのチャンネルブックマーク — と比べると、ピン留めした chat.update メッセージは最も低コスト でありながら最も強い読み取り専用保証をもつ選択肢だ。その代わりに本格的なレイアウトモードは 諦めることになる(カンバンボードもなければ、行ごとのスレッドもない)。より重い面に手を伸ばす のは、チームが実際にそうした機能を求めてからでいい。

Table ブロックの制限

Block Kit の Table ブロックは、chat.update で更新されるメッセージの内側で使える構造化 レイアウトのなかで最も表現力が高い。2026-08-06 時点での一次リファレンス (Table block) によれば以下の とおり。

制限
メッセージあたりのテーブル数1 — 同一メッセージ内の 2 つ目の Table ブロックは only_one_table_allowed で失敗する
行数最大 100
行あたりの列数1 行の配列につき最大 20 セル
テーブルあたりの文字数そのテーブル内の全セル合計で 10,000
メッセージあたりの文字数メッセージ内の全テーブルセルを合算して 10,000
セルの型rich_textraw_textraw_number
block_id最大 255 文字

100 行や 10,000 文字を超えるテーブルコンテンツが必要になったダッシュボードは、この面には 収まりきっていない。データをページングするか、要約するか、より大きな構造化データ向けに作られた 面(Slack リスト。リストのセクションを参照)に移すことになる。

Revision History

作成更新