better_errors を普段利用しているエディタと紐付けてエラー関連のファイルを開く

Rails アプリケーションのデバッグを便利にする <a href="https://github.com/BetterErrors/better_errors" target="_blank" rel="nofollow noopener">better_errors</a> ですが、エラー発生時に該当ファイルを自分が使っているエディタで開く方法はどうやるのだろうと疑問に思ったので、調べてみました。

## 前提環境

* Mac OSX 10.13.6
* ruby 2.4.3
* Rails 5.2.1
* better_errors 2.5.0
* binding_of_caller 0.7.2
* Google Chrome Version 69.0.3497.100

## やり方

簡単で推奨されているやり方は、利用しているPCの環境変数 `EDITOR` を設定するやり方でしたので、こちらを紹介します。

他のやり方は <a href="https://github.com/BetterErrors/better_errors/wiki/Link-to-your-editor" target="_blank" rel="nofollow noopener">BetterErrors/better_errors Wiki · Link to your editor</a> に書かれていますのでご参照ください。

例えば VSCode を better_errors で起動したい場合は、環境変数 `EDITOR` を下記の通り指定します。(<a href="https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line" target="_blank" rel="nofollow noopener">コマンドラインでVSCode</a>を起動できる前提)

```bash
export EDITOR=code
```

設定した状態で Rails サーバを起動し、適当にエラーを発生させて better_errors の画面を開きます。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/222030/1aba615c-1cf9-05ce-afc5-b543cda98ab0.png)

右側のソースコードが表示されているペインにあるファイル名をクリックすると、VSCode を起動するか聞かれるので、そのまま起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/222030/17e88274-28ad-701d-d40b-271e8e38bd84.png)

VSCode で該当ファイルを起動できました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/222030/4f7fbb4c-7e0b-c830-09eb-e75ead7f359d.png)

ちなみにファイルパスのリンクは `vscode://file/xxx` のようなフォーマットになっています。

## 対応しているエディタについて

**better_errors の Gem バージョンによって、対応しているエディタが違うので注意してください！**

https://github.com/BetterErrors/better_errors/releases を調べると下記のような感じでした。

エディタ|対応バージョン|環境変数設定|関連PR、コミット
:--|:--|:--|:--
Atom| >= 2.5.0 | `export EDITOR="atom"`|<a href="https://github.com/BetterErrors/better_errors/pull/406" target="_blank" rel="nofollow noopener">Add native support for linking to VSCode #406</a>
Visual Studio Code |>= 2.5.0 |`export EDITOR="code"`|<a href="https://github.com/BetterErrors/better_errors/pull/356" target="_blank" rel="nofollow noopener">Add native support for linking to Atom #356 </a>
IntelliJ IDEA | >= 2.4.0 | `export EDITOR="idea"`|<a href="https://github.com/BetterErrors/better_errors/pull/319" target="_blank" rel="nofollow noopener">IDEA and Rubymine editor url capability #319 </a>
RubyMine| >= 2.4.0 | `export EDITOR="rubymine"`|<a href="https://github.com/BetterErrors/better_errors/pull/319" target="_blank" rel="nofollow noopener">IDEA and Rubymine editor url capability #319 </a>
Emacs| >= 0.7.0 |`export EDITOR="emacs"`|<a href="https://github.com/BetterErrors/better_errors/pull/129" target="_blank" rel="nofollow noopener">Support emacs in open file in editor link #129</a>
MacVIM| >= 0.3.0 |`export EDITOR="vim"`| <a href="https://github.com/BetterErrors/better_errors/commit/7b1615193c0f50d909e2a4dc5b54d07f03ba1fe7" target="_blank" rel="nofollow noopener">support handy shortenings for editors</a>
Sublime Text| >= 0.3.0 | `export EDITOR="subl -w"`|<a href="https://github.com/BetterErrors/better_errors/commit/7b1615193c0f50d909e2a4dc5b54d07f03ba1fe7" target="_blank" rel="nofollow noopener">support handy shortenings for editors</a>
TextMate| >= 0.3.0 |`export EDITOR="mate -w"`| <a href="https://github.com/BetterErrors/better_errors/commit/7b1615193c0f50d909e2a4dc5b54d07f03ba1fe7" target="_blank" rel="nofollow noopener">support handy shortenings for editors</a>

## `EDITOR` を設定していないと

デフォルトだと、ファイルパスをには `txmt://open?url=file://...` というフォーマットのパスが設定されます。
Mac だと、こちらに対応したエディタは <a href="https://macromates.com/" target="_blank" rel="nofollow noopener">TextMate</a> になるので、こちらをダウンロードして起動させる必要があります。

## 終わりに

エラーが発生した際、関連したファイルを好きなエディタで開けるのは便利だなと思いました。少しずつ使っていこうと思います。

## 参考URL

* <a href="https://github.com/BetterErrors/better_errors/wiki#links-directly-to-the-source-line-in-your-editor" target="_blank" rel="nofollow noopener">BetterErrors/better_errors Wiki Links directly to the source line in your editor</a>
* <a href="https://github.com/BetterErrors/better_errors/wiki/Link-to-your-editor" target="_blank" rel="nofollow noopener">BetterErrors/better_errors Wiki · Link to your editor</a>