特集

Visual Studio 2005
「リファクタリング支援機能」徹底レビュー

株式会社ピーデー 川俣 晶
2006/02/08


リファクタリングとは何か?

 Visual Studio 2005(以下、VS 2005)には、待望の「リファクタリング支援機能」が搭載されている。リファクタリングとは、ソフトウェアの生産性を改善する優れた手法の1つである。それを支援する機能が開発環境に標準で搭載されたことは、非常に好ましい進歩といえるだろう。そして、それを正しく用いることで、より短い時間で、より優れたソフトウェアを生み出せるようになったといっても過言ではないだろう。

 では、リファクタリングとはいったい何だろうか?

 リファクタリングとは、一部のオブジェクト指向開発者が行っていたテクニックを、マーチン・ファウラー氏が『リファクタリング:プログラミングの体質改善テクニック』(ピアソン・エデュケーション刊)という書籍にまとめたものである。

 この書籍はJava言語によってサンプル・コードが示されているが、リファクタリングは特定のプログラム言語に依存したテクニックではない。事実として、この書籍の冒頭では、リファクタリングがSmalltalkプログラマーの間で生まれたという歴史的経緯が示されている。つまり、本質的な意味でのリファクタリングは、どのようなプログラム言語にも適用し得る可能性があり、特に上記書籍で示されたリファクタリングの手順は、たいていのオブジェクト指向プログラム言語に対して適用可能と思ってよいだろう。つまり、C#/C++/Visual Basicなどに適用することができる。

 では、より具体的にリファクタリングとは何をするものだろうか。上記書籍に掲載されたリファクタリングという言葉の定義を以下に引用しよう。

−リファクタリング−

 外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変化させること。

 つまり、リファクタリングとはソース・コードを書き換える手順を意味するが、それによってソフトウェアの機能は増えない。しかし、機能を増やさないソース・コードの書き換えにどのような効能があるのだろうか?

 上記書籍では以下のような効能を説いている。

リファクタリングはソフトウェアの設計を向上させる

 設計してからソース・コードを書くものと考えていると理解できない可能性があるが、設計とはソース・コードの抽象的な構造であると考えれば、その構造の改善が設計の改善ということになる。事前に完ぺきな設計さえできていればそのような作業は不要と考えているのであれば、それはあり得ない非現実的な思い込みにすぎないので、もっと現実を直視した方がよいだろう。

 ちなみに、事前の完ぺきな設計が可能であるという前提に立った開発方法論などは世の中に山ほどあるが、それらとリファクタリングは本来相いれない。それにもかかわらず、双方が同時に成立するという主張が聞かれることもあるが、それらはまゆに唾を付けつつ聞いた方がよいだろう。

リファクタリングはソフトウェアを理解しやすくする

 リファクタリングは、ソース・コード上の分かりにくい部分を、より分かりやすく修正する。極端なことをいえば、何が書かれているのかさっぱり理解できないソース・コードを、読めば理解できるソース・コードに変化させることができるということである。ソース・コードが分かりやすくなれば、ソース・コードを扱うあらゆる作業によい結果をもたらすことになる。

リファクタリングはバグを見つけ出す

 ソース・コードが理解しやすくなれば、それだけバグの発見も容易になる。なかなか見つからないバグは、往々にして分かりにくいソース・コードによって隠されていることがある。このようなケースでは、リファクタリングにはバグを白日の下に引き出す効能があるといえる。

 また、リファクタリングという作業そのものの過程で、バグの存在に気付くこともある。

リファクタリングでより早くプログラミングできる

 例えば、1つの作業が一段落するごとにリファクタリングを行う場合と、リファクタリングを一切行わない場合では、どちらがより早くプログラムを完成させられるだろうか? リファクタリングは何の機能も増やさないという事実から、後者の方が早いという印象を持つ方も多いと思う。しかし、実は多くの場合、前者の方が素早くプログラムを完成させられるのである。理解しやすいソース・コードはソース・コードに関するあらゆる作業の効率をアップさせるが、それによる時間の節約は、リファクタリングを行うために費やされる時間よりもはるかに多いケースが珍しくないのである。

 以上のようにリファクタリングには大きな効能がある。それを支援するための機能を持つという理由でEclipseには高い価値があるとする意見が聞かれることもあったし、Visual Studio用のリファクタリング支援プラグインもサードパーティより提供されてきた。しかし、VS 2005になって、ついにリファクタリング支援機能は標準で組み込まれたのである。

 そして、標準で提供された以上は、これを使わないのはあまりにもったいない話である。使い方は難しくなく、それでいて強力な機能なので、ぜひこれを活用してみよう。本稿では、VS 2005が持つリファクタリング機能を具体的に紹介していく。

【ご注意!】非常に重要な注意をこの記事の最後に書き記している。途中で読むのを打ち切る場合には、最後の部分だけは必ず目を通していただきたい。よろしくお願いしたい。

リファクタリング支援機能カタログ

 VS 2005のリファクタリング支援機能は、C#に対して機能する。残念ながらVisual Basicなどのほかの言語では機能しない(次項で解説している「名前の変更」だけはVisual Basicでも可能)。本稿ではVS 2005 Professional Edition上でC#を用いて解説を行っている。

 リファクタリング支援機能は、コード画面を右クリックすると表示されるコンテキスト・メニューに含まれる[リファクタ]を選ぶと利用可能な機能が一覧表示される。


リファクタリングを実行するためのメニュー
リファクタリング支援機能は、コード画面においてコンテキスト・メニューの[リファクタ]メニューから発動させることができる。

 リファクタリング支援機能は、Visual Studioから見ると一種のコード・スニペットとして扱われており、項目の管理は[ツール]メニューの[コード スニペット マネージャ]から行える。


コード・スニペット・マネージャ
リファクタリング支援機能の項目はコード・スニペット・マネージャで管理されており、項目の追加、削除などはここから行うことができる

 では、[リファクタ]メニューに表示される7つの機能を1つずつ見ていこう。

 

 INDEX
  [特集] VS 2005「リファクタリング支援機能」徹底レビュー
  1. リファクタリングとは何か?
    2. 名前の変更
    3. メソッドの抽出/フィールドのカプセル化
    4. インターフェイスの抽出/ローカル変数をパラメータへ昇格/パラメータの削除とパラメータ順序の再変更
    5. 実は不完全なVS 2005のリファクタリング機能
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間