IntelliJ IDEAを何にどのように使っているか書いてみる

## はじめに

私は、2021年11月にオープンロジに入社し、IntelliJ IDEAに出会いました（前職では、Eclipseを使ってJavaを書いていました）。そして、以下の弊社社員の記事を読んだりしながら、自分なりに使い方を模索したりカスタマイズしたりしました（PhpStromはIntelliJ IDEAと同じくJetBrains社製のIDEです）。

https://qiita.com/macaron/items/a3d788dc07374fd8261e

https://qiita.com/akido_/items/1eaf4f1dc3835dbcce96

EclipseはIDEとしてかなり便利な印象だったので、ちょっと不安もあったのですが、普通にIntelliJ IDEA最高でした。今は、「めっちゃ快適だ〜」と幸せな気分に浸りながら日々を過ごしています。この快適さをシェアすべく、私がIntelliJ IDEAを何にどのように使っているか簡単にまとめてみようと思います。

## 前提

* OS
    * macOS
* キーボード
    * [REALFORCE 91UBK-S](https://www.realforce.co.jp/products/91UBK-S_NG01B0/)
* キーマッピング
    * left ctrl -> command(⌘)
    * windows -> option(⌥)
    * alt -> ctrl(⌃)
    * right ctrl -> ctrl(⌃)
    * shift -> shift(⇧)

## 何に使っているのか

私は以下の作業を行う際にIntelliJ IDEAを使っています。

1. コーディング
1. コードリーディング
1. テスト・デバッグ
1. ターミナルでの作業
1. Git操作
1. コードレビュー
1. データベース操作

インストールした時はこんなに色々なことに使うとは思っていませんでした。

## どのように使っているのか

上述した作業別に、それぞれ使っている機能を羅列してみます。「機能」の名称は、Keymapの設定に書かれている名称に合わせてありますので、Keymapの設定で検索するとヒットします（いくつかヒットする場合がありますが、その場合はノリで判断してください）。

Keymapは `Eclipse (macOS)` をベースにしています。windowsの方は `cmd -> ctrl` , `ctrl -> alt` , `option -> windows` に置き換えて読めば大体合ってます（一部例外はあります）。

### 0. IntelliJ IDEA自体の設定や操作

大体下記の `Find Action...` から適当に入力して飛ぶことが多いです。ショートカットキーなら「keymap」、プラグインなら「plugins」と入力して飛んでます。設定が見つからない時は `Preferences...` にアクセスして検索したりポチポチ探したりしています。あとはまあ...ググります。

| 機能 | 意味 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Find Action... | コマンドパレット的なやつ | cmd + shift + P | Atom / VSCodeに合わせた | - |
| Preferences... | 設定を開く | cmd + , | Eclipse (macOS)のデフォルト | - |

### 1. コーディング

私ががやりたいことはちゃんと全部できる印象です。個人的にはマルチカーソルが使えるのが嬉しかったです。Eclipseでは使えなかったので、そのためにVSCodeを併用したりしていました。

ちなみに、下表にはうまく表現できず書きませんでしたが、 `ctrl + F` などで開く検索バーにキーワードを入力した状態で `option (alt) + enter` を押すとキーワードの全出現箇所にマルチカーソルを置けてめちゃくちゃ便利です。初めて知った時は感動しました。お試しあれ。

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Delete Line | 選択行を削除 | cmd + shift + K | Atomに合わせた | - |
| Duplicate Entire Lines | 選択行を真下に複製| cmd + shift + D | Atomに合わせた | - |
| Move Statement Up | 選択行を上に移動 | option + ↑ | Eclipse (macOS)のデフォルト | - |
| Move Statement Down | 選択行を下に移動 | option + ↓ | Eclipse (macOS)のデフォルト | - |
| Clone Caret Above | マルチカーソルを上に追加 | cmd + option + ↑ | 選択行の移動と併せて覚えやすい | - |
| Clone Caret Below | マルチカーソルを下に追加 | cmd + option + ↓ | 選択行の移動と併せて覚えやすい | - |
| Add Selection for Next Occurrence | 単語の選択（マルチカーソル追加） | cmd + D | Atomに合わせた | - |
| Replace... | 置換 | cmd + F | 置換で検索もできちゃうので置き換えた | - |
| Paste from History... | クリップボード履歴から貼り付け | cmd + shift + v | Eclipse (macOS)のデフォルト | - |
| Comment with Line Comment | コメントアウト / アンコメント | cmd + / | Eclipse (macOS)のデフォルト | - |
| Basic | コード補完 | option + space | cmd + spaceはSpotlight検索と被った | - |
| Generate... | コンストラクタやメソッドの作成 | cmd + 1 | Eclipseに合わせた | - |
| Refactor This... | リファクタリング | ctrl + shift + R | Eclipseに合わせた | - |
| PHPDoc Blocks… | PHPDocを生成 | ctrl + shift + J | Eclipseに合わせた | [PHP](https://plugins.jetbrains.com/plugin/6610-php) |

### 2. コードリーディング

こちらも基本的にやりたいことは全部できています。`どこでも検索` で事足りてしまうので、クラス検索やファイル検索を使わなくなりました。

個人的なおすすめは、 `ctrl + page up / page down` によるタブ切り替えです。私と同じようなキーボード配列の方なら片手でできて押しやすいと思います。

`Open on GitHub` と `Find Pull Request` は便利すぎて感動しました。slackでのコミュニケーションや内部仕様のドキュメンテーションで便利です。修正の経緯も追えるので助かってます。 `Path From Repository Root` もそういったコミュニケーションやドキュメンテーションでよく使いますね！

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| [どこでも検索](https://pleiades.io/help/idea/searching-everywhere.html) | ファイルやクラス、アクション等を検索 | shiftを2回押す | Eclipse (macOS)のデフォルト | - |
| Find in Files... | 全ファイル内検索（grep的なやつ） | cmd + shift + F | Atom / VSCodeに合わせた | - |
| Select Next Tab | 次のタブへ移動 | ctrl + page down | Chromeに合わせた | - |
| Select Previous Tab | 前のタブへ移動 | ctrl + page up | Chromeに合わせた | - |
| Close | タブを閉じる | cmd + W | Eclipse (macOS)のデフォルト | - |
| Close All Tabs | 全てのタブを閉じる | cmd + shift + W | Eclipse (macOS)のデフォルト | - |
| Go to Declaration or Usages | 利用箇所の場合は宣言に飛ぶ<br/>宣言の場合は利用箇所一覧を表示する | F3 | Eclipse (macOS)のデフォルト | - |
| Go to implementation(s) | （interfaceとかの）実装に飛ぶ | cmd + T | Eclipseに合わせた | - |
| Back | （F3とかで飛んできた元に）戻る | cmd + [ | Eclipse (macOS)のデフォルト | - |
| File Structure | ファイル内の構成要素（メソッドやフィールド）を表示 | cmd + O | Eclipse (macOS)のデフォルト | - |
| Path From Repository Root | ファイルへの相対パスをコピー | cmd + shift + C | コピーと併せて覚えやすい | - |
| Open on GitHub | 選択行をGitHubで開く（ブラウザが起動する） | cmd + F3 | 宣言に飛ぶと併せて覚えやすい | - |
| Find Pull Request | 選択行に修正を加えたPull Requestを開く（ブラウザが起動する） | cmd + shift + F3 | 宣言に飛ぶと併せて覚えやすい | [Find Pull Request](https://plugins.jetbrains.com/plugin/8262-find-pull-request) |

### 3. テスト・デバッグ

Eclipseでやってたことをそのままやっている感じです。快適です。

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Go to Test | 単体テストに飛ぶ（ない場合は作成） | option + 9 | cmd + 9にしたかったが、Gitウインドウを開くと被った | - |
| Run context configuration | メソッドやクラスを実行 | F11 | Eclipseに合わせた | - |
| Debug context configuration | メソッドやクラスをデバッグ | cmd + F11 | Eclipseに合わせた | - |
| Toggle Line Breakpoint | 選択行にブレークポイントを貼る | cmd + shift + B | Eclipse (macOS)のデフォルト | - |
| Step Over | ステップオーバー | F6 | Eclipse (macOS)のデフォルト | - |
| Step Into | ステップイン | F5 | Eclipse (macOS)のデフォルト | - |
| Step Out | ステップアウト | F7 | Eclipse (macOS)のデフォルト | - |
| Resume Program | 再開（次のブレークポイントまで飛ぶ） | F8 | Eclipse (macOS)のデフォルト | - |

### 4. ターミナルでの作業

F12でターミナルを閉じたり開いたりできるようにしています。ちょっとした作業がしたい時にサクッと開いて、邪魔になったらサクッと閉じられるので便利です。

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Terminal | ターミナルを開く / 閉じる | F12 | 開発者ツールを開くノリで開けるから | - |

### 5. Git操作

Git操作自体はほぼターミナルでやっちゃっています。ただ、IntelliJ IDEAのGitウィンドウはdiffを見る時にめちゃくちゃ重宝しています。ローカルでの修正が完了したら、 `Show Diff` で一通りの差分を確認してからpushするようにしています。

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Terminal | ターミナルを開く / 閉じる | F12 | 開発者ツールを開くノリで開けるから | - |
| Git | Gitウィンドウを開く / 閉じる | cmd + 9 | Eclipse (macOS)のデフォルト | - |
| Show Diff | ブランチやコミットのdiffを表示する | cmd + D | Eclipse (macOS)のデフォルト | - |

### 6. コードレビュー

まだレビューする側というよりされる側ではあるのですが、レビューへの返信をIntelliJ IDEA上からやったりしています。Github上よりコードが追いやすいですし、レビューする側になった時は、より便利に使うことになりそうだなあ...と思ってます。

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Pull Requests（サイドバー） | Pull Requests（サイドバー） | cmd + shift + 9 | Gitウィンドウを開くと併せて覚えやすい | - |
| Projects（サイドバー） | Projects（サイドバー） | cmd + shift + 0 | 主にPull Requestsをプロジェクト表示に戻す時に使うので隣のキーにした | - |

### 7. データベース操作

なんとデータベースも操作できちゃうんですよね。ちなみに、JetBrainsは [DataGrip](https://www.jetbrains.com/ja-jp/datagrip/) というデータベース管理の製品も出しています。

| 機能 | 説明 | ショートカットキー | 理由 | プラグイン |
|---|---|---|---|---|
| Database | Databaseウィンドウを開く / 閉じる | cmd + F12 | ターミナルと併せて覚えやすい | - |
| Jump to Source | Database Consoleを開く / 閉じる | F3 | Eclipse (macOS)のデフォルト | - |
| Execute Current Statement in Multiline Console | 選択行のSQLを実行 | cmd + enter | Eclipse (macOS)のデフォルト | - |

## 何に使っていないのか

### 1. ドキュメンテーションやちょっとしたメモ、文字列操作など

私はVisual Studio Codeを使っています。理由は、使いたい基本的なエディタとしての操作が使えて、cmd + N(ctrl + N)で新しいタブを開いてテキトーに書き始められるからです。一応IntelliJ IDEAにも[スクラッチファイル](https://pleiades.io/help/idea/managing-tasks-and-context.html#work-with-tasks)なる機能はあって、ショートカットキーでサクッと一時的なファイルを作れるらしいのですが、ファイルの形式とか聞かれるしなんだか煩わしい...か？あれ、そうでもない？ちょっと煩わしいかなという理由だけで敬遠していましたが、これはもったいなかったかもしれないです。

IntelliJ IDEAは[markdown](https://pleiades.io/help/idea/markdown.html)のサポートはもちろんバッチリ。今まで書こうと思ったことがなかったので調べませんでしたが、おそらくプラグインも充実しているでしょう。ドキュメントをGitで管理している方なんかにはぴったりかもしれません。ドキュメントのプロジェクトをIntelliJ IDEAで読みめば検索よし、閲覧よし、編集よし、Git操作よしです。

ということで、私は今までドキュメンテーションやメモなどにIntelliJ IDEAを使ってきませんでしたが、十分使っていけそうです！

### 2. タスク管理

どうやらIntelliJ IDEAでは[タスク管理](https://pleiades.io/help/idea/managing-tasks-and-context.html#work-with-tasks)もできちゃうらしいです。RedmineやJiraなどと連携し、IntelliJ IDEA上でのタスク = プロジェクト管理ツールのチケットといった感じで管理できるようです。そして、それぞれのタスクにかかっている時間をトラッキングしたり、Gitのブランチや開いているタブ、ブレークポイントなどがタスクと紐づけられてタスクを開くと復元できたりするらしい...って、これすごくね？？

個人的に、「レビューに出す→他のチケットに取り掛かる→レビューで指摘が入ったからそっちを先になおす→...」みたいなことをやる時にタブがごちゃつくのが気になっていたのですが、この機能で解消できるかもしれないですね。なんか、単なるタスク管理ではないですね。甘く見ていました。

ということで、この機能も今まで使ってこなかったがこれから使っていくことになるかもしれないです。IntelliJ IDEA、いや、JetBrainsおそるべし...。

## 最後に

この記事を書きながら新たな発見もありまして、もっともっと便利に使える！と実感しました。これからもどんどん使い込んでいこうと思います。この記事で触れられていないことで「これが最高すぎる！！」みたいなことがありましたら、コメントで教えていただけると嬉しいです！