【実務・中級編】PhpStormの『Multi-Cursor』と『Selection』を使いこなす:複雑な置換作業を瞬殺するテクニック – 総合開発環境(IDE)生産性向上バイブル

こんにちは、テックリードの私だ。

日々の開発で、レガシーなPHPコードベースや、肥大化したEloquentモデル、あるいは巨大なDTO(Data Transfer Object)の配列を前にして絶望したことはないだろうか?

「すべてのプロパティに `public readonly` を付けたい」
「配列のキー名をキャメルケースからスネークケースへ一括変換したい」
「ログ出力のフォーマットを、プレースホルダー形式から構造化ログに書き換えたい」

こうした要求に直面したとき、多くのエンジニアは脊髄反射のように `Ctrl + R` (macOSなら `Cmd + R`) を押し、複雑怪奇な正規表現の構築に頭を悩ませる。後方参照( `$1`, `$2` )のグループインデックスを間違えて全ファイルを吹っ飛ばし、Gitの差分を見て冷や汗をかいた経験もあるはずだ。

断言しよう。直感的な操作で完結する作業に、脆弱な正規表現を持ち出すのは今日で終わりにしなさい。

JetBrains製IDEの最高傑作であるPhpStormには、正規表現の闇に迷い込むことなく、脳内のイメージをダイレクトにコードへ反映させるための「Multi-Cursor(マルチカーソル)」と「Selection(スマート選択)」という至高の武器が備わっている。

今回は、チーム全体の生産性を10倍に跳ね上げる、実務で即座に使えるキル&ハックな操作術を叩き込む。

—

1. 脳内イメージをそのまま具現化する「Multi-Cursor」の核心思想

マルチカーソルは、単なる「カーソルを複数置く機能」ではない。「同一の構造を持つ複数のコードブロックに対して、並列で思考を同期させるアプローチ」だ。

エディタ内部では、各カーソルが独立した編集コンテキストを持ちつつ、入力されたキーストロークをリアルタイムにブロードキャストしている。この挙動を体得すると、テキスト置換という概念そのものが過去のものになる。

実務で震える:大量のプロパティへのアクセス修飾子・型・readonlyの一括付与

例えば、外部APIから受け取った生データを処理する、以下のような貧弱なDTOクラスがあったとする。

// リファクタリング前の絶望的なレガシープロパティ群
class UserResponseDto
{
$id;
$name;
$email;
$created_at;
}

これを、PHP 8.2以降のモダンで堅牢なコードに一瞬で生まれ変わらせる。正規表現は一切使わない。以下のステップを脳に焼き付けてほしい。

1. カラム選択の起点を作る
最初の `$id` の行頭にカーソルを合わせる。
2. 縦方向へのカーソル拡張(Column Selection)

  • macOS: `Option + Shift + 矢印キー(下)` または `Ctrl + Shift + 8`(カラム選択モード)
  • Windows/Linux: `Alt + Shift + 矢印キー(下)` または `Ctrl + Shift + 8`

これで、すべての行の先頭を貫く一本の「光の柱(マルチカーソル)」が生成される。
3. 一括インジェクション
そのままキーボードを叩く。

public readonly ?int $

と入力すれば、全行の先頭に一斉に文字列が流し込まれる。

これだけで、以下の状態が0.5秒で完成する。

class UserResponseDto
{
public readonly ?int $id;
public readonly ?int $name; // 型は後で直すとして
public readonly ?int $email;
public readonly ?int $created_at;
}

次の一手:個別の修正は「Skip & Add」で完璧に制御する

すべての行が完全に同じフォーマットではない場合、マルチカーソルは暴走する。ここで真価を発揮するのが、カーソルの取捨選択ショートカットだ。

  • 次の一致箇所にカーソルを追加: `Ctrl + G` (macOS) / `Alt + J` (Win/Linux)
  • 現在の一致をスキップして次へ: `Ctrl + Shift + G` (macOS) / `Alt + Shift + J` (Win/Linux)
  • 不要なカーソルを削除: `Escape`

例えば、特定のプロパティだけ型を `string` に変えたい場合、`Ctrl + G` で狙った行だけにカーソルをヒットさせ、ピンポイントでタイポを修正できる。この「コントロールを手放さない感覚」こそが、フロー状態(ゾーン)を維持する秘訣だ。

—

2. 構造を理解するコード選択「Selection」の極意

マルチカーソルと双璧をなすのが、構文木(AST: Abstract Syntax Tree)を理解した上で範囲を広げる 「Extend Selection(スマート選択)」 だ。

一般のテキストエディタの「行選択」や「単語選択」は、文字単位でしか動かない。しかし、PhpStormはPHPの文法(構文)をパースしながら選択範囲を拡大・縮小する。

  • 選択範囲の拡大: `Option + Up` (macOS) / `Ctrl + W` (Win/Linux)
  • 選択範囲の縮小: `Option + Down` (macOS) / `Ctrl + Shift + W` (Win/Linux)

実戦例:ネストされた配列構造の瞬殺リファクタリング

以下の複雑な連想配列や設定の塊を、別の形式に書き換えるシチュエーションを想像してほしい。

return [
‘connection’ => [
‘host’ => env(‘DB_HOST’, ‘127.0.0.1’),
‘port’ => env(‘DB_PORT’, 3306),
],
];

ここで `env(…)` のブロックだけを選択したい時、マウスでドラッグする必要は一切ない。
1. `env` の文字のどこかにカーソルを置く。
2. `Ctrl + W` (Win) / `Option + Up` (Mac) を1回押す → `env` という単語が選択される。
3. もう一度押す → `env(‘DB_HOST’, ‘127.0.0.1’)` という関数呼び出し全体が選択される。
4. もう一度押す → 引数の中身、あるいは配列の要素全体へと、構文の階層(スコープ)に従って選択範囲が美しく広がっていく。

この「構文に沿った選択」をマルチカーソルと組み合わせることで、例えば「複数の連想配列のバリュー部分だけを同時に選択して一括書き換え」といった神業が可能になる。

—

3. 生産性を限界突破させる「神プラグイン」の導入

PhpStormの標準機能だけでも十分に強力だが、キーボード駆動開発(Key-Driven Development)を極限まで高めるためには、エコシステムの拡張が不可欠だ。チーム全体で強制導入すべきプラグインを厳選して紹介する。

1. Key Promoter X

  • 役割: 操作のトレーニングと無駄なマウス操作の視覚的排除
  • 解説: マウスでメニューをクリックしたりアイコンを押したりすると、「今の操作、実はこのショートカットキーで1秒でできたよ!」と右下で優しく(時に厳しく)教えてくれる。チームメンバーの「マウス依存症」を治療する特効薬。

2. Rainbow Brackets

  • 役割: 複雑なネストの視認性爆上げ
  • 解説: 巨大なBladeテンプレートや、Laravelのクエリビルダー、複雑なクロージャが入り組んだコードで、対応するカッコの色を自動でカラフルに色分けしてくれる。マルチカーソルで編集する際、「今どのスコープを触っているのか」を脳の負荷ゼロで把握できる。

—

4. チーム全体の生産性を底上げする「設定共有化ルール」

個人のスキルだけに依存する開発体制は、組織として脆弱だ。マルチカーソルやショートカットの恩恵をチーム全員が等しく受けるために、IDEの設定をバージョン管理下に置き、強制的に同期させる仕組みを作る。

PhpStormは、設定を `.idea` ディレクトリ配下のXMLファイルとして出力できる。特にエディタの挙動やキーマップ、ライブテンプレートはチームで共有すべきだ。

共有すべき設定ファイル構成案 (`.idea/` 配下)

プロジェクトルートの `.idea/` ディレクトリのうち、以下の設定ファイル群を Git (`versionControl`) に含めることで、チーム全員の環境をコードベースで統制できる。





/
[.idea/editor.xml]
マルチカーソルやスマート選択に関わるエディタの挙動設定。
チームメンバー間でカーソルの挙動に差異が出ないようにするためのマスター設定。
/
{
“component”: {
“name”: “EditorSettings”,
“option”: [
{
“name”: “IS_VIRTUAL_SPACE”,
“value”: “true” / 行末を超えた自由な位置へのカーソル配置を許可(マルチカーソルの精度が劇的に向上) /
},
{
“name”: “CVS_SHOULD_COMMIT_WHOLE_FILE”,
“value”: “false”
}
]
}
}

さらに、チーム共通の「神ショートカット」や、よく使う定型句を瞬時に呼び出すためのLive Templates(ライブテンプレート)を `.idea/codestyles/` や `templates/` に配置し、プロジェクトの初期セットアップ手順(README)に組み込んでおくこと。これができるチームと、毎回手動で設定しているチームとでは、半年後にコードベースの美しさと開発速度に取り返しのつかない差が生まれる。

—

結び:ツールに奉仕するな、ツールを支配しろ

今回紹介した「Multi-Cursor」と「Selection」は、単なる便利機能の寄せ集めではない。「あなたの思考スピードを、指先の動きが一切邪魔しない状態」を作り出すための神経接続インターフェースだ。

マウスに手を伸ばし、ドラッグして選択し、右クリックからメニューを開いて……そんな「前時代の恐竜のような開発スタイル」とは今日で決別しなさい。

キーボードから指を離さず、コードの構造を掌の上で転がすように自在に操る。その境地に達したとき、プログラミングは苦痛な作業から、純粋な「知的創造の歓び」へと変貌する。

さあ、今すぐ手元のPhpStormを開き、`Option + Up` と `Column Selection` を試してみたまえ。世界の見え方が変わるはずだ。

タイトルとURLをコピーしました