こんにちは、テックリードの私だ。
日々の開発で、レガシーな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` を試してみたまえ。世界の見え方が変わるはずだ。