Delphi IDE の便利な機能 - 名前のリファクタリング

アプリケーションを作るとき、コンポーネントなどの名前が、デフォルトの Form1 とか Button1 のままだと、コードの可読性がいまいち
たとえば pushButton とか、意味をもたせたいですよね

でも、ある程度作ってからだと、修正がめんどくさいなぁ... と思った貴方
痒いところに手が届く仕組みが IDE には用意されています

## その１ オブジェクトインスペクタを使う
設計画面のオブジェクトインスペクタで、対象のコンポーネントを選択して、name プロパティの値を変更します
この操作で何が変わるかというと

- 宣言されている名称が変わる
- イベントの名称が変わる

しかし、**自身で記述したコードの箇所は変わってくれない**
なので、このやり方の使いどころは、画面設計を行っているとき、詳細なコードを書き始める前ですね

簡単な例で確認してみます (FireMonkey で作っていますが VCL でも同様です)
単純にフォームにボタンを１つ貼り、ボタンの Click イベントにクリックされたら、ボタン上に表示されている文字が変わるというコードを書いたプロジェクトがあります
設計画面のオブジェクトインスペクタ上で Button1 の Name プロパティの値を Button1 から pushButton に書き換えます

### Before 

![before.png](https://qiita-image-store.s3.amazonaws.com/0/164551/59a401ad-3bbb-47f0-8520-a18eb38da42f.png)

### After 

![after.png](https://qiita-image-store.s3.amazonaws.com/0/164551/17d691ed-c921-8436-73b6-75cdd9be3f90.png)

コード側はどうなるかを見てみましょう

### Before

```pascal
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Text := '押したよ';
end;

end.
```

### After

```pascal
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    pushButton: TButton;                         // <<<---- 修正される
    procedure pushButtonClick(Sender: TObject);  // <<<---- 修正される
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.pushButtonClick(Sender: TObject); // <<<---- 修正される
begin
  Button1.Text := '押したよ';  // <<<---- ここは変わらない
end;

end.
```

## その２ リファクタリング機能を使う

IDE にはリファクタリングという「コードによる目的の動作を変えずに、コードを再構成し、変更するために使用する技術」が備わっています
ここでは[「名前のリファクタリング」](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B)の手順を紹介します

### 名前のリファクタリングの手順です
コード上で対象となる名前を選択して、マウスを右クリックし、「リファクタリング| xx の名前変更」を選びます
![ref1.png](https://qiita-image-store.s3.amazonaws.com/0/164551/55d80e4f-2d63-ae90-2251-425bfe9519b7.png)

ダイアログが現れますので、新しい名前を設定して [OK] ボタンをクリックします
![ref2.png](https://qiita-image-store.s3.amazonaws.com/0/164551/3486ae83-e74c-a9d8-f57a-60977b97eb88.png)

左上のルービックキューブのようなアイコンをクリックすると名称の変換が行われます
![ref3.png](https://qiita-image-store.s3.amazonaws.com/0/164551/30f8a5c6-6c84-04aa-0411-b3739b47f2a4.png)

変換後のコードを見てみましょう (設計画面側は、その１と同じなので省略)
### After

```pascal
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    pushButton: TButton;                         // <<<---- 修正される
    procedure pushButtonClick(Sender: TObject);  // <<<---- 修正される
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.pushButtonClick(Sender: TObject);  // <<<---- 修正される
begin
  pushButton.Text := '押したよ';                     // <<<---- 修正される
end;

end.
```

## おわりに
名前のリファクタリング機能ですが、若干制限がありますので注意ください
[Delphi の場合は、ジェネリックスの型パラメータの名前は変更できないという制限](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AB%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B#.E5.88.B6.E9.99.90.EF.BC.88Delphi.EF.BC.89)があります