配布マップに使えそうなTips 2024

:::note warn
この記事はMinecraft Java Edition ver.1.21.3 時点の情報を元に執筆しています。
:::

本記事では、配布マップやデータパックを製作する中で知っておいた方が良さそうな情報やテクニックを雑多に書き出していきます。

Minecraft Command Advent Calendarで既に出ている記事と重複しているものもあります。この記事では簡単な概要のみを説明していくので、ぜひ興味のあるトピックは他の記事がないか探してみてください。
また、**あくまで私流の使い方であり、最適な方法ではないかもしれません**。本記事を足がかりとして、他の情報も探してみると良いと思います。

---

#### バニラのリソースパック・データパックの中身を見る

<details><summary><font color="blue">詳細</summary>

`.minecraft/versions/<version>/<version>.jar`にバニラのリソースパック・データパックが格納されています。
「名前を変更」でファイルの拡張子を`.jar`から`.zip`に変更し、zipファイルとして展開することで簡単に中を覗くことができます。（大量のファイルが出てくるので注意）
その中にある`assets`フォルダにはリソースパック、`data`フォルダにはデータパックのファイルが入っています。

データパックやリソースパックの構成・形式の見本としてや、バージョンアップ時の変更点の確認など、さまざまな時に参考にできます。

</details>


# translate・カスタムフォント

#### langファイル／translateの活用

（こちらの部分は、昨年のアドカレの記事ですでに詳しく解説されております。詳しく知りたい方はこちらの記事がおすすめです。）

https://qiita.com/Acryle/items/819ac864f095359f6af5

<details><summary><font color="blue">詳細</summary>

バニラのlangファイル（`assets/minecraft/lang/*.json`）には各言語のゲーム内テキストが羅列されています。

日本語なら`ja_jp.json`, 英語なら`en_us.json`です。
```assets/minecraft/lang/en_us.json
{
  "accessibility.onboarding.accessibility.button": "Accessibility Settings...",
  "accessibility.onboarding.screen.narrator": "Press enter to enable the narrator",
  "accessibility.onboarding.screen.title": "Welcome to Minecraft!\n\nWould you like to enable the Narrator or visit the Accessibility Settings?",
  "addServer.add": "Done",
  "addServer.enterIp": "Server Address",
  "addServer.enterName": "Server Name",
  ...
}
```

例えば、自作のリソースパックのlangファイルで下のように記述すると、その言語を選択したときにゲーム内で表示されるレシピ解禁テキストが変更されます。

```assets/minecraft/lang/ja_jp.json
{
    "recipe.toast.title": "図鑑が更新されました",
    "recipe.toast.description": ""
}
```
![スクリーンショット 2024-11-15 13.04.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/c3af458a-0924-41d1-6a40-ba2bc5fe6bb1.png)
↓
![スクリーンショット 2024-11-15 13.05.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/5202291a-7215-e6d9-8293-3a8fb7636337.png)


**配布マップ内で表示されるゲームテキストを変更したい場合**は、このように対応する箇所を探して変更しましょう。

また、自分で好きな`translate`を追加することもできます。
チャットコンポーネントで`translate`を指定し、設定したテキストを表示することができます。言語ごとに設定すれば、選択した言語に応じてテキストが変わります。

```assets/minecraft/lang/en_us.json
{
    "sample_translate": "sample"
}
```
```assets/minecraft/lang/ja_jp.json
{
    "sample_translate": "サンプル"
}
```

![スクリーンショット 2024-11-15 13.19.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/a397f64d-d089-8bde-f5b5-328dbcff8aa3.png)

![スクリーンショット 2024-11-15 13.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/8e3601cf-d5d1-a178-1feb-45ceeb6efdfa.png)

配布マップを多言語対応させたい場合はこの機能を活用しましょう。

</details>


#### カスタムフォント × translate

カスタムフォントについてはこちらの記事がおすすめです。

https://qiita.com/Acryle/items/d2d58359b55bd5ece6a0

<details><summary><font color="blue">詳細</summary>

カスタムフォントをユニコードに対応付けたあと、カスタムフォントを表示する際に毎回「あの画像はどのユニコードに対応させたっけ...？」と確認するのは面倒です。

そんなときに、カスタムフォントに`translate`を設定すると便利です。

```assets/minecraft/lang/en_us.json
{
    "character.girl1.normal":"\ue200",
    "character.girl1.smile":"\ue201",

    "space.-1": "\uef00",
    "space.-2": "\uef01",
    "space.-3": "\uef01\uef00",
    "space.-4": "\uef02",
    "space.-5": "\uef02\uef00",
    "space.-6": "\uef02\uef01",
    "space.-7": "\uef02\uef01\uef00",
    "space.-8": "\uef03",
    "space.-9": "\uef03\uef00",
    "space.-10": "\uef03\uef01"
}
```
![スクリーンショット 2024-11-15 14.32.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/5ee91eff-cc9e-74ae-9f3c-0f82ad8417b5.png)

</details>


# さまざまなカスタムメニュー

#### テキスト系
<details><summary><font color="blue">チャット欄 (/tellraw など)</summary>
例：
昔作っていたボス角度調整システム
<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">関節角度情報は、画面でポーズを確認しながらスコアボードで設定した後に、storageに保存しておこうかなって感じ<br><br>今後のためにできるだけテンプレ化していきたい <a href="https://t.co/AkcMPQqWCu">pic.twitter.com/AkcMPQqWCu</a></p>&mdash; Keeema (キーマ) (@keeema_1) <a href="https://twitter.com/keeema_1/status/1458449167525638149?ref_src=twsrc%5Etfw">November 10, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<font color="gray">（このボスもようやく配布マップで登場させられました。この時から丸3年かかってるってマジかよ...。ちなみに今はボスのアニメーションをAnimatedJavaで作っているので、この例のシステムはもう使ってません。）</font>

`/tellraw`コマンド等を使い、チャット欄にテキストを表示させるメニューです。`clickEvent`でクリック時の処理を追加したり、リソースパックのカスタムフォントを使って画像を表示することが可能です。

**チャット欄を占有する**というデメリットがあり、チャットで会話しながらマルチプレイをしている人にとっては邪魔になってしまうかもしれません。

</details>

<details><summary><font color="blue">本/書見台/看板</summary>

例：配布マップ「AnemoLand」ベータ版のショップ

![output5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/21c90b4a-c2cb-7a00-4a4d-93313acc9fd1.gif)

本や看板を使ったメニューです。
`clickEvent`でクリック時の処理を追加したり、リソースパックのカスタムフォントを使って画像を表示することが可能です。

</details>

<details><summary><font color="blue">タイトル/アクションバー表示 (/title)</summary>

例1：データパック「MobTamer」のペット操作用メニュー (6:02~)

<iframe width="560" height="315" src="https://www.youtube.com/embed/s-EAcvSpaZo?si=OWaLmNYieSRYXqPL&amp;start=362" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

`/title`コマンドでタイトルやアクションバーを表示させるメニューです。
タイトルやアクションバーはクリック操作が使えないため、他の操作が必要になります。
例では視点・スニーク・右クリック・ドロップを使って操作していました。

例2：昔作っていたカスタムHP/スタミナバー

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">HP/スタミナバーのテスト<br>バニラ準拠でハート式の方が好きって人もいるかも知れないけど、こういう感じにする…かも？(わからん) <a href="https://t.co/IFq4RH37b3">pic.twitter.com/IFq4RH37b3</a></p>&mdash; Keeema (キーマ) (@keeema_1) <a href="https://twitter.com/keeema_1/status/1495073886438039558?ref_src=twsrc%5Etfw">February 19, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<font color="gray">（これは2年前くらいまで作っていた配布マップです。約2年放置したのち作り直したため、現在はかなりシステムが変わってます。懐かしい。~~昔の方が凝ってないか？~~）

`/title`コマンドでカスタムフォントを表示させ、このようなゲージ・マップなどを作ることも可能です。

現バージョンで`/title`コマンドで自由な位置に画像やテキストを配置するためには、リソースパックでフォント（＋場合によってはシェーダー）をいじる必要があります。
詳細は省きますが、ネガティブスペースで左右の位置を調整したり、フォントをいじって上下に動かしたりします。アドカレでも取り上げられるテーマなので、興味があれば他の記事も探してみてください。

このようなメニューは実装が難しいですが、工夫次第で面白いことができます。

</details>

#### アイテム系

<details><summary><font color="blue">チェスト等のインベントリ</summary>

例：昔作っていた加工システム
<blockquote class="twitter-tweet" data-conversation="none"><p lang="ja" dir="ltr">【素材チェストと加工台】<br>手に入れた素材は素材チェストに格納されます。<br><br>加工台では、素材チェストの素材を消費して武器や防具を作成することができます。 <a href="https://t.co/74I7H2Ok9A">pic.twitter.com/74I7H2Ok9A</a></p>&mdash; Keeema (キーマ) (@keeema_1) <a href="https://twitter.com/keeema_1/status/1574409946636034049?ref_src=twsrc%5Etfw">September 26, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<font color="gray">（これは2年前くらいまで作っていた配布マップです。約2年放置したのち作り直したため、現在はかなりシステムが変わってます。懐かしい。~~昔の方が凝ってないか？~~）</font>

チェストなどのインベントリ付きブロック・エンティティを使ったメニューです。
`/item`, `/clear`, `/data modify`などのコマンドを使ってインベントリのアイテムを操作します。
**アイテムのクリックや設置**を検知し、設置アイテムを切り替えることでメニューを実装します。


</details>


<details><summary><font color="blue">プレイヤーのインベントリ</summary>

例：配布マップ「AnemoLand」ベータ版の装備変更システム

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/AnemoLand?src=hash&amp;ref_src=twsrc%5Etfw">#AnemoLand</a><br>外見装備システムが壊れてたので、直したついでに紹介！<br><br>・3セットの防具を登録可能<br>・簡単にセットを切り替え可能<br>・外見のみ他の装備を反映させられる<br>・防具の効果を得ながら非表示にもできる<br><br>(けっこう気に入っている。) <a href="https://t.co/oJyzxN0JY5">pic.twitter.com/oJyzxN0JY5</a></p>&mdash; Keeema (キーマ) (@keeema_1) <a href="https://twitter.com/keeema_1/status/1855264945317020113?ref_src=twsrc%5Etfw">November 9, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

プレイヤーインベントリを使ったメニューです。
`/item`, `/clear`, `/data modify`などのコマンドを使ってインベントリのアイテムを操作します。
アイテムのクリックや設置を検知し、設置アイテムを切り替えることでメニューを実装します。
チェストメニューと異なる部分は、プレイヤーインベントリを`/data`コマンドで直接編集できないことです。`/item replace`や`/item modify`を活用してアイテムを設置・編集する必要があります。

プレイヤーが**どの場所でも**、**個別のメニューを閲覧・操作できる**ことがメリットです。
ただし、**インベントリの一部を占有してしまう**というデメリットも存在します。

</details>


#### エンティティ系

<details><summary><font color="blue">エンティティ</summary>

例：データパック「MobTamer」の強化システム (7:20~)

<iframe width="560" height="315" src="https://www.youtube.com/embed/s-EAcvSpaZo?si=T5M-qF34y2aRxNtq&amp;start=441" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

`display entity`, `interaction`などを使ったメニューです。
`item display`や`text display`でメニューを表示し、クリック判定を出現させたい場所に`interaction`などを配置して実装します。
`interaction`は視点を合わせてクリックしたときに記録が残るエンティティです。その記録からクリックを検知することができます。

実際にエンティティを配置するので立体的な表現が可能であり、カスタムフォントやアイテムモデルを活用したメニューが作れます。
表現力や実装・演出の自由度がとても高く、面白いメニューを作ることができそうです。

</details>

# いろいろ

#### インベントリのステータス効果一覧を見えなくする

<details><summary><font color="blue">詳細</summary>

インベントリの右側にはこのようにステータス効果が表示されます。

![スクリーンショット 2024-11-19 16.48.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/9f685881-f976-1828-1f01-b3f94fb07ca3.png)

リソースパックを使い、これをこのように非表示にしてみます。

![スクリーンショット 2024-11-19 17.09.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/5bee14e1-5e4f-d8c6-051e-cbbdcd61eda1.png)

- テキストを非表示に
    言語ファイルの対応部分を消してしまいましょう。
    ```lang/en_us.json
    {
        "enchantment.level.1": "",
        "enchantment.level.2": "",
        "enchantment.level.3": "",
        "enchantment.level.4": "",
        "enchantment.level.5": "",
        "enchantment.level.6": "",
        "enchantment.level.7": "",
        "enchantment.level.8": "",
        "enchantment.level.9": "",
        "enchantment.level.10": "",
        "effect.duration.infinite": "",
        "effect.minecraft.speed": "",
        "effect.minecraft.resistance": "",
        "effect.minecraft.night_vision": ""
    }
    ```
    対応言語全てのファイルで同様に行いましょう。
    
    **効果時間が無限ではない場合、効果時間だけが表示されてしまいます。**
    (もし解決方法があれば教えてください🙇‍♂️)

- アイコンを非表示に
    例えば`speed`エフェクトのアイコンを非表示にしたい時には、`textures/mob_effect/speed.png`を透明な画像にします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/0cf23260-dd96-0477-a0f6-4249dbcc289a.png) ← これは16×16サイズの透明な画像です。「リンク先を保存」で保存できます。

- ウィンドウを非表示に
    `textures/gui/sprites/container/inventory/effect_background_large.png`, `(同ディレクトリ)/effect_background_small.png`を透明な画像にします。

</details>

#### 元のレシピや進捗を無効化する

<details><summary><font color="blue">詳細</summary>

`pack.mcmeta`の`filter`機能を使えば、バニラのレシピ・進捗を無効化できます。

```pack.mcmeta
{
  "pack": {
    /* 略 */
  },
  "filter": {
    "block": [
      {
        "namespace": "minecraft",
        "path": "recipe"
      },
      {
        "namespace": "minecraft",
        "path": "advancement"
      }
    ]
  }
}
```

</details>

#### インベントリのレシピブックに図鑑を作る

<details><summary><font color="blue">詳細</summary>

![output5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/aff1706a-d923-6e8e-d6e6-6b744507cfa8.gif)

配布マップで本来のレシピ機能が必要なければ、インベントリのレシピブックを思い切って図鑑などにしてしまうのも良いかもしれません。

サンプル：
```recipe/0101_walking_mushroom.json
{
	"type": "minecraft:crafting_shaped",
	"category": "building",
	"key": {
		"#": "minecraft:light_gray_stained_glass_pane"
	},
	"pattern": [
		"#"
	],
	"result": {
		"count": 1,
		"id": "minecraft:green_dye",
		"components": {
			"item_name": "【No.01-01】歩き茸",
			"custom_model_data": 10,
			"lore": [
				"{\"text\":\"  進化の過程で歩行機能を獲得した茸。\",\"italic\":false,\"color\":\"yellow\"}",
			]
		}
	}
}
```
- 1.21.3時点では、**ファイル名の順**でレシピブックにレシピが並ぶようです。
- プレイヤーがインベントリから確認できる図鑑を作るには、2×2で作れるレシピである必要があります。
- 1.21.2でレシピの原料にairが使えなくなりました。そのため、テクスチャを消したアイテムを原料としています。
- 図鑑用アイテムを作成できてしまわないように、配布マップ内で入手可能なアイテムを原料に使用しないようにしましょう。
- レシピをクリックした際にインベントリのクラフト欄に図鑑アイテムが表示されてしまいます。回避方法があったら教えてくれ！

**タブについて：**

![スクリーンショット 2024-11-13 0.28.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/d676b438-8485-390c-0c95-ef5c74581e9c.png)

タブは上から順に
- すべて
    - タブアイコンはテクスチャ`minecraft/textures/item/compass_16.png`またはモデル`minecraft/models/item/compass.json`から変更
- 装備
    - `"category": "equipment"`
    - タブアイコンはテクスチャ`minecraft/textures/item/iron_axe.png`, `minecraft/textures/item/golden_sword.png`またはモデル`minecraft/models/item/iron_axe.json`, `minecraft/models/item/golden_sword.json`から変更
- 建材
    - `"category": "building"`
    - タブアイコンはモデル`minecraft/models/block/bricks.json`から変更
- その他
    - `"category": "misc"`
    - タブアイコンはテクスチャ`minecraft/textures/item/lava_bucket.png`, `minecraft/textures/item/apple.png`またはモデル`minecraft/models/item/lava_bucket.json`, `minecraft/models/item/apple.json`から変更
- レッドストーン
    - `"category": "redstone"`
    - タブアイコンはテクスチャ`minecraft/textures/item/redstone.png`またはモデル`minecraft/models/item/redstone.json`から変更


</details>

#### 好きな音楽を流す

<details><summary><font color="blue">詳細</summary>

リソースパックの`minecraft/sounds/records/<record_id>.ogg`を上書きすることで、レコードの音楽を変えることができます。
`<record_id>`は`/playsound minecraft:music_disc.`の後に予測変換で出てくるidのいずれかです。

リソースパックでレコードの音楽を変えた後、`/playsound minecraft:music_disc.<music_id>`で変更後の音楽が流れます。
`/playsound minecraft:music_disc.<music_id> record`のようにサウンドカテゴリをレコードに設定するのがおすすめです。
カテゴリをレコードにした音は、「サウンド設定」の「ジュークボックス／音符ブロック」から音量調整ができるようになります。
配布マップのプレイヤーに「BGM音量を0にする」「レコード音量を調整する」ことをお願いした上で、自分で決めた音楽だけを好きなタイミングで流すこともできます。

配布マップでフリー音源を使用する場合、規約で「2次配布が許されている」または「暗号化されていない音源データを含んだ形式でデータを配布しても、ゲームが主体であれば2次配布にはあたらない」とされているか確認しましょう。

</details>

#### ログイン・初ログインしたプレイヤーを検知する＆プレイヤーidスコアを割り当てる

<details><summary><font color="blue">詳細</summary>

`scoreboard players`では、スコアホルダーに`@a`を指定した際は「ログイン中のすべてのプレイヤー」が対象となり、`*`を指定した際は「ログアウト中のプレイヤーを含むすべてのスコアホルダー」が対象となります。この差を利用し、ログインしたプレイヤーを検知することができます。

例えば、プレイヤーが存在するかどうかを管理するスコア`exist`で以下のようにログイン検知を行うことができます。
tick関数：
```tick.mcfunction
execute as @a unless score @s exist matches 1 run function <ログイン関数>
scoreboard players reset * exist
scoreboard players set @a exist 1
```

私の場合は、初ログイン時にはプレイヤーid管理スコア`player_id`を割り当てるようにし、このスコアが設定されていなければ初ログイン処理を行うようにしています。

ログイン関数：
```login.mcfunction
execute unless score @s player_id matches 0.. run function <初ログイン関数>
```

初ログイン関数：
```first_login.mcfunction
scoreboard players operation @s player_id = #new_player_id player_id
scoreboard players add #new_player_id player_id 1
```

</details>

#### コマンド権限無しでも使えるクリックイベント

<details><summary><font color="blue">詳細</summary>

チャット欄や本に表示するテキストに「クリックイベント」を設定すると、テキストをクリックした際にコマンドを実行させることができます。
しかし、そのコマンドはクリックしたプレイヤーを実行者とするので、コマンド権限がないと実行できない場合があります。

コマンド権限が無くても実行可能なコマンドに`/trigger`コマンドがあります。
`/trigger`コマンドではtrigger型で定義したスコアの値をセットできます。**セットした値に応じて関数を実行する**ということをシステム側で行えば、権限が無くても擬似的に任意の関数を実行することができます。

trigger用のスコアを定義：
```
scoreboard objectives add <score_id> trigger
```

クリックイベントに設定するコマンド：
```
trigger <score_id> set <value>
```

tick関数内で`execute as @a if score @s <score_id> matches <range> run function`で、スコアに値がセットされた時を検知して以下の関数を実行：
```
execute if score @s <score_id> matches <value1> run <function1>
execute if score @s <score_id> matches <value2> run <function2>
…
scoreboard players reset @s <score_id>
scoreboard players enable @s <score_id>
```

triggerスコアを一度セットした後は、enableするまで再セットすることができません。

**追記：記事執筆中にちょうど便利なライブラリが出ていました！**
> <blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">権限のないプレイヤーにも好きなコマンドを許可できるデータパックを公開しました。<br>（コマンド勢向け：triggerが超簡単に追加/削除できるライブラリです）<a href="https://t.co/LqQfYv04ml">https://t.co/LqQfYv04ml</a><a href="https://twitter.com/hashtag/Minecraft?src=hash&amp;ref_src=twsrc%5Etfw">#Minecraft</a> <a href="https://twitter.com/hashtag/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%A9?src=hash&amp;ref_src=twsrc%5Etfw">#マイクラ</a> <a href="https://t.co/bXBtktrBSR">https://t.co/bXBtktrBSR</a></p>&mdash; 赤石愛 (@AiAkaishi) <a href="https://twitter.com/AiAkaishi/status/1866118884102918438?ref_src=twsrc%5Etfw">December 9, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</details>

#### ワールドデータにリソースパックを同梱する（シングルプレイ向け）＆ワールド・リソースパックのアイコンを設定する

<details><summary><font color="blue">詳細</summary>

リソースパックをzip圧縮した`resources.zip`をワールドフォルダ内に入れることで、ワールド固有のリソースパックを設定することができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/77c13e25-4cfb-4d71-1b87-870133683ee3.gif" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924924/9f0bcb1b-559b-2945-9b38-e738053efed9.png" width=50%>

また、上のgifのように、リソースパック内に`pack.png`、ワールドフォルダ内に`icon.png`を置くことでリソースパック・ワールド選択画面のアイコンを設定することができます。データパックアイコンも同様に`pack.png`で設定が可能です。
ワールドアイコンのサイズは64×64である必要があります。

マルチプレイの場合はサーバーリソースパックを設定するか、各プレイヤーがリソースパックを導入する必要があります。

</details>

# さいごに

ボスバトル系配布マップ「AnemoLand」ベータ版を配布中です！（ダイレクト宣伝）

https://github.com/Keeema-1/AnemoLand/wiki

初めてマップを配布できたということで、流れでこんな記事を書いてみました。
私もこの配布マップを製作するにあたって、さまざまなコマンド勢の情報や実装を参考にしています。もし私の作品でも真似したい所があったら、遠慮なく参考にしてくれ！

***それでは、良きコマンドライフを！***