EclipseからIntelliJ IDEAに移行してから良く使っている便利なこと(検索とGitに関して)

しばらく前までEclipseを使用していましたがIntelliJ IDEAを使ってみて感激したので
同じようになんとなくEclipseを使用している方に向けて私（おなじプロジェクトのメンバーも含め）が良く使っている使い方を紹介します。
また書いていないことで他の記事にもあまり触れられていなかったら追記しようとおもいます。
この記事では

- 検索に関する事
- gitに関する事

に関して書こうと思います。

ショートカット集はまとめられている記事がありますので、なるべくそこで言及されていない観点で書こうと思います。
またプラグインなどいれず、(いれればもっと便利になりますが）デフォルトの機能での紹介になります。

使用している画像は当然仕事のプロジェクトを使用できませんので私の個人が作っている趣味でのプロジェクトを使用しています。関西のJazz系のライブハウスのスケジュールをスクレイピングしてまとめて検索できるアプリで自分用のアプリプロジェクトです。
コードのレベルやコメントなども、趣味レベルなのはご容赦ください。

## この記事の前提

###対象の人

- なんとなくアサイン先で使っているからEclipseを使っている、いままでもなんとなく使っていたから使っている。
- サーバー側のコーディングはEclipse、クライアントはエディタを使っている
- IntelliJを知っているけどなんとなくEclipseを使い続けている。IntelliJって何がいいの？
- FWがspringだからSTSをつかっている

### 書かない事
そもそもの設定まわりは言及しません。

- IntelliJのインストールや無料版、有償版の違い
- 各フレームワークのインポート方法
- Gitの設定など
- プロジェクトの読み込みの方法など

ちなみに普段の仕事で使用しているフレームワークはspring です。初めは有償版じゃないとspring bootのプロジェクトは開発できないと先入観があったのですが、よく考えたらJavaであることには変わりませんのでmavenプロジェクトとして、もしくはgradleプロジェクトとして普通に使用できます。ただし、spring特有の補完などは効きません(のちに有償版を使いましたが、それによって新たに使用した機能はクライアントの支援とDBクライアント機能なので無料版でもJavaのコーディングは問題ありません。）
サーバサイドのコーディングだけなら無償版でもspringのプロジェクトでも使用することができます。
クライアント(HTML,CSS,JavaScriptやAltJsなど）のサポートやspringFWのサポート(hibernateのコーディング補完や、springのアノテーションのなんらかのサポート?使用しないのであまりわかっていません。)DBクライアントなどは有償版のサポートとなります。


# 検索編
## Find Action
mac : shift + cmd + 9
win : shift + ctl + 9
これがしたい、あれがしたいなどをなんとなく入力すれば候補を一瞬で表示してくれます。これはどんなもエディタでもIDEでもありますが、これがなくては始まりません。
また私はショートカット集の記事をみても、ショートカット自体を覚えることはありません（どんなことができるのか参考させていただきます。）、なぜならここからやりたいことを一瞬で呼び出せますし、頻繁に使用するするアクションなら、ここでの検索時にそのショートカットを表示してくれるのでそこで覚えてしまうからです。画像はfind actionから settingと commitを呼び出しています。
![fidAll.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/93abbb90-9906-76e6-c89e-f2237b0349bd.gif)


## インクリメンタルサーチ
IntelliJではほぼすべての項目においてインクリメンタルサーチがデフォルトで効くようになっており、これが非常に重宝しています。
たとえば project View を開き、そのままキーを押すといきなり検索がはじまります。setting内でも、なんでもです。
ほかのIDEとの違いはファイル内では使用できるが、検索内でのインクリメト、git view内でのインクリメントまでは効かなかったり、頭文字だけだったりする事がおおいので非常に心地いい経験になっています。

プロジェクト View での例
![projectView.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/033f2c86-fe66-d883-a8b7-80dcf83ad016.gif)

Recent search(最近使用したファイル、または機能)での例
![recentSerch.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/7383268b-7f6e-c53f-035a-207d1bbbb995.gif)


## search EveryWhere 
shift 2回押しで発動します。
クラスの移動は別にnavigate classという移動方法がありますが、html、jsファイルの移動するときなどに使っています。
![ss.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/26589d0a-e7c8-e236-8d17-0b69165502c2.gif)
## Find in Path
ある文字列、または数行の文字列をプロジェクト全体に渡って検索します。すごいのは検索している状態のまま、検索箇所の編集ができることです。
![findInpath.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/a2d421f8-4c85-5649-88c6-a4abe3b7f3c2.gif)


## switcher
直近の使用したファイル、機能へ移動するときに使っていますが、Recent searchの方がインクリメント検索きくのでファイル移動はそちらの方が早いかもしれません。
![switcher.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/a179e7de-24cb-8c8e-924b-518b34ff08d3.gif)



## Jump to Navigation Bar
project view では tree構造でフォルダ構成をみながらの移動ができますが、こちらは違った視点でのナビゲーショになります。
![navigate.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/b71a7cc7-c286-229f-59dd-24e8572cdc2f.gif)



# git編

gitもデフォルトで非常に便利に使えるようになっています。
mac : cmd + 9
win : alt + 9
でversion controll 
![git.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/e1a6f93c-b905-a074-02f2-1867b3034e5d.gif)

## branches 
ブランチの移動時に使用しています。
![branches.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/e76486e3-8193-b64b-53ec-2c021d136c2d.gif)


## local history 
gitではないのですが、ファイルの編集をデフォルトで常に覚えているようで、gitを使用せずとも個人の履歴だけならgit使用せずに履歴をさかのぼりそのままmergeしたりすることができます。

![localHistory.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/72cab5f4-dbc0-98dc-6dca-f723f26de2e3.gif)


## git view 内での検索
日常的に使用しています。
![searchInGir.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/77e8e2aa-7f40-e844-8051-912299b75656.gif)

## compare with ...
ある２つのブランチの比較ができます。source treeでももちろんできますが、みやすさが違うのとmergeもそのままできるので重宝しています。ファイル単位の差分が出ます。プロジェクトを進める上でコンフリクトが発生し、誰かに自分の触った箇所もマージしてもらったけれど大丈夫かな、、というときに確認したりしてます。自分のマージも不安になったとき確認して精神の健康を保っています。
![compare.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/681329c8-0a07-2aae-dbc6-2ff78807e1bc.gif)


#　他の便利編

## book mark 
これは過去の他の人が書いたロジックを確認していたとき、メソッドやクラスを移動していたり構成の把握しようとしているときに「しおりみたいなのないかな。。。」とおもって Find Action で「book ..」と検索すると用意されていて驚いた機能です。Eclipseにもあったのでしょうか？
IntelliJはなんというか期待を裏切らない機能が用意されているので、とりあえず「こんなのないかな、、」と Find Actionしたり、右クリックすると大抵用意されていたりします。

book markをつける。
![book.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/1985d548-22e0-9f75-fa97-d6cab9942127.gif)


つけたbookmarkの一覧を確認したり、ジャンプできる。
![showBook.gif](https://qiita-image-store.s3.amazonaws.com/0/136265/42ba9359-ebf1-d9aa-26db-70c6dd1ec60b.gif)


# 最後にIntelliJの良さとは(というかJet Brains社のプロダクトは)

UXを非常にこだわっています。

- 検索の速さ（検索時検索しているのでなく、プロジェクトの読み込み時にプロジェクト内のすべての項目においてインデックスしているようです。）
- 補完の速さ（Eclispeの補完とは比べ物になりません。）
- ほぼ全ての項目においてのインクリメンタルサーチ
- 設定の容易さ(Emacsでの設定、Atomでいろいろなプラグインをいれてそのたびそのプラグインの設定して、、、のしんどさがない）

など。つかっていての心地良さがまた新たな使い方を覚えて馴染んでくる感じです。
クライアントではVS Codeが非常によく使われているようですが、個人的な思いとしてサーバサイドコーディングもクライアントサイドコーディングもDBクライアントもGitも全て一つで済ませたい思いがありました。
IntelliJはまさにそれを叶えてくれ、いままでクライアントコーディングはAtomを使っていたり、DBクライアントはA5SQLを使用していましたが全て一つで統合して開発できるようになり、生産性は上がったと思います。

当然ですが、IntelliJは機能が非常に豊富であり、今回紹介した機能以外も(デバッグも機能も条件付きbreakやwatcherなど便利です。)使用していますし、私もつかっていない機能もたくさんあるとおもいます。
またこれは、、、というものがあれば追記したいと思います。
JavaのプロジェクトにおいてなんとなくEclipseを使用している方は一度試してみてはいかがでしょうか?