golandの設定紹介

[テックタッチアドベントカレンダー](https://qiita.com/advent-calendar/2019/techtouch)21日目担当の@mochibutaです。

# はじめに
エンジニアとして6年ほど経ち今ではIDEを使って快適な環境でコードを書けていますが、仕事として初めて触ったphpでは右も左もわからず素のvimを使って[php.net](https://www.php.net)と行ったり来たりしながら試行錯誤を繰り返していました。
1年ほど経ったあたりでチーム内でphpStormが便利そうだということで[JetBrains](https://www.jetbrains.com)製のIDEを使い始めてからその魅力にハマり、今では個人でAllProductsPackを購入するくらいファンになっています。

IDE導入によってコードの見通しがよくなり、フレームワークやライブラリの中までスッと読み込むことができるようになったことで一気にその言語に対してハードルが下がりより効率的に学習できたように思えます。特に初期製作者がいなくなったスクラッチのフレームワークとか、素vimだけだったらもう諦めていたかもしれません。

大げさかもしれませんがプログラマとしてこれまでやってこれたのもJetBrainsのおかげです。

今は業務で使っている言語がGoなのでgolandの機能紹介になりますが、JetBrainsの製品はどの言語でも設定画面や機能はほぼ同一なのでphpStormの頃から愛用している機能を紹介していこうと思います。

# フォント設定
割りかし見やすいFiraCodeというフォントに変更しています。
ligaturesを有効にすることで合字になるので気に入ってます。
<img width="794" alt="スクリーンショット 2019-12-19 1.16.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/540983ff-54d5-3337-1133-11473031d10b.png">

フォントのインストールからIDEでの有効化方法はこちら

- https://github.com/tonsky/FiraCode/wiki/Installing
- https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions

# 好きなショートカット

## Clone Caret Below `Shift+Option+Enter`
カーソル位置から下にキャレットを追加する。
デフォルトではショートカットが割り当てられていないので`Preferences->Keymap`から変更しています。
<img width="665" alt="スクリーンショット 2019-12-18 23.35.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/28a6e04a-9986-d05d-e5b7-42ba5772fbe8.png">

## Extend Selection `Command+W`
選択範囲を単語単位だったり、いい感じに選択してくれます。
Macのデフォルトだと`Options+↓`なのでWindowsに近づけるためキーを変更します。
<img width="665" alt="スクリーンショット 2019-12-18 23.37.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/f3745b2e-e40c-3a5d-81a2-0ebf378e1b26.png">

## Close `Ctrl+W`
タブを閉じます。
上のExtend Selectionと被ってしまうため変更。
<img width="665" alt="スクリーンショット 2019-12-18 23.38.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/32d4e5c5-ae43-cc6f-e69a-5d07b6388b37.png">

## New Scratch File `Command+Shift+N`
様々な形式のスニペットファイルを生成できます。
スクラッチファイルは各プロジェクトで共通の領域に生成されるため、作成したプロジェクト外からも参照できます。
参考: [スクラッチ・ファイル](https://pleiades.io/help/go/scratches.html)

## Show Context Actions `Option+Enter`
困ったときはとりあえずこれ。
エディタ上で赤や黄色で警告されている部分にカーソルを当てて表示するとその警告への対処方法が表示されます。

## Search Everywhere `Shift x2`
ファイルを開く、リモートリポジトリからpullする、などいまやりたいことを入力するとサジェストされます。

### 参考動画: StructからJsonをつくる
例として適切では無いかもしれませんが上で紹介したショートカットを使って、structのアノテーションにあるjson定義をまとめて取り出してjsonファイルとしてスクラッチファイルを作りタブを閉じるという一連の動作になります。縦一列でちょっとした変更を加えたいときにregexするより直感的に操作できるかな。

![mov1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/eb4d4b34-d3ae-2f94-f20e-6d7b3c96f1de.gif)

## Add Selection for Next Occurrence `Ctrl+G`
ファイル内に存在している選択しているワードにキャレットが追加されていきます。便利。
更に`Command+Ctrl+G`とするとファイル全体の該当ワードに一発でキャレットが追加されます。

![mov2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/42daa593-ac86-840c-7d5a-89bac0adfd01.gif)

## Refactor Rename `Shift+F6`
強力なRefactor機能のうちよく使うのがRenameです。
関数名やクラス名、変数名、ファイル名などの名前をプロジェクト全体で一気に変更することができます。
![mov3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/8e95cd8a-d2a5-22d8-4b7c-e7bbe236170d.gif)

# Command Line Tools
AllProductPackを使っているので[JetBrainsToolBox](https://www.jetbrains.com/ja-jp/toolbox-app)を入れて各エディタを管理しています。自動で最新バージョンが降ってくるなど便利ですが、コマンドラインからエディタを起動できるCommandLineToolsをかんたんに入れることができます。

![mov4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83025/18daab7f-1df0-98c3-69a6-e7b2531ff751.gif)

`$ goland {dirpath}`コマンドでプロジェクトを開くことができ、開いた時点の環境変数を引き継ぎことができるのでdirenvなどを使って環境変数を設定した状態で開くとIDE内の環境変数として使用することができます。

参考: [サムライズムさんのサポート記事](https://support.samuraism.com/hc/ja/articles/360021410293-Toolbox-App%E3%81%A7IDE%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%97%E3%81%9F%E3%82%89Tools-Create-Command-line-Launcher-%E3%81%8C%E6%B6%88%E3%81%88%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F)

# 主に使用しているプラグイン

## 言語サポート系
IDEがサポートしている言語以外の拡張子のファイルに対しても、補完やその他便利機能が使用できるようになります。
下にある以外にもたくさん用意されているので[検索](https://plugins.jetbrains.com/search?products=go)してみてください。

- [.env files support](https://plugins.jetbrains.com/plugin/9525--env-files-support)
- [AWS CloudFormation](https://plugins.jetbrains.com/plugin/7371-aws-cloudformation)
- [BashSupport](https://plugins.jetbrains.com/plugin/4230-bashsupport)
- [Ideolog](https://plugins.jetbrains.com/plugin/9746-ideolog)
- [Ini](https://plugins.jetbrains.com/plugin/6981-ini)
- [Makefile support](https://plugins.jetbrains.com/plugin/9333-makefile-support)
- [Toml](https://plugins.jetbrains.com/plugin/8195-toml)
- [PlantUMLintegration](https://plugins.jetbrains.com/plugin/7017-plantuml-integration)

## Git系
IDEデフォルトでもGit関連の機能は十分便利ですが、プラグインで更に使いやすくなります。

- [.ignore](https://plugins.jetbrains.com/plugin/7495--ignore)
- [GitToolBox](https://plugins.jetbrains.com/plugin/7499-gittoolbox)
  - AutoFetch機能で自動的にリモートリポジトリとの差がアイコンで表示されるので便利です。

## その他
- [RainbowBrackets](https://plugins.jetbrains.com/plugin/10080-rainbow-brackets)
  - ifやforのブラケットが自動的にカラー表示され、ネストされていても視認性があがります。
- [GrepConsole](https://plugins.jetbrains.com/plugin/7125-grep-console)
- [Grazie](https://plugins.jetbrains.com/plugin/12175-grazie)
  - スペルチェッカー 
- [KeyPromoter X](https://plugins.jetbrains.com/plugin/9792-key-promoter-x)
  - マウス操作で行ったアクションにたいして、キーボードショートカットがダイアログ表示されます。  
    更にエディタ内にKeyPromoterタブが現れ、マウス操作した機能の頻度が蓄積されていきます。  
    やたらマウス操作が多いけど、ショートカットキーはこれだよ？みたいなアドバイスもしてくれるのでIDE操作の効率化に一役買ってくれます。
- [Presentation Assistant](https://plugins.jetbrains.com/plugin/7345-presentation-assistant)
  - マウス＆キーボードショートカットで行った操作がエディタ下部にダイアログで表示されるようになります。  
    何気なく操作した機能の名前を確認したり、あまりやったことはありませんがライブコーディングのようなプレゼンテーション時に見ている方へ操作をわかりやすく伝えることができます。
- [Gruvbox Theme](https://plugins.jetbrains.com/plugin/12310-gruvbox-theme)
- [NyanProgressBar](https://plugins.jetbrains.com/plugin/8575-nyan-progress-bar)
  - 必須