Chapter 06

リファクタリング

ikuma-t
ikuma-t
2021.08.22に更新

リファクタリング:Refactor this( + T

RubyMineを含むInteliJ系のIDEでは、リファクタリングを効率的に実現するための機能が複数搭載されています。 本Chapterではその中でも使用頻度の高いものを紹介します。

なお、リファクタリングのポップアップメニューの起動方法は( + T)です。

メソッド名・変数名の変更:Rename(Shift + F6

名称を変更したいメソッド名・変数名にカーソルを合わせ、(Shift + F6)を入力することで、メソッド名の変更ができます。

メソッド名を入力して「REFACTOR」を選択すると、変更対象のメソッドの使用箇所が一覧で表示されます。
対象を確認した後に、「DO REFACTOR」を選択することで実際にメソッド名がfugaからhogeへ変更されています。

メソッドの抽出:Extract Method( + + M

メソッドの抽出では、選択した箇所を指定した名称のメソッドに変更することができます。
愚直に書いて膨れ上がったメソッドのうち、そのメソッドの目的を達成するための前処理等がある場合に、この機能を使って処理を切り出します。
(リーダブルコードでいう「無関係の下位問題を抽出する」ですね)

置き換えたいメソッドにカーソルを合わせ、( + + M)を入力することで、メソッド名を入力するモーダルが開きます。
メソッド名を入力し、「OK」を選択することで、指定した箇所が自動でメソッドに切り替わります。

またメソッド化した処理と同じ処理が別箇所で定義されていた場合、メソッド化後にそれらもメソッドを使った記載に置き換えるか確認されます。
ALL(一括置換)もしくはREPLACE(一件ずつ置換)を利用することで、すべての登場箇所をメソッド化することができます。

変数の抽出:Introduce Variable( + + V

直接定義されている値を、変数として切り出すことができる機能です。
対象を選択し( + + V)を入力することで、指定した箇所が変数に置き換わります。
この状態で値を入力することで、変数名を変更することができます。

愚直にコーディングした後に、説明変数や要約変数をこの機能で切り出すと、コード全体の見通しがよくなります。

定数の抽出:Introduce Constant( + + C

直接定義されている値を、定数として切り出すことができる機能です。
対象を選択し( + + C)を入力することで、指定した箇所が定数に置き換わります。
この状態で値を入力することで、定数名を変更することができます。

マジックナンバーが発生している箇所で使用すると効果的です。

インライン化:Inline( + + N

メソッド、変数として定義されているものを、直接記述に置き換えることができる機能です 。
メソッドの抽出、変数の抽出の反対機能と言っていいでしょう。

インライン化したい箇所にカーソルを合わせて( + + N)を入力することで、メソッドや変数を呼び出し元に戻すことができます。
複数箇所ある場合は、一括で変更するかどうかが確認されます。

リファクタリング過程で、メソッドに抽出してみたけど、抽出後のメソッドを変更したら規模が小さくなったので元に戻したい、なんていう場合に使えますね。