matarillo.com

The best days are ahead of us.

31日間ReSharper一周 Day 6: 共有設定は.resharperファイルの中に

2012-12-30 18:17:12

元記事

31日間ReSharper一周」の6日目へようこそ。

時々、IDEがマシンごとに違う設定になってることがある。僕らは全員、ブルペン内の全マシンを使うから、時間がたてば相違点は解消されていくんだけど、ムカつくときだってあるわけ。特にコードの自動フォーマット設定は最悪だ。デザイナ画面で何かをちょっと動かすとかいった、一見無関係な変更をしたときでさえファイルが自動的に再フォーマットされてしまう。

頼みの綱はReSharper。いくつかの設定は、ソリューションディレクトリ上のとあるファイルに格納される。それは.resharperファイルだ。だから、.resharperファイルを他のファイル全部と一緒にソースコードリポジトリに突っ込めば、開発チームの誰でも同じ設定を使用することになる。

.resharperファイルに保存されるものには面白いものが2つある: コードフォーマット設定とテンプレートだ。

コードフォーマット設定の共有

ReSharperのオプション画面。コードスタイル設定をバージョン管理システムに保存する際の設定。

上の(ReSharper > Options > Code Styleとたどった)スクリーンショットの通り、ReSharperには、コードフォーマット設定の共有に関して3つの異なる選択肢がある。

  • すべてが現在のユーザー専用。これがデフォルトだ。マシンは1台、開発者は1人ってだけならこれで問題ない。
  • 現在のソリューションをチームで共有。開発者が複数で、Visual Studioのソリューションは1つだけなら、この設定がいい。全員が同じコードフォーマット設定を使う。
  • 現在のソリューションを外部ファイルで設定。これを使うにはもう少しやることがあるけど、(僕たちみたいに)同じソースツリー内に複数のソリューションがあるなら、これを使おう。

最後の設定を使うには、Exportボタンを使って、設定をどこかの.xmlファイルに保存しておかないといけない。それからそのファイルのパスを指定する。同じソースツリーに含まれている複数のソリューションで設定を共有しているのであれば、相対パスを指定したいところだ。

テンプレートの共有

以前は、ソリューションに新しいクラスを追加したときは、そのコードをきれいにするのに数秒はかかっていた――クラスの可視性を修正したり、不要なusing文を削除したり。新しいインタフェースが欲しいときは、「新しいクラスの追加」をやってから「class」キーワードを「interface」に置換していた。たいした手間ではないけど、その手のことは自動化できたっていいじゃないか。コンピュータだもの。

ReSharperでは数種類のコードテンプレートを定義できる。「ライブテンプレート」(Tabキーで移動して値を入力するようなフィールドをもつもの)、「囲む」、そして「ファイルテンプレート」だ。どれも設定を変更でき、変更した設定は全部.resharperファイルに保存される。というわけでもう一度言うけど、開発チームの全員で自動的に共有される。

ReSharperにはサンプルのテンプレートがいくつか含まれているから、中を見て、どういう動きをするのかを知ることができる。ただイラつくのは、そのサンプルだと各ファイルの先頭にコメントブロックがあって「作者」だとか「日時」だといった欄があるんだ――何が楽しくてこんな情報を複製するんだって話だ。ソースコードリポジトリを見れば、誰がファイルを追加したのか一目瞭然だってのに。(たぶんイラつくようにわざと作ってあるんだ。そしたら間違いなく自分用のテンプレートを作る気になるだろうから。僕たちはそうだった。)

独自のテンプレートは簡単に作れるけど、若干ひねくれている。ここが大事なんだけど、「Available everywhere」っていうハイパーリンクはクリックした上で、「いや、C#だけで使う」って指示しないといけない。(そうしないと、ファイル名の拡張子を追加してくれないんで、ファイルが正しくフォーマットされなくなる。) しかも、$NAMESPACE$ みたいな特別なプレースホルダを使いたいなら、名前だけでは認識してくれないので要注意だ。「テンプレート変数」のグリッドの中で「マクロを選ぶ」をクリックして、一覧の中からマクロを選ぶ必要がある。

「テンプレートを編集」ダイアログ内の「Available Everywhere」ハイパーリンク

「テンプレートを編集」ダイアログ内の「テンプレート変数」グリッド

テンプレート内で使えるマクロの一覧


31日間ReSharper一周 インデックスへ戻る