【Go言語IDE】GoLandことはじめ

# ダウンロードしてくる

GoLandとは、JetBrains社が開発したGo言語用のIDEです。
[ここ](https://www.jetbrains.com/go/)からダウンロードできます。
使用するためのライセンスに少々お金がかかりますが、学生は無料で使えるのでぜひ申請しましょう。

# とりあえず使えるようにする

これより、「PreferencesのGoという項目の中のGOPATHという小項目で何かをする」場合、「`Go -> GOPATH`：何をするかの説明」という形式で書いていきます。

- `cmd+,`でPreferencesを開く。
- `Go -> GOPATH`：GOPATHの設定が適切か確認し、適宜修正する。
- `Go -> GOROOT`：GOROOTの設定が適切化確認し、適宜修正する。
  - goenvを使っている場合は`$HOME/.goenv/versions/1.11.2`とかにあるので、`cmd+shift+.`で隠しファイル・隠しディレクトリを表示しながら探して指定しましょう。

これでとりあえずはGoのプロジェクトを開いて開発を進められる状態にはなったはずです。

# 開発を捗らせる設定をする

ここでは、開発に絶対に必要というわけではないですが、やっておくと便利な設定や、ないと辛くてやってられない設定を紹介します。
ファイル保存時に`go fmt`してくれたり`goimports`してくれたりするのは無いと辛いですね。

- `Go -> Dep`：depをプロジェクトで使う場合はお好みで`Enable dep integration`にチェックを入れて`Dep location`には`$GOPATH/bin/dep`とかの使っているdepのバイナリへのパス指定しましょう。
- `Go -> Go Module (vgo)`：Vgoを使うのであればDepと同じくチェックを入れてvgoのバイナリへのパスを指定しましょう。
- `Tools -> File Watchers`：左下の`＋`ボタンから`go fmt`, `go imports`, `gometalinter`を追加する（[参考](https://qiita.com/Sekky0905/items/c40e3375c72c003e8b1d)）。
  - 追加するときに、`Advanced Options`の`Show console`を`Never`にしておくと、保存するたみにgo fmtなどが実行された結果がエディタ下部のコンソールに表示されません。
- `メニューバー -> Tools -> Create Command-line Launcher…`：これはPreferencesではなく画面上部のメニューバーからの設定です。`goland`コマンドをパスを指定してインストールできます。ターミナルからGoLandを起動できて便利です。
- あと、シンタックスハイライトのプラグインとかは該当ファイルを初めて開いたときにサジェストされるので、言われるがままにインストールするといいと思います。

# もうちょい捗らせる

ここでは、ファイル保存時にファイル末尾に改行を入れてくれるような、あるともうちょい捗る設定をしていきます。

- `Appearance & Behavior -> System Settings`：Syncronizationの中の`Save files on frame deactivation`のチェックを外して、アクティブウィンドウをGoLandから変えると自動保存されるのを防ぐ。
- `Editor -> General`：Otherの中の`Strip trailig spaces on Save`を`All`に変更して意味のないスペースを削除してもらう。
- `Editor -> General`：同じくOtherの中の`Ensure line feed at file end on Save`にチェックを入れて、ファイル保存時にファイル末尾が改行1つで終わるようにしてもらう。
- `Editor -> General -> Editor Tabs`：Appearanceの中の`Mark modified (*)`にチェックを入れて、編集中のファイルにマークをつけてもらう（[参考](http://xblood.hatenablog.com/entry/2017/06/06/230000)）。

# 俺色に染める

ここからは、テーマやシンタックスハイライト、キーマップなどを自分の好みに設定していきます。
ここに書くのは完全に筆者の好みなので、皆さんの使いやすいようにアレンジしてみるといいと思います。
あとこういうのも設定すると使いやすいよってのがあれば教えてくれると嬉しいです。

ちなみに、こういうのってどうすんだろう？ってときに「🔎 **GoLand** こういうの」で検索しても出てこない場合は、JetBrainsのIDEは共通部分が多いため「🔎 **JetBrains** こういうの」で検索すると出てくることがよくあります。

## テーマやシンタックスハイライトなど

- `Appearance & Behavior -> Appearance`：`Theme`を`Darcula`にして、`Use dark window headers`にチェックを入れる。
- `Editor -> Color Scheme`：`Scheme`を`Monokai`に設定する。
- `Editor -> Color Scheme -> General`：`Editor -> Selection background`を明るめのグレーとかの見やすい色に変更。
- `Editor -> General -> Appearance`: `Caret blinking (ms)`のチェックをはずす（Caretの点滅が個人的に苦手）
- `Color Scheme -> Language Default`：`Keyword`と`Operator`がデフォルトで赤色になっていて、エラー箇所と紛らわしいので別の色に変更する。
  - Keywordは薄い紫に、Operatorは薄いピンクに変更してみた（なんかエヴァっぽくなった。エヴァ知らんけど）。

## キーマップの変更

JetBrains社のIDEはキーマップが他のエディタと結構違っていて、使いこなせるととても便利なのだと思いますが、他のエディタを使っていると慣れない部分が多いので変更していきます。

### 変更方法

- `Preferences -> Keymap`から変更します。
- 右上あたりの検索バーではショートカット名を検索できます。
- その右の検索マークを押すと、ショートカットコマンドで検索ができます。
- 自分の好みのショートカットコマンドを設定するときには、既存のものをRemoveして登録することになります。
- カーソルは`Caret`と呼ばれていたり、ファイル末尾は`Text End`と呼ばれていたりするので、検索には少し慣れが必要かもしれません。

### こんな感じにしてみた

筆者は、VScodeとAtomを使ったことがあるので、両者のよく使っていたショートカットをハイブリッドした設定にしてみました。
次の表の各行では、「分類」の中にある「ショートカット名」のコマンドに「コマンド」を追加した、というのを示しています。

|分類|ショートカット名|コマンド|
|:-:|:-:|:-:|
|Editor Actions|Delete to Line End|`ctrl+K`|
|Editor Actions|Backspace|`ctrl+H`|
|Editor Actions|Decrease Font Size|`cmd+-`|
|Editor Actions|Delete|`ctrl+D`|
|Editor Actions|Down with Selection|`ctrl+shift+N`|
|Editor Actions|Duplicate Entire Lines|`cmd+shift+D`|
|Editor Actions|Increase Font Size|`cmd+=`|
|Editor Actions|Left with Selection|`ctrl+shift+B`|
|Editor Actions|Move Caret to Line End with Selection|`ctrl+shift+E`|
|Editor Actions|Move Caret to Line Start with Selection|`ctrl+shift+A`|
|Editor Actions|Right with Selection|`ctrl+shift+F`|
|Editor Actions|Select Line at Caret|`cmd+L`|
|Editor Actions|Up with Selection|`ctrl+shift+P`|
|Editor Actions|Move Caret to Text Start|`cmd+↑`|
|Editor Actions|Move Caret to Text Start|`cmd+ctrl+P`|
|Editor Actions|Move Caret to Text Start with Selection|`cmd+shift+↑`|
|Editor Actions|Move Caret to Text Start with Selection|`cmd+shift+ctrl+P`|
|Editor Actions|Move Caret to Text End|`cmd+↓`|
|Editor Actions|Move Caret to Text End|`cmd+ctrl+N`|
|Editor Actions|Move Caret to Text End with Selection|`cmd+shift+↓`|
|Editor Actions|Move Caret to Text End with Selection|`cmd+shift+ctrl+N`|
|Main Menu -> Edit -> Find|Add Selection for Next Occurrence|`cmd+D`|
|Main Menu -> Navigate|File...|`cmd+P`|
|Main Menu -> Navigate|Symbol...|`cmd+O`|
|Main Menu -> Navigate|Back|`ctrl+-`|
|Main Menu -> Window -> Editor Tabs|Split Vertically|`cmd+opt+→`|

## その他

- エディタ画面において`cmd+1`で開くProjectペインの上部の歯車マークを押して`Autoscroll from Source`をオンにすると、エディタで開いたファイルの位置に自動スクロールしてくれます。