RPG Maker Unite のプロジェクトにJSONのオートフォーマット機能を導入し、gitで差分を確認できるようにする
1. 要旨
RPG Maker Unite(以下「Unite」と記載します。)で設定を変更すると、該当するJSONファイルが変更されます。しかし、Unite上で変更すると、変更後のJSONファイルが一行で出力され、差分の確認が非常に困難となります。また、チームで開発を進める場合、コンフリクトが頻発する原因になるでしょう。これらの問題をPrettier等のツールで解消する方法をご紹介します。
2. 開発環境
- Windows 11 Pro 22H2
- RPG Maker Unite 1.0.0
- Unity 2021.3.25f1
- Visual Studio Code 1.78.2
3. .gitignoreファイルの準備
GitHub公式リポジトリから、こちらのUnity用の.gitignore
を使用します。
今回はNodeモジュールを使用するので、.gitignore
に以下の内容を追記します。
# Node Modules directory
node_modules/
4. コードフォーマッターのインストール
4-1. Node.jsのインストール
まず、Node.js
をインストールしていない場合は、こちらからインストールしてください。
Node.js
はJavaScriptをブラウザの外側で実行するための環境で、Prettier等のツールを利用するために必要です。
4-2. Prettierのインストール
コードフォーマッター(コード整形ツール)であるPrettier
をインストールします。
Uniteで作成したプロジェクトのルートディレクトリで以下のコマンドを実行してください。
npm install --save-dev prettier
続いて、Uniteプロジェクトのルートディレクトリに、.prettierrc
ファイル(Prettierの設定ファイル)を新規作成してください。
{
"printWidth": 1
}
printWidth
は自動で折り返す文字数を設定するオプションです。
パラメータ1つごとに改行させたいので、数値を1に設定します。
他のオプションの設定については、Prettierの公式ドキュメントを参照してください。
4-3. JSONファイルのフォーマット
npx prettier --write [ファイル名]
のコマンドで、該当ファイルのフォーマットを実行できます。
まずは、以下のコマンドで、Uniteプロジェクト全体のJSONファイルをフォーマットします。
コマンドはUniteプロジェクトのルートディレクトリで実行してください。
npx prettier --write "Assets/RPGMaker/**/*.json"
フォーマットが完了したら、ここで一度、gitコマンドでコミットしてください。
4-4. lint-stagedのインストール
変更のあったJSONファイルごとにnpx prettier --write
を実行するのは面倒ですし、プロジェクト全体にnpx prettier --write
を実行するのも無駄があります。
そこで、lint-staged
(特定のGitステージングファイルに対してLintツールを実行するツール)をインストールし、Gitのステージに存在するJSONファイルだけにPrettierをまとめて適用できるようにします。
まずは、以下のコマンドをUniteプロジェクトのルートディレクトリで実行してください。
npm install --save-dev lint-staged
続いて、package.json
に以下の設定を追加してください。
"lint-staged": {
"*.json": "prettier --write"
}
この段階で、package.json
の内容は以下のとおりになっています。
なお、各モジュールのバージョンは、2023年5月13日時点のものです。
読者の皆様がインストールするタイミングによっては、バージョンが以下の数字より大きいものになっている場合もあります。
{
"devDependencies": {
"lint-staged": "^13.2.2",
"prettier": "^2.8.8"
},
"lint-staged": {
"*.json": "prettier --write"
}
}
フォーマッターの設定はこれで完了です。
試しに、Unite上で適当な設定を変更してみてください。
git add .
コマンドでステージにJSONファイルを追加した後、以下のコマンドを実行してください。
npx lint-staged
一行で出力されていたJSONファイルがフォーマットされ、差分を確認できるようになっているはずです。
5. コミット時に自動でフォーマットするように設定
JSONファイルのフォーマットを行わずにコミットしてしまうことを防ぐために、Husky
(Gitのhooks(コミットをする前に自動的に何かを行うための仕組み)を簡単に設定できるツール)を導入します。
5-1. Huskyのインストール
Uniteプロジェクトのルートディレクトリで、以下のコマンドを実行してください。
npm install --save-dev husky
続いて、package.json
に以下の設定を追加してください。
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
この段階で、package.json
の内容は以下のとおりになっています。
{
"devDependencies": {
"husky": "^8.0.3",
"lint-staged": "^13.2.2",
"prettier": "^2.8.8"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.json": "prettier --write"
}
}
5-2. Huskyの初期設定
Uniteプロジェクトのルートディレクトリで、以下のコマンドを実行し、Husky
を初期化します。
npx husky install
続いて、以下のコマンドを実行してください。
このコマンドにより、.husky/pre-commit
ファイルが作成されます。
npx husky add .husky/pre-commit "npx lint-staged"
以上でHusky
の設定は完了です。これにより、コミットを行う前にnpx lint-staged
コマンドが実行され、lint-staged
で設定したフォーマッターが自動的に適用されます。
Discussion