前回はloot_tableでモブのドロップやブロックの収穫物をカスタマイズする方法を学びました。
今回はチャット欄に色・太字・クリックイベントを付けた「リッチなメッセージ」を表示するtellrawコマンドの書き方を解説します。JSON Textの構文はloot_tableのJSONと同じ感覚で書けるので、思ったよりスムーズに理解できるはずです。
対応バージョン:Java Edition 1.21.11
前提知識
- Datapackの基本フォルダ構成を理解していること(Datapackの作り方 入門編)
- mcfunctionファイルにコマンドを書いて実行できること(mcfunctionを使ってみよう)
- JSONの基本的な書き方(loot_tableのカスタマイズ記事を読んでいるとスムーズです)
tellrawとtitleの使い分け
Minecraftにはプレイヤーへメッセージを届けるコマンドが主に2種類あります。tellrawはチャット欄に表示し、ログとして残ります。イベント通知・操作ガイドなど「読み返せる情報」に向いています。titleは画面中央に大きく表示されますが数秒で消えるため、演出的な告知向けです。この記事ではDatapackで使用頻度の高いtellrawを中心に解説します。
ステップ1:JSON Textの基本構文
tellrawの第2引数にはJSON形式のテキストオブジェクト(JSON Text)を渡します。最低限必要なのは"text"プロパティだけです。
tellraw @a {"text":"Hello, World!"}
@aは全プレイヤーへ送信するセレクターです。コマンドを実行したプレイヤー自身に送るなら@s、最も近いプレイヤーなら@pを使います。
ステップ2:色と装飾を付ける
JSON Textに"color"・"bold"・"italic"などのプロパティを追加することで見た目を変えられます。"color"はMinecraftの色名("gold"・"aqua"・"red"など)またはHEXカラーコード("#FF5555")で指定します。
tellraw @a {"text":"アイテムを入手しました!","color":"gold","bold":true}
よく使う装飾プロパティは以下のとおりです。すべてtrueまたはfalseで指定します。
bold:太字italic:斜体underlined:下線strikethrough:打ち消し線obfuscated:文字をランダムにちらつかせる(暗号風演出)

ステップ3:配列で複数コンポーネントを組み合わせる
色や装飾が異なるテキストを1行に並べたいときは、JSON Textを配列(角括弧[])にします。先頭に必ず空文字列""を置くのが慣例です。これはMinecraftの仕様上、先頭に空文字がないと最初の要素のスタイルが後ろの要素にも引き継がれてしまう場合があるためです。
tellraw @a ["",{"text":"[情報] ","color":"aqua","bold":true},{"text":"ゲームが開始しました","color":"white"}]
カンマ区切りでオブジェクトを増やすだけなので、loot_tableのentriesと同じ感覚で書けます。各オブジェクトのスタイルは独立しているため、文字ごとに色を変えることも自由にできます。
ステップ4:hoverEventでマウスオーバー時に補足を表示する
hover_eventを使うと、テキストにマウスカーソルを合わせたときにツールチップを表示できます。アイテムの説明や注意書きを添えるのに便利です。
tellraw @a {"text":"アイテム詳細はこちら","color":"yellow",hover_event:{action:"show_text",value:{text:"このアイテムはとても強力です!",color:"white"}}}
actionに指定できる主な値はshow_text(テキスト表示)とshow_item(アイテムのツールチップ表示)です。valueの中にもJSON Textが入るため、ここにも色や装飾を付けられます。
補足:コマンドの改行ルール
チャット欄やコマンドブロックでは tellraw は必ず1行で書く必要があります。改行を入れると構文エラーになります。Datapackのmcfunctionファイル内では、行末に \ を付けることで次の行に続けて書くことができます。ゲームが読み込む際は1行として処理されるので、長くなったJSON Textを見やすく整形したいときに活用できます。このページのコードサンプルはどちらの環境でもそのままコピーして使えるよう、すべて1行で記載しています。

ステップ5:clickEventでクリック時のアクションを設定する
click_eventを使うと、テキストをクリックしたときにコマンドを実行したりURLを開いたりできます。「クリックしてワープ」「クリックでメニューを開く」といったインタラクティブなUIをチャット欄で実現できます。
tellraw @a {"text":"[クリックでワープ]","color":"green","underlined":true,click_event:{action:"run_command",command:"/tp @s 0 64 0"}}
主なactionの種類は以下のとおりです。
run_command:クリックしたプレイヤー自身がそのコマンドを実行する。実行者はあくまでクリックしたプレイヤーなので、OP権限が必要なコマンド(/function・/tp・/giveなど)は一般プレイヤーには実行できません。一般プレイヤーに処理を起こさせたい場合は、後述のtriggerを使う方法が定番ですsuggest_command:コマンドをチャット欄に入力するが実行はしない。プレイヤーが内容を確認してから送れるopen_url:指定したURLをブラウザで開くcopy_to_clipboard:指定したテキストをクリップボードにコピーする

ステップ6:mcfunctionにまとめて書く
実際のDatapackでは、tellrawをmcfunctionファイルに書いてイベント通知として使います。hoverEventとclickEventを組み合わせた実用的なサンプルを見てみましょう。
# functions/notify.mcfunction
tellraw @a ["",{"text":"[通知] ","color":"aqua","bold":true},{"text":"イベントが発生しました!","color":"white",hover_event:{action:"show_text",value:{text:"詳細を見る",color:yellow}},click_event:{action:"run_command",command:"/function my_datapack:show_detail"}}]
"run_command"で別のfunctionを呼び出す書き方をよく見かけますが、実行者はクリックしたプレイヤー自身なので、一般プレイヤーには /function を実行する権限がなく動作しません。
一般プレイヤーのクリックをきっかけに処理を動かしたい場合は、trigger を使うのがDatapackでの定番パターンです。trigger はOP権限なしでプレイヤー自身が値を変更できる特別なスコアボードで、tellrawと組み合わせると「クリック → triggerの値を変更 → Datapack側でその変化を検知して処理を実行」という流れを作れます。trigger の詳しい使い方はscoreboardの記事で解説します。
まとめ
tellrawはチャット欄にJSON Textを表示するコマンド。titleとの使い分けはメッセージが「残るか消えるか」で判断する- JSON Textに
"color"・"bold"・"italic"などを追加して装飾できる。HEXカラーコードも使用可能 - 配列形式
[]にすることで、異なるスタイルのテキストを1行に連結できる。 hover_eventでマウスオーバー時のツールチップ、click_eventでクリック時のコマンド実行やURL表示を設定できる- mcfunctionの中でtellrawを活用すると、イベント通知・操作ガイドなど実用的なインタラクティブUIが作れる
次の記事「アドバンスメント(実績)を自作しよう」では、独自の達成条件と報酬の設定方法、さらにtriggerを活用した汎用トリガーの作り方を解説します。
関連Tips
JSON Textの構文チェックや生成には、MCStacker Tellraw Generatorも活用できます。バージョン1.21対応で、GUIで色・hoverEvent・clickEventを設定しながら1行の完成コードをそのままコピーできます。複雑な配列を作るときの補助ツールとして便利です。
