ここが好きだよIntelliJ

## はじめに

こんにちは。 [JetBrains Advent Calendar 2016](http://qiita.com/advent-calendar/2016/jetbrains) の12/19枠で参加させていただきます。
今回、表題の通りIntelliJ IDEAについてお話しします。
お忙しい方はざっと眺めるだけで構いません..... && ネタがすでにあるので、お腹いっぱいって方はスミマセン....

### おはなしすること

こんなことについて触れてみます。

- 「いんてりじぇい」ってなんですか？
- IntelliJとの出会い
- なぜ使っていたのか
 - インフラ　/ サーバサイド向け機能も！
- こんなところが便利です（駆け足紹介）

### 触れないこと

- エディタ論争 (多様性があっていいじゃないか〜）
- コーディングスキル、テクニカルな話題には触れません

それでは、以下、宜しくお願いします！

## 「いんてりじぇい」ってなんですか？

- JetBrains社製のIDEです（統合開発環境）
- IDEA は、「あいでぃあ」と読みます (「いであ」じゃないのです）
- 年に一回お布施を払います
- コミュニティライセンスと、有償版（個人ライセンス、企業向けライセンス）があります
- オープンソースライセンスっていうのもあります！ (後述)
- エディタと言う分類よりは、やっぱり「統合開発環境」（なんか開発向けに色々入ってる）と言った方がいいです

## IntelliJとの出会い

- 昔話で恐縮ですが、Jenkins勉強会っていうのがあって、そこに時間を作って参加した
- Jenkinsの話題なのに「IntelliJが好きだー！」というLTをしたお方がいらした

<img width="400" alt="masanobuimai-intellij.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/27976/0687b673-e654-00ab-3afe-60af35217b25.jpeg">
(引用：　[「こんなIntelli jはイヤだ」](http://www.slideshare.net/masanobuimai/intelli-j) / ＠masanobuimai 様)

そこから何の気なしに使ってみたら、とってもよかったのでした....(後述)

<img width="400" alt="love-intellij.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/27976/7d3a5840-ccd2-9069-cef9-a6e3e45d80ba.jpeg">

### ライセンス手に入れたい！

- 当時（４年くらい前）は、まだ日本の代理店がなかった＆オンラインで決済が要る
- 主人は私のカード明細を全部みてる＆「エディタに２万近く払うなんて信じられん！」派。

奥様が考えたことは.....

<img width="400" alt="okusama-kangaeta.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/27976/a6e17c4c-8606-5212-3dd6-71265142880f.jpeg">

- オープンソースライセンスをGETすべく、実際にJenkinsのプラグイン書きました (Redmineつながり）
- 関連するプラグインがあるので、そっちと統合したら？とコミュニティに言われ、断念....。

## なぜ使っていたのか

### Before IntelliJ

- 情報システム部門（社内インフラ）のお守りをしてた時期が長かった....
- 担当者が変わっちゃってメンテナンスの仕事を振られる
- 採用しているOS, フレームワーク, DBは最初の開発者の趣味なので色々
- コンプライアンス的にパッケージ製品も社内に置かないといけない
-　アプリケーションにもれなく付いてくる、Oracle, WebSphere, WebLogic, SQL Server, IIS....
- 分析系なので社内の雑多なDBからのデータ収集、変換が必要

専門性低くて申し訳ないんだけど、運用上コードのメンテナンスしたりデータを確認したり保守したりしないといけない！！

- DBに応じた接続用のツールを用意したり、専用のIDEを使ったり、あるいはviだけで我慢してたり....
- デバッグもちろんできません(print仕込むしかない)

### After IntelliJ

勉強会をきっかけに入れてみたら、コーディングではなくってDBの操作性が良くて、即採用！

- ちょうど古のPHPをメンテしないといけない状況が発生
- お守りをしているシステムのアップグレードに伴い、プラグインを調整しないといけない状況が発生
- Confluenceのプラグイン調整したり -> Maven ビルド必要
- デバッグが非常に簡単だった！

### 全部入りの良さ

- Rails開発ならRubyMineだけでも十分
- フロントエンド開発ならnode, AngularJSなどもIntelliJまで行かなくても大丈夫

でも、またphpいじらないといけないタイミングが来たので、IDEAにしました。

## こんなところが便利です（駆け足紹介）

### なんといってもデーターベース！

- 異種DBでも一緒に使える
- DBエンジンごとに専用ツール入れるのが面倒だ...
- OracleだってSQLiteだって使いたい
- ほぼすべてのエンジンがカバーできるよ
 - MySQL WorkBench (MySQL), SQL Developer(Oracle), VisualStudio (SQL Server) , etc....
- 全部入れてたのが、一個で済む！！
- SSL トンネリング標準サポート！
- 多段になっちゃう場合は、コマンドラインで多段ポートフォワードしますが、格段に楽

### エクスポート機能が充実してる！

- CSV出力はあたりまえ
- json, html table, SQL (insert statement) でのファイル書き出し / クリップボードへコピーOK
- Wiki, 特にConfluenceへの貼り付けが簡単！
　- 調査データの抽出＆共有が楽！

<img width="292" alt="export-option.png" src="https://qiita-image-store.s3.amazonaws.com/0/27976/0a8dcfbb-e100-6287-e331-5c127c8e631b.png">

### SQL補完・ログ機能

- その時の接続コンテキストで参照可能なテーブル名、列名が補完される
- SQL Statementもヒントが出てくる
- オペレーションのログあり
- 実行ログ（タイムスタンプ付き）のパネルあり

### オペミス防止

- Auto Commitを接続設定時にデフォルトOffに出来る
- 書き込み可能な接続アカウントであっても、Read-Onlyモードで接続できる
- DBの設定でパスワードは保存しておいても、IntelliJ起動時にマスタパスワードが聞かれる
- 不用意なオペレーションを防止できる

![readonly-mode.jpeg](https://qiita-image-store.s3.amazonaws.com/0/27976/ed7ddd1d-69ac-c32d-015c-1d4df9dd28d8.jpeg)

### 「おお！せっかくへんしゅうしたものをけしてしまうとはなさけない！」

「Gitにコミットする前に、ごにょごにょやってたものを消しちゃった！！！！」（私だけ？）
そんな時にも安心です......。

![local-history.png](https://qiita-image-store.s3.amazonaws.com/0/27976/a76ecc79-6cd1-41db-eb5f-e4eb882ee3b2.png)

- Local history というメニューがあるので、そこから一気に時刻指定で戻せます....
 - 変更あったもののうち、選択して一部だけ戻すことも可能です
 - 何回もお世話になりました....

### Rubyに関してはここが好き

へなちょこなので、デバッグ全般できるのが大変ありがたいです.....
注）　RubyMineと同じと言えばそうですね....

#### rails console

rails consoleはメニューから起動できます。(RubyMineも同様ですね）

- IntelliJのコマンドで実行、実行時にenvを指定できる
- console の画面でも、補完 / ヒントが効く（軟弱ですみません
- console からの実行でも　**デバッグ** できる（涙

![console-debug.png](https://qiita-image-store.s3.amazonaws.com/0/27976/d3cbbe3a-3852-8497-dbd5-e7f1974a66e6.png)

モデル単位のメソッドをチェックしたい時とか、rake taskのデバッグとか大変便利です！

### spec / test

- 右クリックで実行、デバッグも普通に実施可能
- coverageも画面に出してくれます
- 変更をウォッチして、勝手にテストを回すこともできます  (重いけど

### markdownエディタがあります！

- Markdownのプレビューは普通ですが、プラグインを追加することで、簡易なビジュアルエディタの機能が使えます^^;   (軟弱者ですみません....
 - https://plugins.jetbrains.com/plugin/7793 (Markdown Preview)
 - https://plugins.jetbrains.com/plugin/7701 (Gfm)

![markdown-preview.png](https://qiita-image-store.s3.amazonaws.com/0/27976/5515db01-d7aa-81a8-36df-43174cbf6258.png)


### 環境支援まわりはこんなこと

- Terminal 起動
- ssh terminal起動
- vagrant の起動 / 停止
- プロジェクト内のTODOをリストアップ（これは普通のエディタでもよくありますね）
- Jenkinsを呼び出して何かさせる
- JIRA / Redmine / GitHubとの連携 (Issueとコミットログの関連づけ）
- 簡単なREST Client
- npm, gulpのタスクも実行可能
 - Railsアプリケーションでもフロントはnodeを使ったりAngularやVueのようなフレームワークを同居させているようなケースでも、問題ありません。

![node-or-gulp.png](https://qiita-image-store.s3.amazonaws.com/0/27976/f59d0262-f851-a715-07f9-6a9babec9db5.png)

こんなかんじです。
（こんなことを書くと、私自身の専門性が無いのがバレバレですが、それはご容赦ください...）

## まとめ：インフラ / ミドルウェアエンジニアさんもぜひ！

....ということで、エディタと言うよりは、やっぱり「統合開発環境」ツールです！
へなちょこ過ぎてコードレビューの際も動かさないと分からないことが多いので、Rails, php その他必要に応じて手元で結合、デバッグさせながら何とか生きてます...

「これ、こっちのxxxでもできるよ」っていうのがあれば、ぜひコメント・ご紹介ください！
開発者だけでなく、インフラ・ミドルウェアエンジニアの方にも興味を持ってもらえたら嬉しいです！

## 残念なこと

[ねこび〜ん](http://nekobean.net/)　ちゃんっぽいのが欲しいです！！ JetBrainsさまどうぞよろしくお願いします！！

とりあえずわたしは脳内キャラ（仮）でしのいでいます...
![intelli-j-ko.jpg](https://qiita-image-store.s3.amazonaws.com/0/27976/262fd975-b30a-85d5-b659-9c7596879608.jpeg)
＃最近はヨーヨーが特技に加わったようです。

## おまけ

みんな大好きなショートカット...のうち、私がかろうじて使っているもの。

| キー操作 |  | こんな時に使う |
|:-:|:-:|:-:|
|Shift を2回  |どこでも検索  |あれ、この関数どこで定義してるんだっけ....? を探したい |
|Ctrl+Shift+F  |指定パスから検索   |プロジェクトツリー単位で検索したい   |
|Ctrl+Shift+R  |指定パスから置換   |プロジェクトツリー単位で置換したい（スペルミスやっちゃったよー、な時とか）    |
|Command + E   |最近開いたファイル・タブ一覧を表示   |開きすぎてどこにあるのか忘れちゃったよー...な時   |
|Command + /  |行コメント   |   |
|Command + Option + /   |ブロックコメント  |   |

## 参考リンク

- [複数言語を使うならRubyMine/IntelliJオススメ！（酒と泪とRubyとRailsと）](http://morizyun.github.io/blog/intellij-rubymine-jetbrain-good-point/)
- [こんなIntellijはイヤだ (いまいまさのぶさん）](http://www.slideshare.net/masanobuimai/intelli-j)