# カスタムパッケージの作成

> Understand the development workflow for creating new UPM packages.

Unity Package Manager は Unity 公式のパッケージ管理システムであり、以下の特長があります。

* Unity が素早く簡単に新しい機能を配布し、既存の機能を更新できるようにします。
* ユーザーが再利用可能なコンポーネントを見つけて共有するためのプラットフォームを提供します。
* 拡張可能なオープンプラットフォームとして Unity の機能を増進します。

Package Manager を使用して、プロジェクト依存関係の定義、パッケージ依存関係の解決、パッケージのダウンロードと追加、プロジェクトのコンテンツ統合を行うことができます。

パッケージの概念や、Unity Package Manager のしくみに関する一般的な情報は、[Unity Package Manager](/engine/6000.0/manual/packages-list/packages.md) のドキュメントを参照してください。

## 概要

パッケージは以下を含むことができます。

* C# スクリプト
* アセンブリ
* ネイティブプラグイン
* モデル、テクスチャ、アニメーション、オーディオクリップ、その他のアセット

**ノート**: Package Manager はパッケージのストリーミングアセットをサポートしていません。[Addressables](https://docs.unity3d.com/Packages/com.unity.addressables@latest) パッケージを代わりに使用してください。

パッケージの名前、バージョン、依存関係リスト、リポジトリへの URL などの情報を含む [パッケージマニフェスト](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md) ファイルも各パッケージに含まれています。

## 手順

新しいパッケージを作成する手順は以下の通りです。

1. 以下のいずれかの方法で、パッケージの空のシェルを作成します。

   * [埋め込みパッケージの設定](#EmbedMe)。
   * [ローカルパッケージの設定](#LocalMe)。

2. フォルダー構造のレイアウトが、Unity パッケージの [パッケージレイアウト規則](/engine/6000.0/manual/packages-list/custom-packages/cus-layout.md) に準じていることを確認します。例えば、エディターとランタイムのライブラリがある場合は、エディターライブラリは `Editor` フォルダー、ランタイムライブラリは `Runtime` フォルダーに格納されていることを確認します。

3. パッケージにコードが含まれている場合は、作成したパッケージレイアウトに必要なアセンブリ定義ファイルがあることを確認します。アセンブリ定義ファイルの作成と定義については、[アセンブリ定義とパッケージ](/engine/6000.0/manual/packages-list/custom-packages/cus-asmdef.md) を参照してください。詳細については、[アセンブリ定義](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files.md) を参照してください。

   **ノート**: アセンブリ定義ファイルの追加後にコンソールウィンドウに警告が表示された場合は、プロジェクトを保存して閉じてから再度開きます。

4. パッケージに必要なツール、ライブラリ、アセットを加えます。

5. パッケージに [テスト](/engine/6000.0/manual/packages-list/custom-packages/cus-tests.md) を加えます。テストは、パッケージがさまざまなシナリオで期待通りに機能するために不可欠です。

   * すべてのエディターテストを `Tests/Editor` に書き込みます。
   * すべての再生モードテストを `Tests/Runtime` に書き込みます。

6. パッケージのサンプルがある場合は、サンプルを [適切な samples サブフォルダ](/engine/6000.0/manual/packages-list/custom-packages/cus-samples.md) に追加します。

   **ノート**: パッケージにはサンプルのみを加えることができますが、同じレイアウトと JSON 構造を使用して、ツールやテンプレートのパッケージの一部としてサンプルを加えることもできます。

7. 新しいバージョンを公開するたびに `CHANGELOG.md` ファイルを更新できます。すべての新機能やバグ修正は、このファイルに記録されます。選択した changelog 形式の詳細については、[Keep a Changelog](http://keepachangelog.com/en/1.0.0/) のドキュメントを参照してください。

   このステップは、共有しないパッケージの場合には任意ですが、ユーザーが自分のニーズに最適なバージョンを判断できるようにするために、共有するパッケージの場合には強く推奨されています。

   **ヒント**: このパッケージの変更ログをホストする外部ウェブページへのリンクを提供するには、パッケージの `package.json` マニフェストファイルで [changelogUrl](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#changelogUrl) プロパティを設定します。

8. `LICENSE.md` ファイルと `THIRD PARTY NOTICES.md` ファイルに [ライセンスとサードパーティ](/engine/6000.0/manual/packages-list/custom-packages/cus-legal.md) の通知を加えることができます。

   このステップは、共有しないパッケージの場合には任意ですが、ユーザーによるパッケージの誤用やサードパーティライセンスの違反ことを防ぐために、共有するパッケージの場合には強く推奨されています。

   **ヒント**: このパッケージのライセンスとサードパーティに関する通知をホストする外部ウェブページへのリンクを提供するには、パッケージの `package.json` マニフェストファイルで [licensesUrl](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#licensesUrl) プロパティを設定します。

9. パッケージの [ドキュメントを作成](/engine/6000.0/manual/packages-list/custom-packages/cus-document.md) します。

   **ヒント**: このパッケージのドキュメントをホストする外部ウェブページへのリンクを提供するには、パッケージの `package.json` マニフェストファイルで [documentationUrl](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#documentationUrl) プロパティを設定します。

10. パッケージを [共有](/engine/6000.0/manual/packages-list/custom-packages/cus-share.md) します。

## 新しい埋め込みパッケージの作成

[Project フォルダー内](/engine/6000.0/manual/packages-list/packages/upm-manifest-prj/upm-embed.md) にカスタムパッケージを作成する手順は以下のとおりです。

**ノート**: この手順は、[カスタムパッケージを作成](#procedure) するための広範な手順の一部です。

1. Unity Hub を開き、コンピューターに [空のプロジェクトを作成](https://docs.unity3d.com/hub/manual/Projects.html) します。

   コンピューターで既存のプロジェクトを使用して、[パッケージをプロジェクトに埋め込む](/engine/6000.0/manual/packages-list/packages/upm-manifest-prj/upm-embed.md) か、[ローカルフォルダーからパッケージをインストールする](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/local.md) こともできます。ただし、新しいプロジェクトとして開始するほうが、パッケージコンテンツのエラーが発生しにくくなります。

2. コンピューターのファイルマネージャー (Windows のエクスプローラーや macOS の Finder など) を使用して、プロジェクトフォルダーに移動して、`Packages` サブフォルダーを見つけます。

3. [命名規則](/engine/6000.0/manual/packages-list/custom-packages/cus-naming.md) に従い、[パッケージ名](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#name) と一致する名前で、パッケージ用の新しいサブディレクトリを `Packages` フォルダーの中に作成します。例えば、パッケージ名が `com.example.mypackage` の場合、`com.example.mypackage` というサブディレクトリを作成します。

   **ノート**: これは、パッケージにアセットが含まれている場合に特に重要です。なぜなら、[AssetDatabase](/engine/6000.0/script-reference/unity-editor/asset-database/load-asset-at-path.md) は実際のフォルダー名に関係なく `Packages/<your-package-name>/Assets` に一致するアセットパスを検索するからです。

4. 任意のテキストエディターを開いて、パッケージフォルダーのルートに `package.json` という JSON ファイルを作成します。

5. `package.json` ファイルのすべての [必須フィールドと推奨フィールド](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#required) に入力します。[パッケージマニフェスト例](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#example) をリファレンスとして使用できます。

Unity を再度開くと、新しいパッケージが [Package Manager ウィンドウ](/engine/6000.0/manual/packages-list/packages.md) と Project ウィンドウに表示されますので、そこでパッケージのコンテンツの表示や変更を行うことができます。Project ウィンドウで `package.json` ファイルを選択した場合は、Inspector ウィンドウでその JSON の値を直接変更することもできます。

[メイン手順](#procedure) に戻り、パッケージの作成を完了します。

## 新しいローカルパッケージの作成

Project フォルダーの外にカスタムパッケージを作成する手順は以下のとおりです。

**ノート**: この手順は、[カスタムパッケージを作成](#procedure) するための広範な手順の一部です。

1. コンピューターのファイルマネージャー (Windows のエクスプローラーや macOS の Finder など) を使用して、パッケージ用のフォルダーを作成します。

   パッケージのコンテンツをすでに作成している場合は、既存の場所を使用することもできます。

2. 任意のテキストエディターを開いて、パッケージフォルダーのルートに `package.json` という JSON ファイルを作成します。

3. `package.json` ファイルのすべての [必須フィールドと推奨フィールド](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#required) に入力し、`name` プロパティが [命名規則](/engine/6000.0/manual/packages-list/custom-packages/cus-naming.md) に従っていることを確認します。[パッケージマニフェスト例](/engine/6000.0/manual/packages-list/custom-packages/upm-manifest-pkg.md#example) をリファレンスとして使用できます。

4. Unity で新しいプロジェクトを作成するか、既存のプロジェクトを開きます。

5. [Package Manager ウィンドウ](/engine/6000.0/manual/packages-list/packages/upm-ui.md) を開きます。先ほど作成した `package.json` ファイルを使用して、[ローカルパッケージをインストールする](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/local.md) 手順に従います。このステップは、必要な `.meta` ファイルを確実に作成するために不可欠です。

新しいパッケージが Package Manager ウィンドウと Project ウィンドウに表示されますので、そこでパッケージのコンテンツの表示や変更を行うことができます。Project ウィンドウで `package.json` ファイルを選択した場合は、Inspector ウィンドウでその JSON の値を直接変更することもできます。

[メイン手順](#procedure) に戻り、パッケージの作成を完了します。
