その他
    ホーム技術発信DoRubyMonoDevelopにコーディング規約を設定する

    MonoDevelopにコーディング規約を設定する

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Unityをインストールする際に(特に設定しなければ)付属してくるIDE「MonoDevelop」でコーディング規約を設定する方法をご紹介いたします。

    はじめに

    気がついたらもう春ですね。
    春になると、卒業研究を終えた内定者たちのインターンシップ参加率が上がり、それに伴ってプロジェクトに新しいエンジニアが来てくれます。
    自分は今まで新卒という立場で、先輩方に色々と教わりながら1年間業務を行ってきたわけですが、そんな自分にも後輩ができるみたいです。全然実感がありません。

    さて、後輩たちの環境構築やプロジェクトの説明をする際に忘れてはならないのが、コーディング規約についてです。
    変数名の付け方やプログラムの構造だけでなく、改行、スペース、インデント等もプロジェクト間で揃えないと読み辛いソースコードが出来上がってしまいます。

    とはいえ、開発経験が乏しい場合でも、なんとなく自分の慣れ親しんでいるコードの書き方というのはあるかと思います。
    そんな状態で、「お前は今日からこのプロジェクトの一員だ、この規約に従ってコーディングしろ」と言われても(※実際にはそんな言い方はしません)、ただでさえ不慣れな環境の中、気を遣うことが多すぎて集中できないと思います。

    そこで、Unityに標準でついてくるIDE「MonoDevelop」の機能を使えば、他の人が作ったコーディング規約をインポートしてコードを自動整形することができます。

    やり方

    [MonoDevelop-Unity] 
    -> [Custom Policies...] 
        -> Add Policy 
            -> From file... 
                -> 拡張子「.mdpolicy」のファイルを選択
    
    enter image description here

    上記の手順を踏むと、.mdpolicyファイルを読み込んでコーディング規約を生成してくれます。

    .mdpolicyファイルとは

    .mdpolicyファイルの中身を見てみると、以下のようになっています。

      <NameConventionPolicy>
        <Rules>
          <NamingRule>
            <Name>Namespaces</Name>
            <AffectedEntity>Namespace</AffectedEntity>
            <VisibilityMask>VisibilityMask</VisibilityMask>
            <NamingStyle>PascalCase</NamingStyle>
            <IncludeInstanceMembers>True</IncludeInstanceMembers>
            <IncludeStaticEntities>True</IncludeStaticEntities>
          </NamingRule>
          <NamingRule>
            <Name>Types</Name>
            <AffectedEntity>Class, Struct, Enum, Delegate</AffectedEntity>
            <VisibilityMask>VisibilityMask</VisibilityMask>
            <NamingStyle>PascalCase</NamingStyle>
            <IncludeInstanceMembers>True</IncludeInstanceMembers>
            <IncludeStaticEntities>True</IncludeStaticEntities>
          </NamingRule>
          <NamingRule>
            <Name>Interfaces</Name>
            <RequiredPrefixes>
              <String>I</String>
            </RequiredPrefixes>
            <AffectedEntity>Interface</AffectedEntity>
            <VisibilityMask>VisibilityMask</VisibilityMask>
            <NamingStyle>PascalCase</NamingStyle>
            <IncludeInstanceMembers>True</IncludeInstanceMembers>
            <IncludeStaticEntities>True</IncludeStaticEntities>
          </NamingRule>
    
    ...以下省略
    

    このように、命名規約やインデント規約などが細分化された状態でxml形式で記述されています。
    これをプロジェクトの共有フォルダ等に置いておくことで、誰でも簡単にプロジェクトのコーディング規約を設定することができます。

    .mdpolicyファイルの作り方

    さて、.mdpolicyファイルですが、当然プロジェクト間で共有するためには誰かが最初に作成しないといけません。
    理論上、先ほどの例のような感じでxml形式で記述したファイルを.mdpolicy拡張子で保存すれば作成できますが、果てしなく面倒な作業ですね。

    当然ですが、MonoDevelopはインポートだけでなくエクスポートもできます。
    もちろん、xmlを書かなくても、MonoDevelop上で各規約の設定を行って保存することができます。

    enter image description here
    先ほどインポートの際に説明した画面の左側のメニューから、

    [Source Code] -> [Code Formatting] -> お好みの形式

    を選び(今回はC#)、画面右側で 「C# Format」を選択し、Editを押すと

    enter image description here

    このように、各種規約に対するパターンがずらっと並んだ画面が表示されます。
    ここでチェックボックスをいじったりして、右側のプレビューを参考にしつつ簡単に規約を設定できます。

    そして、無事に規約を作成し終えたら、先ほどの 「Add Policy」の右にある「Export」でファイルに出力しましょう!

    ファイル保存時にフォーマットを行う

    最後に、ファイル保存時に自動でフォーマットを行ってくれる機能をご紹介します。

    enter image description here
    [MonoDevelop-Unity] -> [Preferences] -> Text Editor -> Behaviour 
    

    の、「Format document on save」にチェックを入れて保存しましょう。

    これで、ファイルを保存した際に自動的に設定された規約に基いてコードを整形してくれます。

    以上、MonoDevelopにコーディング規約を設定する方法でした。