【Rails】Docker+Rails環境でpryの`edit`コマンドが使えなかったので、使えるようにした

## はじめに
DockerとRailsを使った開発環境でpryの`edit`コマンドが効かなかったので対処してみたときの記録です。

※Docker環境下での話です。**ローカルでは普通に動作**しましたので、割愛します。

## この記事が役に立つ方
- あれ？なんか`edit`コマンド効かなくね？と思っている方

## この記事のメリット
- Docker環境下でpryの`edit`コマンドが使えるようになる

## 環境
- macOS Catalina 10.15.1
- zsh: 5.7.1
- Ruby: 2.6.5
- Rails: 5.2.3
- Docker: 19.03.5
- docker-compose: 1.24.1

## pryの`edit`コマンドとは？

以下、公式のWikiです。
[Editor integration · pry/pry Wiki · GitHub](https://github.com/pry/pry/wiki/Editor-integration)

> The edit command is used to invoke your default editor. This command will load your file once you have finished editing it (unless you pass the -n or --no-reload flag to edit).

pryの画面でそのままデフォルトのエディタを開き、ファイルの編集が出来るコマンドです。

これまでpryの画面上からファイルをいじったりはしていなかったのですが、**デバッグ効率が上がるかな**と思ったので導入します。

## 【事前準備】
こちらのドキュメントに従ってDocker環境下でgem **pry-rails**を使うための準備は済ませておきました。

[Using pry-rails with Docker · GitHub](https://gist.github.com/briankung/ebfb567d149209d2d308576a6a34e5d8)

上記ドキュメントの流れは以下の通りです。

```docker-compose.yml
app:
  tty: true
  stdin_open: true
```
上記設定を追加。
↓

```ruby:Gemfile
group: :development
  gem 'pry-rails'
end
```
gemを追加。
↓

```zsh
docker-compose build
```
ビルド。
↓

```zsh
docker-compose up
```
起動。
↓

```zsh
docker ps
```
Railsアプリの`CONTAINER ID`か`NAMES`を確認
↓

```zsh
docker attach `CONTAINER ID`か`NAMES`
```
↓

```ruby
binding.pry
※好きなところで
```
これで普通にpryでデバッグ可能な状態になります。

## とりあえず`edit`コマンド使ってみようとする
※Docker環境下です。

とりあえず`edit`コマンドを叩いてみます。

```zsh
[1] pry(main)> edit
Error: Please set Pry.config.editor or export $VISUAL or $EDITOR
```

すると**エラー発生**。
`Pry.config.editor`か、環境変数`$VISUAL`か`$EDITOR`を設定してねという内容。

[先程のWiki](https://github.com/pry/pry/wiki/Editor-integration)の、**Setting the default editor**のくだりに設定方法が記載されていたので、その通りに進めてみます。

## 1. `~/.pryrc`を作成・設定
pryの設定ファイルは`.pryrc`です。
今回はなかったので作成しました。

以下設定方法についてです。
[Editor integration · pry/pry Wiki · GitHub](https://github.com/pry/pry/wiki/Editor-integration)

今回エディタは**vim**を使いたかったので、以下のように設定。

```~/.pryrc
Pry.config.editor = proc { |file, line| "vim #{file}:#{line}" }
```
該当のファイルと行に飛んでくれる仕様に例にならってみましたが、うまくいきません。

**ローカルの設定ファイルは読み込まれない**んですね。

## 2.Railsアプリのディレクトリ内に`.pryrc`を配置する。
下記記事を参照し、Railsアプリのルートディレクトリに`.pryrc`を配置してみることにしました。

[docker-compose上のRailsのデバッグを行う - My External Storage](https://budougumi0617.github.io/2017/09/02/debug-rails-on-docker/)

```:./.pryrc
Pry.config.editor = proc { |file, line| "vim #{file}:#{line}" }
```
※設定は先程と同様です。

もう一回試します。

```zsh
[1] pry(main)> edit
Error: `vim ファイル名:行数` gave exit status: 127
```
別のエラー発生。
惜しい！コマンド自体は正しそうに見えますが、`127`なるエラーが。

何これ？と思って調べると、
**「コマンドが見つからない、もしくはタイポ」**
らしいと判明。

...ということは、そもそも`vim`がない？

## 3.`vim`をインストールする
なければいくらコマンドが正しくても、どうしようもないですよね。

調べると、こちらの記事を発見しました。
[Docker — docker コンテナの中で vim が使えない場合 - Qiita](https://qiita.com/YumaInaura/items/3432cc3f8a8553e05a6e)

```:Dockerfile
apt-get install vim
```
上記を追記。
↓

```zsh
docker-compose build
```
↓

```zsh
docker-compose up
```
↓
`rails c`などでpry起動。

```zsh
[1] pry(main)> edit
#=>vim起動
```

### 無事起動！

## おわりに
最後まで読んで頂きありがとうございました:bow_tone1:

**vimがない**という環境もあるのかとびっくりしましたが、ローカルとDocker環境の境目を意識するいい経験になりました:point_up:

これでデバッグ効率が上がりそうです:relaxed:

## 参考にさせて頂いたサイト（いつもありがとうございます）
- [ruby on rails - Setting a default editor in Pry - Stack Overflow](https://stackoverflow.com/questions/44175798/setting-a-default-editor-in-pry)
- [Editor integration · pry/pry Wiki · GitHub](https://github.com/pry/pry/wiki/Editor-integration)
- [Using pry-rails with Docker · GitHub](https://gist.github.com/briankung/ebfb567d149209d2d308576a6a34e5d8)
- [docker-compose上のRailsのデバッグを行う - My External Storage](https://budougumi0617.github.io/2017/09/02/debug-rails-on-docker/)
- [Docker — docker コンテナの中で vim が使えない場合 - Qiita](https://qiita.com/YumaInaura/items/3432cc3f8a8553e05a6e)