orizuru

つながる.見える.わかる IoTソリュ-ション

ReSharperで快適コーディング! ~設定を編集してみよう~

By
約 9 分
ReSharperで快適コーディング! ~設定を編集してみよう~

ReSharperで快適コーディング! ~設定を編集してみよう~

開発チームエンジニアのkojaです。筆者の前回記事でReSharperについて簡単にお話ししましたが、今回はもう少しReSharperについて掘り下げた内容をお届けします。テーマはReSharperの設定編集です。前回記事をお読みいただいた方は、ReSharperがいかに便利なツールであるか既にご存知でしょう。ただ、時にReSharperは開発者の意向に沿わないアラートを上げてきます。そういった場合はどうすればよいでしょうか?そんな時はReSharperの設定を開発者好みに書き換えてしまいましょう!

ということで今回は、ReSharperの設定編集についてC#でのちょっとしたケーススタディを交えながらお話しします。

ReSharper ケース1 暗黙の型指定はしたくない

ReSharperはローカル変数の宣言と初期化を行う際に、暗黙の型指定を推奨してきます。例えば次のコードを見てみましょう。

こちらのコードではnumbersをint型の要素を格納する配列として宣言・初期化しています。numbers の前にint[] として型が明記されていますが、この状態ではint[]の下にReSharperのアラートが緑の波線で出ています。どんなアラートが出ているかというと……

「Use implicitly typed local variable declaration」、つまり「ローカル変数の宣言には暗黙の型指定をしなさい」、というアラートですね。確かにこのnumbersはint[]の代わりにvarで暗黙に型を宣言することが可能です。

 

なぜvarの利用が推奨されるのか?その理由の一つとして、冗長な記述の回避があるでしょう。1行にint[]と2度書かなくても、numbersの型がint[]であることはわかります。どちらかというと、左辺をvarで宣言してしまった方が重複する記述もなくなってスッキリしますね。このように、変数を宣言・初期化する際に、コードの右辺を見て変数の型が明らかであればわざわざコードの左辺に変数の型を書かなくとも良いのです。
ただし、いつでもどこでもローカル変数の宣言にvarを利用するかというと、そうでもありません。次のコードを見てください。

こちらはメソッドGetNumbersの戻り値でnumbersを初期化しています。この場合もReSharperは破線でvarの利用を提案してきますが、その判断は妥当でしょうか?というのも、メソッドGetNumbersが一見してどのような値を返すのか、この記述だけではわかりません。この場合、ローカル変数の型を明示的に宣言することは必ずしも冗長ではないので、varを利用しない書き方も選択肢として考えるべきでしょう。プロジェクトによっては上記のようなケースを考慮し、変数の型宣言を常に明示的に記述する方針が採られることもあります。そういった方針の下ではvarを利用すべきというReSharperのアラートは却って煩わしいものとなってしまいます。ReSharperのアラートを単に無視することもできますが、敢えて従わないようにしているアラートがエディタ画面に表示され続けるのは好ましくありませんね。試しにアラートを出さないようにしてみましょう。

【設定】特定のアラートをOFFにしてみる

ReSharperの設定を書き換えることで、アラートのON/OFFやアラートレベルの調整が可能です。まずは設定画面を開きましょう。設定画面はVisual Studioのメニューバーから「RESHARPER」-> 「Options…」と選択していくことで開けます。

暗黙の型指定に関する設定はここからさらに「Code Inspection」->「Inspection Severity」 と潜っていきます。

言語ごとにタブが用意されています。「C#」のタブ内を「var」で検索してみると……

ありました!
「Use ‘var’ keyword when initializer explicitly declares type」
「Use ‘var’ keyword when possible」
この2つがvarに関するReSharperの設定項目です。各項目の右側にはアラートレベルを設定するプルダウンがあるので、プルダウンの選択を切り替えてアラートをOFFにしてみましょう。それぞれ「Do not show」を選ぶことでvarに関するReSharperのアラートが表示されなくなります。

御覧の通り、「Do not show」以外にも「Hint」から「Error」までアラートレベルを変えることができます。さて、実際に「Do not show」を選んで設定を保存してみると……

細かい違いではありますが、確かにアラートは表示されていません!このようにしてReSharperのアラートを制御することが可能です。

ただし!余程明確な理由がない限りアラートの制御は慎重に行う必要があります。というのも、ReSharperの設定は(特にC#では)デフォルトでその言語の規約を踏襲したものになっているからです。筆者は基本的にはReSharperのデフォルト設定に従うことを推奨します。

ReSharper ケース2 命名規約を変えたい

C#ではクラス名やプロパティ名、メソッド名、フィールドなど公開するものはPascal形式※1で命名することが推奨されています。また、パラメータやローカル変数はCamel形式※2で命名することが推奨されています。ReSharperもこれらの規約に則ってアラートを上げてきます。
試しにフィールド定数の定数名をPascal形式以外で書いてみると……

「Name ‘errorMessageUnexpected’ does not match rule ‘Constant fields(private)’. Suggested name is ‘ErrorMessageUnexpected’.」、つまり「’ errorMessageUnexpected’はフィールド定数のルールに沿っていないから’ ErrorMessageUnexpected’に書き換えなさい」と教えてくれているわけです。基本的には従った方が良いですが、どうしても従えない理由がある場合はReSharperの命名規約に関する設定を書き換えましょう。

【設定】特定の命名規約を変更してみる

ケース1の時と同様、Visual Studioメニューバーの「RESHARPER」-> 「Options」から設定画面を開き、「CodeEditing」->「C#」->「Naming Style」と潜っていくと命名規約の設定画面にたどり着きます。

各エンティティに対し「UpperCamelCase」や「lowerCamelCase」等で命名規約が設定されていることがわかります。

今回は例として「privateなフィールド定数はPascal形式じゃなくて全部大文字のSnake形式※3で書きたい」という場合の設定をしてみましょう。privateなフィールド定数の命名規約は「Constant fields (private)」にて設定されています。デフォルトでは「UpperCamelCase」(=Pascal形式)になっていますね。

設定を変えたい項目をダブルクリックするか、右クリックメニューの「Edit」をクリックすることで設定編集画面が開きます。

全部大文字のSnake形式に該当するのは「Name Style」選択肢中の「ALL_UPPER」になります。こちらを選択し、「Set」をクリックしましょう。すると、先ほどの命名規約の設定画面で「Constant fields (private)」のPreviewが「ALL_UPPER」に書き換えられます。

このまま「Save」をクリックすることで設定が保存され、以降ReSharperは保存された設定に従った命名規約を提案するようになります。
ここでエディタ画面に戻って全部大文字のSnake形式で書いてみましょう。すると、ReSharperは特にアラートを上げずすんなりとコードを許容してくれます。

ちなみに、一つの項目に対し複数の命名規約を許容することも可能です。先ほどの設定編集画面を見てみると、画面上部に「Add」「Remove」「Move Up」「Move Down」というメニューがあります。「Add」をクリックすると2つ目、3つ目の命名規約を追加できます。また「Remove」をクリックすると選択中の命名規約設定を削除できます。「Move Up」「Move Down」は命名規約の優先順位を調整するためのメニューです。上から順に優先度の高い命名規約となるので、優先順位を上げたい命名規約を「Move Up」で最上に、逆に優先順位の低い命名規約は「Move Down」で項目を下に移動させましょう。

※1 名前を構成する各単語の頭文字をアルファベット大文字にする形式。例えば「PascalCase」など(PascalとCaseの頭文字を大文字にして書く)。
※2 名前を構成する最初の単語の頭文字をアルファベット小文字とし、それ以降の単語の頭文字を大文字にする形式。例えば「camelCase」など(先頭の単語camelの頭文字は小文字とし、それに続く単語Caseの頭文字は大文字にして書く)。
※3 名前を構成する各単語をアンダーバー(_)でつなげる形式。例えば「snake_case」など(snakeとcaseの間にアンダーバーを入れる)。

最後に

以上、2つの事例を基にReSharperの設定編集について見ていきました。今回紹介した項目以外にも多くの設定をカスタマイズすることが可能ですので、設定画面に触れたことがない方は一度じっくりと確認してみることをおすすめします。便利なReSharperがますます便利になること間違いなしです。設定画面が全部英語?大丈夫です。このご時世、英語の翻訳ツールなんていくらでもあります。快適なコーディングのためにツールはガンガン使っていきましょう!

補足:当記事を書くにあたって以下の環境を使用しています。
Windows 10
Visual Studio 2013
ReSharper 8.2

About The Author

エンジニアKoja
製造業向けの業務支援アプリケーションを開発しています。

Leave A Reply

*
*
* (公開されません)