分123はじめにコード補完に並ぶIDEならではの機能,リファクタリングについてです。Renamer)から発展してきたIDEのため,リファクタリング機能に関しては定評があります。FooCafeこちらの予想のナナメ上をいく精度でリファクタリングを行うため,人によっては「神ががっている」と思う人もいれば,行きすぎとも思える精度のため「何これ?わけわからん」と思う人と受け取りかたもさまざまです。要するにクセがあるわけですが,せっかくの高性能リファクタリングを眠らせておくのももったいないので,今回の解説がみなさんの理解の助けになれば幸いです。Studioにとって「Projectツールウィンドウ」で行うファイル操作のほぼすべてがリファクタリングになります(例外は「新規作成」くらいです⁠)⁠。ファイル操作の対象がJavaのソースコードである無しに関わりなく,リファクタリングとして機能します。ファイルの移動やコピーは,カット("Cut"⁠)⁠/コピー("Copy"⁠)⁠/ペースト("Paste")やマウス操作で代用できるのであまり意識することが無いのですが,メニュー操作する場合は「Refactor」メニューから該当のコマンドを実行することになります。別にリファクタリングしなくてもいい場合Javaのソースコードに限らず,どんなファイルでもリファクタリング対象にするのは便利な反面,ありがた迷惑な時もあります。Studio上で操作を行わず,素直にOS付属のファイラ(ExplorerやFinder)で作業したほうが早くて簡単です。いうコマンドがあります(詳細は第8回を参照⁠)⁠。「Terminalツールウィンドウ」で操作してしまうのも一興です。Studioに反映されます。"Synchronize"」を実行してください。Javaのリファクタリングは主にエディタ上で行います。対象箇所にカーソルをあてて,メニューバーの「Refactor」からお望みのリファクタリングコマンドを実行します。実行できるリファクタリングコマンドはコンテキスト依存で絞られるますが,それでもコマンドは数多くあります。~")あたりはショートカットキーを覚えてしまいましょう。リファクタリングの実演では実際にリファクタリングを行ってみます。使うであろうリネーム("Rename...")を例に進めます。その前に大事な事をひとつ。StudioにはEclipseのクイックフィックス(Ctrl+1)やクイックアシスト(Ctrl+2)のような万能コマンドはありません。やりたいこと(コマンド)をハッキリ指示しないと何もしてくれません。一応,インテンション(Alt+Enter)に,いくつかリファクタリングを促す候補がでますがちょっとしたヒントでしかなく,やりたい事は利用者が明示的に指示する必要があります。Studioの特徴のひとつなので慣れるしかありません。本題に戻りリネームを実演してみます。場合,その場でリネームする候補が展開されます。"Rename..."の実行例リネームの対象になり得るのはたくさんあります。挙げただけでも,以下の通りです。変数名(ローカル変数,インスタンス変数,クラス変数)引数名クラス名,インターフェイス名パッケージ名リネームを指示する場所と対処によっては,図3のように「継承元をリネームするのか」それとも「その場のものをリネームするのか」と問い合わせてきます。意外かも知れませんが,リファクタリングはJavaのソースコードだけではなく,リソースファイル(XMLファイル)に対しても有効です。次の対象もリネームできます。<ref_name>をリネームすると,それを宣言しているstring.xmlの該当箇所もリネームする事を指します。こちらの予想に反していろんなところでリネームに反応します。「⁠これリネームできたらいいな」と思ったらダメ元でも良いので"Rename..."を実行してみましょう,新しい発見があるかも知れませんよ(反応しなかったときの落胆もかなりのものですが......⁠)⁠。リネームの候補がその場に出てくることを「In-placeモード」と呼びます。mode」でON/OFF可能で,OFFにすると常に「Rename」ダイアログが表示されるようになります。昔話になりますが,元々はダイアログによる指示のみだったのですが,Eclipseのリファクタリングを真似てIn-placeモード取り込みました。その名残として,このオプションが残っています。完了」が正しいのです。リネームも対象によってはIn-placeモードで即実行されず,常にダイアログが出てくるケースがあります。Java著者プロフィール今井勝信(いまいまさのぶ)システムエンジニア。