【Unity】コードスタイル
Unityでスクリプトを書くコツ、綺麗に書くにはといった、一見正解がないようなものを整理して定型化したものがありますので、それを学習していきましょう
コードの書式設定
ネーミングに加えて、書式設定は当て推量を減らし、コードの明瞭さを向上させるのに役立ちます。標準化されたスタイルガイドに従うことで、コードレビューはコードがどのように見えるかではなく、それが何をするかについてより多くなります。
チームがコードをフォーマットする方法をパーソナライズすることを目指しています。Unityスタイルガイドを設定する際には、次の各コード書式設定の提案を検討してください。チームのニーズに合わせて、これらのサンプルルールを省略、展開、または変更することを選択できます。
いずれの場合も、チームが各書式設定ルールをどのように実装するかを検討し、全員に均一に適用してもらいます。不一致を解決するには、チームのスタイルガイドを参照してください。フォーマットについてあまり考えなければ、より生産的かつ創造的に働くことができます。
いくつかの書式設定ガイドラインを見てみましょう。
プロパティ
プロパティは、クラス値を読み、書き、または計算するための柔軟なメカニズムを提供します。プロパティはパブリックメンバー変数であるかのように振る舞いますが、実際にはアクセサと呼ばれる特別なメソッドです。
各プロパティには、バッキングフィールドと呼ばれるプライベートフィールドにアクセスするためのgetおよびsetメソッドがあります。このようにして、プロパティはデータをカプセル化し、ユーザーまたは外部オブジェクトによる不要な変更からデータを非表示にします。「ゲッター」と「セッター」にはそれぞれ独自のアクセス修飾子があり、プロパティを読み取り/書き込み、読み取り専用、または書き込み専用にすることができます。
アクセサを使用してデータを検証または変換することもできます(たとえば、データが好みの形式に適合していることを確認したり、特定の単位に値を変更したりします)。
プロパティの構文は異なる可能性があるため、スタイルガイドではそれらをフォーマットする方法を定義する必要があります。コード内のプロパティの一貫性を維持するためのヒントについては、次の例を参照してください。
式形式のプロパティ
単一行の読み取り専用プロパティ(=>)に式形式のプロパティを使用します。これは、プライベートバッキングフィールドを返します。
自動実装されたプロパティ
他のすべては、expression-bodied { get; set; }構文を使用します。バッキングフィールドを指定せずにパブリックプロパティを公開したい場合は、自動実装プロパティを使用してください。
セットに式ボディの構文を適用し、アクセサを取得します。書き込みアクセスを提供したくない場合は、「セッター」を非公開にすることを忘れないでください。クロージングをマルチラインコードブロックのオープニングブレースに合わせます。
シリアル化可能なクラスや構造体は、INSPECTOR を整理するのに役立ちます。
シリアル化
スクリプトのシリアライズは、データ構造またはオブジェクトの状態をUnityが後で保存および再構築できる形式に変換する自動プロセスです。パフォーマンス上の理由から、Unityは他のプログラミング環境とは異なる方法でシリアル化を処理します。
シリアル化されたフィールドはインスペクタに表示されますが、静的、定数、または読み取り専用フィールドをシリアル化することはできません。それらは公開されているか、[SerializeField]属性でタグ付けされている必要があります。Unityは特定のフィールドタイプのみをシリアル化するので、シリアル化ルールの完全なセットについては、ドキュメントを参照してください。
シリアル化されたフィールドを扱うときは、これらの基本的なガイドラインを守ってください。
- [SerializeField] 属性を使用する: SerializeField 属性は、プライベート変数または保護された変数を使用して、インスペクタに表示できます。これは、変数をパブリックにマークするよりも優れたデータをカプセル化し、外部オブジェクトがその値を上書きするのを防ぎます。
- Range 属性を使用して、最小値と最大値を設定します: [Range(min, max)] 属性は、ユーザーが数値フィールドに割り当てることができるものを制限したい場合は便利です。また、インスペクタのスライダーとしてフィールドを便利に表します。
- シリアライズ可能なクラスまたは構造体内のデータをグループ化してインスペクタをクリーンアップする: パブリッククラスまたは構造体を定義し、[シリアライズ可能]属性でマークします。インスペクタで公開する各タイプのパブリック変数を定義します。
このシリアライズ可能なクラスを別のクラスから参照します。結果の変数は、インスペクタの折りたたみ可能なユニット内に表示されます。

ブレースまたはインデントスタイル
C#には2つの一般的なインデントスタイルがあります。
- BSDスタイル(BSD Unixから)とも呼ばれるオールマンスタイルは、オープニングカーリーブレースを新しい行に置きます。
- K&Rスタイル、または「1つの真のブレーススタイル」は、前のヘッダーと同じ行にオープニングブレースを保ちます。
これらのインデントスタイルにもバリエーションがあります。このガイドの例は、Microsoftフレームワーク設計ガイドラインのAllmanスタイルを使用しています。チームとしてどちらを選択するかに関係なく、全員が同じインデントとブレーススタイルに従っていることを確認してください。次のセクションでヒントを試すこともできます。
WINDOWS用VISUAL STUDIOのタブ設定
均一なインデントを決める
インデントは通常2つまたは4つのスペースです。タブ対スペースの炎の戦争に火をつけることなく、チームの全員にエディターの好みの設定に同意してもらいましょう。
Visual Studio for Windows で、[ツール] > [オプション] > [テキスト エディタ] > [C#] > [タブ] に移動します。
Visual Studio for Macで、環境設定>ソースコード>C#ソースコードに移動します。テキストスタイルを選択して設定を調整します。
注:Visual Studioは、タブをスペースに変換するオプションを提供します。
中括弧を省略しない
単行のステートメントでも、中括弧を省略しないでください。ブレースは一貫性を高め、コードの読み取りとメンテナンスを容易にします。この例では、中括弧はアクションDoSomethingをループから明確に分離しています。
デバッグ行を追加したり、後でDoSomethingElseを実行したりする必要がある場合は、中括弧がすでに配置されています。句を別の行にしておくと、ブレークポイントを簡単に追加できます。
複数行のステートメントを明確にするためにブレースを保つ
ネストされた複数行のステートメントから中括弧を削除しないでください。この場合、ブレースを削除してもエラーは発生しませんが、混乱を招く可能性があります。オプションであっても、明確にするために中括弧を適用します。
スイッチ文を標準化する
フォーマットは異なる場合がありますので、チームの好みをスタイルガイドに記録し、それに応じてスイッチステートメントを標準化してください。
ケースステートメントをインデントする1つの例を次に示します。
- 水平間隔
- スペースを追加する
- コンマの後の間隔
- 括弧の後にスペースなし
- 関数と括弧の間にスペースがない
- ブラケット内のスペースを避ける
- 流量制御条件の前の間隔
- 比較演算子との間隔
- 読みやすさのヒント
- 垂直間隔と領域
- Visual Studioでのコードフォーマット
空白の考え方
スペースのような単純なものは、画面上のコードの外観を高めることができます。個人的な書式設定の好みは異なる場合がありますが、読みやすさを向上させるために以下の提案を検討してください。
スペースを追加する
コード密度を減らすためにスペースを追加します。余分な空白は、線の一部間の視覚的な分離の感覚を与えます。
// 例: 行を読みやすくするためにスペースを入れる
for (int i = 0; i < 100; i++) { DoSomething(i); }
// 避ける: スペースがない
for(inti=0;i<100;i++){DoSomething(i);}
コンマの後の間隔
関数引数の間にコンマの後に単一のスペースを使用します。
括弧の後にスペースなし
括弧と関数の引数の後にスペースを追加しないでください。
// 例: 括弧とメソッド引数の後にスペースを入れない
DropPowerUp(myPrefab, 0, 1);
//避ける:
DropPowerUp( myPrefab, 0, 1 );
関数と括弧の間にスペースがない
関数名と括弧の間にスペースを使用しないでください。
中括弧内のスペースを避ける
可能な限り、中括弧内のスペースを避けてください。
フロー制御前の間隔
フロー制御条件の前に単一のスペースを使用し、フロー比較演算子と括弧の間にスペースを追加します。
比較演算子との間隔
比較演算子の前後に単一のスペースを使用します。
読みやすさのヒント
行を短くし、水平方向の空白を考慮してください。標準的な行幅(80〜120文字)を決定し、長い行をオーバーフローさせるのではなく、小さなステートメントに分割します。
先に説明したように、インデント/階層を維持するようにしてください。コードをインデントすると、読みやすさが向上します。
読みやすさのために必要でない限り、列の配置を使用しないでください。このタイプの間隔は変数を整列させますが、タイプと名前のペアリングを複雑にする可能性があります。
ただし、列のアライメントは、多くのデータを持つビット単位の式や構造体に役立ちます。より多くのアイテムを追加すると、列の配置を維持するための作業が増える可能性があることに注意してください。一部の自動フォーマットは、列のどの部分が整列されるかを変更することもあります。
垂直間隔と領域
垂直方向の間隔を有利に使用することもできます。スクリプトの関連部分を一緒に保ち、空白行を有利に使用してください。コードを上から下に整理するには、以下を試してください。
- 依存または類似のメソッドをグループ化する:コードは論理的で一貫性がある必要があります。同じことをするメソッドを隣同士に保管して、あなたのロジックを読んでいる誰かがファイルの周りを飛び回らなくてはないようにします。
- 垂直空白を使用して、クラスの異なる部分を区切ります。たとえば、次の間に2つの空白行を追加できます。
- 可変宣言とメソッド
- クラスとインターフェース
- if-then-elseブロック(読みやすさに役立つ場合)
これを最小限に抑え、可能であればスタイルガイドで追跡してください。
コードでリージョンを使用する
#regionディレクティブを使用すると、C#ファイル内のコードのセクションを折りたたんで非表示にすることができ、大きなファイルをより管理しやすく読みやすくなります。
ただし、このガイドのクラスの一般的なアドバイスに従うと、クラスサイズは管理しやすく、#regionディレクティブは不要でなければなりません。コードブロックをリージョンの後ろに隠すのではなく、コードを小さなクラスに分割します。ソースファイルが短い場合、リージョンを追加する傾向が低くなります。
注:多くの開発者は、地域をコードの臭いやアンチパターンだと考えています。議論のどちら側に落ちるかをチームとして決めてください。
プレビューウィンドウには、スタイルガイドの選択が表示されます。
Visual Studioでのコードフォーマット
これらのフォーマットルールが圧倒的に見えても、絶望しないでください。最新のIDEは、それらをセットアップして適用することを効率的にします。フォーマットルールのテンプレートを作成し、プロジェクトファイルを一度に変換できます。
スクリプトエディタの書式設定ルールを設定するには:
- Visual Studio for Windowsで、[ツール] > [オプション] に移動し、[テキスト エディタ] > [C#] > [コード スタイル フォーマット] を見つけます。
- 設定を使用して、一般、インデント、新しい行、間隔、および折り返しオプションを変更します。
- Visual Studio for Mac で、Visual Studio > Preferences を選択し、[ソースコード] > [コードの書式設定] > [C# ソースコード] に移動します。
- 上部のポリシーを選択し、[テキストスタイル]タブに移動します。C#フォーマットタブで、インデント、新しい行、間隔、およびラッピング設定を調整します。
スクリプトファイルをスタイルガイドに強制的に従うには:
- Windows 用 Visual Studio で、[編集] > [詳細設定] > [ドキュメントのフォーマット] (Ctrl + K、Ctrl + D ホットキーコード) に移動します。空白とタブの配置のみをフォーマットしたい場合は、エディタの下部にある実行コードクリーンアップ(Ctrl + K、Ctrl + E)を使用することもできます。
- Visual Studio for Macで、[編集] > [ドキュメントのフォーマット] (Ctrl + I ホットキー) に移動します。
Windowsでは、ツール>インポートとエクスポートの設定からエディタの設定を共有することもできます。スタイルガイドのC#コードフォーマットでファイルをエクスポートし、すべてのチームメンバーにそのファイルをインポートしてもらいます。
Visual Studioは、スタイルガイドに従うのに役立ちます。その後、フォーマットはホットキーを使用するのと同じくらい簡単になります。
注: Visual Studio 設定をインポートおよびエクスポートする代わりに、EditorConfig ファイル (上記参照) を設定できます。これにより、異なるIDE間でフォーマットの共有が容易になります。また、バージョン管理を操作するという追加の利点もあります。を参照してください。詳細については、NETコードスタイルのルールオプションを参照してください。
これはコードのクリーンアップに固有のものではありませんが、Visual Studioを使用してUnityでプログラミングワークフローを高速化する10の方法を必ず確認してください。これらの生産性のヒントを適用すると、クリーンなコードをフォーマットしてリファクタリングする方が便利であることを覚えておいてください。
参考
引用元になります
ディスカッション
コメント一覧
まだ、コメントがありません