6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

これは、アドベンドカレンダー「AI エージェント機能で進化した JetBrains の開発体験をシェアしよう by JetBrains Advent Calendar 2025」の1日目の投稿です。

以下、本アドベントカレンダーの概要より抜粋。

このカレンダーは、AI エージェント機能で進化した JetBrains IDE(例:IntelliJ IDEA / PyCharm / GoLand / RubyMine など)を活用した、実践的な開発体験の共有をテーマとしています。

計画 → 実装 → テスト/インスペクション の一連を IDE の中で完結させる工夫を歓迎します。小さな Tips から機能単位の具体的な事例まで、複数ファイル編集・リファクタリング・テスト生成・ドキュメント化など、現場で再現しやすいノウハウの投稿をお待ちしています。

本投稿では、「Junieを使ってUnityプロジェクトにRequired属性を一括付与する」事例・ノウハウを紹介します。

JetBrains の AI コーディングエージェント「Junie」を使って、条件を満たした箇所にC#の属性(Javaのアノテーションに近い要素)を付与し、Unityプロジェクトにおける発生しやすいトラブルを回避します。

前提・背景となるUnityの課題

本記事の概要を理解するための前提・背景を簡単に紹介します。本記事で紹介する事例・ノウハウは、ゲームエンジンUnity向けのものです。

Unityでは、C#コード・画像・3Dモデル・音楽ファイル・Unity専用の構成要素・プロジェクト設定ファイルなど、様々なフォーマットのファイルを集めて、プロジェクトとして扱います。

UnityプロジェクトにはSceneという要素があります。Sceneは、GameObjectという要素で構成されます。次の画像は、非常にシンプルなSceneである、Sampleシーンのスクリーンショットです。下の画像左側はSceneの内容を表示しています。SampleシーンはGameObject「Main Camera」、「SampleSceneManager」、「Character」で構成されています。

image.png

GameObjectComponentという要素で構成されます。上の画像右側は、GameObject「Main Camera」の構成要素を示しています。画像右側の「Transform」や「Camera」などはComponentです。

Unityプロジェクトの開発作業では、ComponentをC#でコーディングし、Unity Editor上でGUI操作により、SceneGameObjectComponentを構築・編集・設定します。Componentの構築・編集・設定作業において、「プロジェクト内のファイル」や「他のGameObjectや他のComponent」を参照設定を行います。

以下に示すコードはComponentのコードである、「SampleSceneManager」クラスのコードです。SerializeField属性が付与されたcharacterフィールドに注目してください。

using UnityEngine;

public class SampleSceneManager : MonoBehaviour
{
    [SerializeField] Character character;
}

Unity Editor上のSampleSceneManager Componentには「Character」という項目が表示されます。この項目に、Scene上のCharacter Componentへの参照を設定します。

image.png


よくあるUnityプロジェクトのトラブルとして、「Componentに設定した参照が壊れてしまい、実行時エラーが発生してしまう」というトラブルがあります。これは、Componentから参照設定していたプロジェクト内のファイルや、Scene上の他GameObjectを、誤って消してしまうことが原因です。

これを解決するために、本記事ではSerializeField属性が付与されている箇所に、Required属性を付与します。

SerializeField属性は、UnityEngine.SerializeField属性です。

Required属性は、Unityの有償アセット(ライブラリ)「Odin Inspector and Serializer」のSirenix.OdinInspector.Required属性です。

Required属性は、参照設定が必要・必須なこと示す属性です。コードでRequired属性がついているのに、Componentで参照が設定されていない箇所は、次のようにUnity Editor上でエラー表示をしてくれます。

image.png

また姉妹製品の「Odin Validator」を使えば、プロジェクト内のRequired属性が付与されているのに、参照が設定されていない箇所を一括で探すことができます。

image.png

このようにRequired属性を使い、参照が必要・必須なのに参照されていない箇所を見つけだし、「Componentに設定した参照が壊れてしまい、実行時エラーが発生してしまう」というトラブルを回避することは非常に有効です。

ところで、開発・運用がある程度進んだプロジェクトにおいて、多数存在するSerialzieField属性利用箇所の全てに対して、Required属性を付与するのはなかなか大変です。

そこで、Junieを使ってSerialzieField属性利用箇所に対して、Required属性を付与します。

Junieを使ってRequired属性を付与する

JunieはJetBrains の AI コーディングエージェントです。

Junieを使って実プロジェクト中のSerializeField属性利用箇所に対して、Required属性を付与していきます。

image.png

Junieタブを開いて、次のようなプロンプトを入力します。

SeriarizeField属性が付与されているすべてのフィールドにRequired属性を付与してください。

付与する対象は、Assets/MyProjctCodePath以下のすべてのcsファイルが対象です。対象でないファイルは一切変更しないでください。
SeriarizeField属性とは、厳密にはUnityEngine.SeriarizeField属性です。
Required属性とは、厳密にはSirenix.OdinInspector.Required属性です。
付与した後のコードは、[Required, SeriarizeField]のような形式で、一行でかつカンマ区切りで付与してください。
必要に応じて、namespace文を追加してください。
余分な変更は行わず、コンパイルエラーにならないような修正をしてください。

いくつか補足します。

付与する対象は、Assets/MyProjctCodePath以下のすべてのcsファイルが対象です。対象でないファイルは一切変更しないでください。

Unityでは、サードパーティーのライブラリ・アセット・コードも「Assets」という管理・開発対象ディレクトリに配置されます。そこで、上記のプロンプトで、編集する対象を自作コードに明確に限定します。

SeriarizeField属性とは、厳密にはUnityEngine.SeriarizeField属性です。
Required属性とは、厳密にはSirenix.OdinInspector.Required属性です。

上記のプロンプトで、付与する対象を明確にします。

付与した後のコードは、[Required, SeriarizeField]のような形式で、一行でかつカンマ区切りで付与してください。

上記のプロンプトで、付与した後のコードフォーマットを具体的にします。
コードフォーマットに対しては、プロジェクト固有の設定に合わせることをおすすめします。また、Junieから「既存コードが複数行の場合は、複数行にしていいか」など問われることもあるでしょう。

必要に応じて、namespace文を追加してください。

上記のプロンプトで、追加のコーディング指示を行います。

余分な変更は行わず、コンパイルエラーにならないような修正をしてください。

上記のプロンプトで、プロジェクトが常にコンパイルエラーにならないような支持を追加します。

先のプロンプトを入力すると、Junieは設定に合わせて、対話的に今後の作業プランの提示、確認をしてくれます。プロジェクトに合わせて適切な作業内容、変更内容、一括で行うか・漸進的に行うかなどを指示・やり取りしてください。

誰にこの作業がおすすめか、なぜこの作業がおすすめか

この「Junieを使ってUnityプロジェクトにRequired属性を一括付与する」作業は、Unity開発者、特に個人開発者や小規模チームにおすすめです。

  • 作業量が多く、手作業でやるにはなかなか精神的に手が出しにくい(場合がある・人もいる)
  • Junieの作業結果のレビューが明確で簡単
  • プロジェクト全体に対して一括で作業を行わなくても、漸進的・部分的に作業をしても効果がある
  • 万が一作業漏れがあっても、大きなトラブルにはならない

とくに初めてのJunieでの作業におすすめです。

おすすめの追加指示

Required属性に加えて、場所ごとにAssetsOnly属性とSceneObjectsOnly属性を付与させるのもおすすめです。

さいごに

本記事では「Junieを使ってUnityプロジェクトにRequired属性を一括付与する」事例を紹介しました。

「やれば終わるし、やったら効果的。だけれど、そこそ面倒」という作業はたくさんあります。そのような作業を、Junieにどんどんお任せしてみるのはいかがでしょうか?


無料の非商用利用向け IDE のご利用や、1 か月間の無料トライアルをご活用いただけます。
また、AI 機能は別途サブスクリプションとなりますが、AI Pro の 1 か月間無料トライアルも併せてご利用ください。

本記事執筆時点では、無料で使えるトライアルもあるようです。ぜひ試してみてください!

JetBrains IDEはいいぞ!Riderはいいぞ!Junieはいいぞ!

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?