【マイクラ】タグとは?意味・使い道・データパックでの仕様【Java版】

この記事はJava版のデータパックで使う「タグ」解説です
NBTタグや/tagコマンドとは別物なので、そこは最初に整理します
Java版1.21以降はタグ用フォルダ名が一部変更されています

こんにちは。ゆずかきです。

マイクラのデータパックを触っていると、#minecraft:logsとか、tags/itemとか、replace: falseみたいな表記を見かけることがありますよね。

最初に見ると「タグって何?」「アイテムに名前を付ける機能?」と思いがちですが、Java版のタグはかなり便利な仕組みです。
簡単に言うと、複数のブロック・アイテム・エンティティなどを、ひとまとめにして扱うための分類リストですね。

たとえば、木材系アイテムを1個ずつ全部指定する代わりに、#minecraft:planksのようなタグを使えば、オークの板材・シラカバの板材・トウヒの板材などをまとめて指定できます。
これが分かると、レシピ改変・コマンド・関数管理・データパック制作が一気に読みやすくなります。

この記事を読めば、次のことが分かるようになります。

  • マイクラJava版における「タグ」の意味が分かります👍
  • データパック内でタグをどこに置けばいいか分かります👌
  • replacevaluesrequiredの意味が分かります
  • 1.21以降でありがちなフォルダ名ミスを避けられます(^^♪

それでは、やっていきましょう!

※本記事はJava版のデータパック仕様を前提にしています。
※統合版(Bedrock Edition)のタグ仕様とは異なる部分があります。
※Java版はアップデートごとにデータパック仕様が変わるため、配布用に作る場合は必ず対象バージョンで確認してください。


目次

1. タグとは?マイクラJava版での意味
2. タグで何が便利になる?
3. NBTタグ・/tagコマンドとの違い
4. タグファイルの基本構造
5. Java版1.21以降のフォルダ名に注意
6. よく使うタグの種類一覧
7. 自作タグを作る手順
8. タグをコマンドやレシピで使う考え方
9. replace・requiredの使い分け
10. タグが反映されない時のチェックポイント
11. まとめ
12. 引用・参考文献

この記事で分かること
・マイクラJava版のタグの意味
・データパックでのタグファイル配置
・1.21以降で間違えやすいタグフォルダ名
・初心者が詰まりやすいポイント


1. タグとは?マイクラJava版での意味

マイクラJava版のタグとは、ブロック・アイテム・エンティティ・流体・関数などを、グループとしてまとめるための仕組みです。

言葉だけだと少し分かりづらいので、例で考えてみましょう。

たとえば、マイクラにはたくさんの原木があります。

  • オークの原木
  • トウヒの原木
  • シラカバの原木
  • ジャングルの原木
  • アカシアの原木
  • ダークオークの原木
  • マングローブの原木
  • サクラの原木

これらを毎回1個ずつ指定するのは大変ですよね。
そこで、#minecraft:logsのようなタグを使うと、原木系ブロックをまとめて扱えるようになります。

つまりタグは、マイクラ内の「これは同じ仲間として扱ってね」という分類表みたいなものです。

タグのイメージ

#minecraft:logs
├ minecraft:oak_log
├ minecraft:spruce_log
├ minecraft:birch_log
├ minecraft:jungle_log
├ minecraft:acacia_log
├ minecraft:dark_oak_log
├ minecraft:mangrove_log
└ minecraft:cherry_log

このようにタグを使うと、コマンドやレシピ、データパック内の判定で、複数の対象をまとめて扱えるようになります。

特にデータパック制作では、タグを理解しているかどうかで作業のしやすさがかなり変わります。
「1個ずつIDを書く」から「まとまりで指定する」に変わるので、後から修正する時もかなり楽になりますよ。


2. タグで何が便利になる?

タグの便利さは、同じ性質を持つものをまとめて指定できることです。

代表的な使い道は下記です。

使い道 できること
ブロック判定 複数のブロックをまとめて判定 原木ならOKのように扱う
アイテム判定 クラフト素材や条件をまとめる 板材なら何でもOKのレシピ
エンティティ判定 Mobの種類をまとめる 対象Mobだけコマンドで処理
関数管理 自動実行する関数をまとめる tick/loadで関数を動かす
ワールド生成系 バイオームや構造物の条件に使う 構造物が生成される場所の判定


普通にサバイバルしているだけなら、タグを意識する場面は少ないです。
ただ、データパックを作る側になると一気に重要になります。

たとえば、オリジナルレシピを作る時に、

  • オークの板材だけ使えるレシピ
  • どの木材の板材でも使えるレシピ

この2つは、遊びやすさが全然違います。
後者にしたいなら、アイテムを全部書くより、板材タグを使った方がきれいです。

体験談
筆者は最初、木材系アイテムを1個ずつ全部書こうとしていました。
でもタグを使えば一発でまとめられるので、手入力ミスもかなり減ります。
データパック初心者ほど、早めに覚えておくと楽です。


3. NBTタグ・/tagコマンドとの違い

ここはかなり大事です。

マイクラで「タグ」と言うと、実は似た言葉がいくつかあります。
初心者さんが混乱しやすいところなので、先に整理しておきましょう。

名前 主な意味 この記事の対象?
データパックのタグ ブロック・アイテムなどをまとめる分類リスト 対象です
NBTタグ エンティティやブロックなどが持つ内部データ 別物です
/tagコマンド エンティティに任意の文字列タグを付けるコマンド 別物です
スコアボードのチーム・タグ的な管理 コマンド管理用の分類 別物です


この記事で扱うのは、データパック内にJSONファイルとして作るタグです。

たとえば、下記のような場所に置くものですね。

データパック名/
└ data/
  └ yuzukaki/
    └ tags/
      └ item/
        └ sample_items.json

一方で、/tag @e add testのようなコマンドは、エンティティに印を付ける機能です。
名前は似ていますが、データパックのタグとは用途が違います。

ここを混同すると、検索して出てきた情報が全部ごちゃごちゃになります。
なので、この記事では以降、タグ = データパックの分類タグとして進めますね。


4. タグファイルの基本構造

タグはJSONファイルで作ります。
基本形はかなりシンプルです。

{
  "replace": false,
  "values": [
    "minecraft:stone",
    "minecraft:deepslate",
    "#minecraft:logs"
  ]
}

この中で大事なのは、replacevaluesです。

replace

replaceは、同じ名前のタグが他のデータパックやバニラ側に存在する時、置き換えるかどうかを決める項目です。

基本的には、初心者さんはfalseで大丈夫です。

"replace": false

falseにしておくと、既存のタグ内容に自分の指定を追加するイメージになります。
逆にtrueにすると、同じタグを置き換える方向になるので、バニラや他データパックの挙動を壊すリスクがあります。

初心者さん向け結論
配布用データパックや通常の追加目的なら、まずはreplace: falseを使いましょう。
trueは「既存タグを意図的に上書きしたい時」だけでOKです。

values

valuesは、そのタグに入れる対象リストです。

"values": [
  "minecraft:stone",
  "minecraft:deepslate"
]

ここには、ブロックID・アイテムID・エンティティタイプIDなどを入れます。
さらに、別のタグを入れることもできます。

別のタグを入れる時は、先頭に#を付けます。

"values": [
  "#minecraft:logs"
]

この#はかなり重要です。
minecraft:logsと書くと通常のIDとして扱われ、#minecraft:logsと書くとタグ参照として扱われます。

required

少し応用ですが、requiredという指定もあります。

{
  "replace": false,
  "values": [
    {
      "id": "examplemod:custom_item",
      "required": false
    }
  ]
}

required: falseにしておくと、そのIDが存在しない場合でも、その項目だけを無視して読み込みを続けやすくなります。
Mod入り環境を想定したデータパックでは便利ですね。

ただし、通常のバニラ向けデータパックでは、まず普通にIDを書く形で十分です。
最初から難しく考えすぎなくて大丈夫です。


5. Java版1.21以降のフォルダ名に注意

ここが、現在のJava版でかなり詰まりやすいポイントです。

Java版1.21以降では、データパック内のタグフォルダ名が一部変更されています。
古い記事ではtags/itemstags/blocksと書かれていることがありますが、現在のJava版では基本的に単数形で書きます。

1.21以降の主なタグフォルダ

data/<名前空間>/tags/item/
data/<名前空間>/tags/block/
data/<名前空間>/tags/entity_type/
data/<名前空間>/tags/fluid/
data/<名前空間>/tags/game_event/
data/<名前空間>/tags/function/
data/<名前空間>/tags/worldgen/biome/
data/<名前空間>/tags/damage_type/
data/<名前空間>/tags/enchantment/

1.20.6以前の記事でよく見る古い書き方

data/<名前空間>/tags/items/
data/<名前空間>/tags/blocks/
data/<名前空間>/tags/entity_types/
data/<名前空間>/tags/fluids/
data/<名前空間>/tags/game_events/
data/<名前空間>/tags/functions/

つまり、昔の記事を参考にしてそのまま作ると、フォルダ名が原因でタグが読み込まれないことがあります。

かなり重要です
Java版1.21以降で作るなら、tags/itemtags/blockのように単数形を使いましょう。
ここを間違えると、JSONの中身が正しくても反映されません。

筆者的には、データパック初心者が一番引っかかりやすいのはここだと思います。
エラー文を見てもすぐ原因に気づけないので、まずフォルダ名を確認しましょう。


6. よく使うタグの種類一覧

マイクラJava版のタグは、ブロックやアイテムだけではありません。
データパックでは、いろいろな種類のタグを扱えます。

初心者さんが最初に覚えるなら、まずは下記だけで十分です。

タグの種類 フォルダ例 主な使い道
アイテムタグ tags/item レシピ・進捗・アイテム判定
ブロックタグ tags/block ブロック判定・採掘適性・特殊挙動
エンティティタイプタグ tags/entity_type Mobやエンティティの分類
流体タグ tags/fluid 水・溶岩などの流体分類
関数タグ tags/function tickloadで関数を自動実行
ゲームイベントタグ tags/game_event 振動・スカルクセンサー系などの判定
バイオームタグ tags/worldgen/biomeなど 生成条件やMob出現条件の分類
ダメージタイプタグ tags/damage_type ダメージ判定の分類
エンチャントタグ tags/enchantment エンチャントの分類や排他設定など


全部を一気に覚える必要はありません。

まずは、

  • アイテムタグ
  • ブロックタグ
  • エンティティタイプタグ
  • 関数タグ

この4つを触れれば、データパック制作の入り口としてはかなり十分です。

バニラでもタグは大量に使われている

タグは自作データパックだけの機能ではありません。
バニラのマイクラ内部でも、タグはたくさん使われています。

たとえば、

  • #minecraft:logs
  • #minecraft:planks
  • #minecraft:wool
  • #minecraft:mineable/pickaxe
  • #minecraft:water
  • #minecraft:lava

このような分類があり、ブロックの性質やクラフト素材のまとまりとして使われています。

「タグはデータパック上級者だけが使うもの」というより、マイクラの内部仕様をきれいに整理している仕組みと考えると分かりやすいです。


7. 自作タグを作る手順

ここからは、実際に自作タグを作る流れを見ていきます。
今回は例として、yuzukaki:building_itemsというアイテムタグを作ります。

1. データパックのフォルダを作る

まず、ワールドのdatapacksフォルダ内にデータパック用フォルダを作ります。

.minecraft/saves/<ワールド名>/datapacks/yuzukaki_tag_test/

その中に、最低限下記のような構造を作ります。

yuzukaki_tag_test/
├ pack.mcmeta
└ data/
  └ yuzukaki/
    └ tags/
      └ item/
        └ building_items.json

yuzukakiの部分が名前空間です。
自作データパックでは、他のデータパックと被りにくい名前を使うのがおすすめです。

2. JSONファイルを書く

building_items.jsonの中身を下記のようにします。

{
  "replace": false,
  "values": [
    "minecraft:stone",
    "minecraft:deepslate",
    "#minecraft:planks",
    "#minecraft:wool"
  ]
}

これで、yuzukaki:building_itemsというアイテムタグができます。

タグとして呼び出す時は、基本的に#yuzukaki:building_itemsのように#を付けます。

3. ファイル名とタグ名の関係

ファイルの場所とタグ名の関係は、下記のようになります。

data/yuzukaki/tags/item/building_items.json
↓
#yuzukaki:building_items

もしサブフォルダを使う場合は、パスもタグ名に入ります。

data/yuzukaki/tags/item/building/basic.json
↓
#yuzukaki:building/basic

この仕組みを覚えると、タグ名を見ただけでファイル場所も予想できるようになります。

4. /reloadで読み込む

データパックを入れたら、ワールド内で下記を実行します。

/reload

エラーが出なければ、ひとまず読み込みは成功です。
念のため、下記でデータパックが有効になっているか確認しておくと安心です。

/datapack list

体験談
JSONのカンマ抜け、フォルダ名ミス、名前空間の打ち間違いは本当によくあります。
特にtags/itemtags/itemsにしてしまうミスは、1.21以降だとかなり起こりやすいです。


8. タグをコマンドやレシピで使う考え方

タグは、作っただけでは意味がありません。
コマンド・レシピ・進捗・ルートテーブルなどから呼び出して使います。

ブロック判定で使う例

たとえば、プレイヤーの足元が原木系ブロックかどうかを判定したい場合、考え方としては下記のようになります。

/execute if block ~ ~-1 ~ #minecraft:logs run say 足元は原木系ブロックです

#minecraft:logsと書くことで、原木系ブロックをまとめて判定できます。
これをタグなしでやろうとすると、原木の種類ごとに判定を並べる必要があり、かなり面倒です。

エンティティタイプタグで使う考え方

自作のエンティティタイプタグを作れば、対象Mobをまとめて管理できます。

data/yuzukaki/tags/entity_type/target_mobs.json
{
  "replace": false,
  "values": [
    "minecraft:zombie",
    "minecraft:skeleton",
    "minecraft:creeper"
  ]
}

このタグは、#yuzukaki:target_mobsとして扱えます。

たとえば、特定の処理をゾンビ・スケルトン・クリーパーだけに行いたい時に便利です。
後から対象Mobを追加したい場合も、コマンド本体を何度も修正せず、タグファイル側に追加すれば済みます。

関数タグでtick/loadを使う

関数タグは、データパック制作でかなり重要です。
特に有名なのが、minecraft:tickminecraft:loadです。

  • minecraft:tick:毎ティック実行される関数を指定する
  • minecraft:load:データパック読み込み時に実行される関数を指定する

たとえば、毎ティック実行したい関数がある場合は、下記のようにします。

data/minecraft/tags/function/tick.json
{
  "replace": false,
  "values": [
    "yuzukaki:main"
  ]
}

この場合、data/yuzukaki/function/main.mcfunctionに書いた処理が毎ティック実行されます。

data/yuzukaki/function/main.mcfunction
say tick関数が動いています

ただし、毎ティック実行は負荷に直結します。
便利だからといって、重い処理を何でもtickに入れるのはおすすめしません。

注意!
tick関数は通常、1秒に20回実行されます。
少しの処理でも積み重なると重くなるので、サーバー用データパックでは特に注意しましょう。


9. replace・requiredの使い分け

タグで初心者さんが迷いやすいのが、replacerequiredです。
ここは実用目線で整理しますね。

replaceは基本falseでOK

結論から言うと、普通のデータパックではreplace: falseでOKです。

{
  "replace": false,
  "values": [
    "minecraft:apple"
  ]
}

これは、既存の同名タグに対して、内容を追加する方向の指定です。

反対に、replace: trueは強い指定です。

{
  "replace": true,
  "values": [
    "minecraft:apple"
  ]
}

同じタグ名の内容を置き換える用途なので、バニラタグや他データパックとの相性問題が出やすくなります。

replace: trueを使う場面

replace: trueを使うのは、たとえば下記のような場合です。

  • バニラの分類を意図的に変更したい
  • 配布ワールド内で、特定のタグ内容を完全に固定したい
  • 他のデータパックの影響を受けたくない

ただし、普通の追加用途ではあまり使いません。
自分が何を上書きしているか分からないうちは、false推奨です。

requiredはMod環境で便利

requiredは、存在しないIDがあった時の扱いに関係します。

{
  "replace": false,
  "values": [
    {
      "id": "examplemod:sample_item",
      "required": false
    }
  ]
}

このように書くと、examplemod:sample_itemが存在しない環境でも、その項目だけを無視して読み込みを続けやすくなります。

バニラだけを想定するなら、そこまで使う場面は多くありません。
ただ、Mod入り環境や複数データパック対応をするなら覚えておくと便利です。

タグの循環参照に注意

タグは別のタグを読み込めます。
ただし、タグ同士がぐるぐる参照し合う形はダメです。

たとえば、下記のような状態ですね。

#yuzukaki:a の中に #yuzukaki:b を入れる
#yuzukaki:b の中に #yuzukaki:a を入れる

このような循環参照は読み込み失敗の原因になります。
タグを階層化する時は、親子関係が一方通行になるように整理しましょう。


10. タグが反映されない時のチェックポイント

タグを作ったのに反映されない
/reloadしてもエラーが出る
古い記事通りに作ったのに動かない

そういう時は、下記を順番に確認してみてください。

  • [ ] Java版1.21以降なのに、tags/itemstags/blocksのような古い複数形フォルダを使っていないか?
  • [ ] tags/itemtags/blocktags/entity_typeなど、対象に合ったフォルダへ置いているか?
  • [ ] JSONの最後に余計なカンマが入っていないか?
  • [ ] values内でタグを参照する時、#minecraft:logsのように#を付けているか?
  • [ ] 名前空間やファイル名に大文字・全角文字・スペースを使っていないか?
  • [ ] pack.mcmetaがデータパック直下にあるか?
  • [ ] ワールドのdatapacksフォルダに入れているか?
  • [ ] /reloadを実行したか?
  • [ ] /datapack listでデータパックが有効になっているか?
  • [ ] replace: trueで既存タグを意図せず消していないか?
  • [ ] タグ同士が循環参照になっていないか?

筆者のおすすめ確認順は、まずフォルダ名です。
特にJava版1.21以降のitemblock単数形は、昔の記事を見ながら作ると本当に間違えやすいです。

次に見るべきはJSONです。
JSONはカンマ1つで読み込みに失敗します。
マイクラ側のエラーだけだと分かりづらい時は、JSONチェックツールなどで構文確認してから入れると安全です。

タグ初心者がやりがちな失敗例

× data/yuzukaki/tags/items/sample.json
○ data/yuzukaki/tags/item/sample.json
× data/yuzukaki/tags/blocks/sample.json
○ data/yuzukaki/tags/block/sample.json
// × 最後のカンマでエラーになりやすい例
{
  "replace": false,
  "values": [
    "minecraft:stone",
  ]
}
// ○ 正しい例
{
  "replace": false,
  "values": [
    "minecraft:stone"
  ]
}

このあたりを直すだけで、動くようになることが多いです。


11. まとめ

以上、マイクラJava版のタグの意味・使い道・データパックでの仕様について解説しました。

タグは、最初は少し難しく見えます。
ですが、正体はかなりシンプルで、複数のブロック・アイテム・エンティティなどをまとめる分類リストです。

要点を整理すると、

  • タグは、同じ性質のブロック・アイテム・Mobなどをまとめる仕組み
  • データパックではdata/<名前空間>/tags/...内にJSONファイルとして作る
  • Java版1.21以降は、tags/itemtags/blockのように単数形フォルダを使う
  • replace: falseは追加、replace: trueは置き換えのイメージ
  • 別タグを参照する時は#minecraft:logsのように#を付ける
  • /reload後に反映されない時は、まずフォルダ名とJSON構文を確認する

このあたりを押さえておけば、タグの基本はかなり十分です。

データパック制作では、タグを使えるようになると、レシピ・コマンド・関数管理が一気に整理しやすくなります。
「同じようなIDを何個も並べるのが大変だな」と思ったら、タグの出番です。

特にJava版1.21以降は、古い解説記事とフォルダ名が違う場合があるので、そこだけは本当に注意してくださいね。

では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。
柚子クラでは他にも便利装置やマイクラ仕様解説を紹介しているので、是非ご覧くださいね(^^♪


12. 引用・参考文献

この記事を書くにあたり、以下の公式Wiki・公式リリースノート・コミュニティ資料を参考にしています。