`raill console` でも Bash の vi 編集モードと同じキーバインドを使う方法

Rails

はじめに

今回は完全に「誰得」な記事です。

僕は普段から Zsh あるは Bash の vi キーバインディングモードを有効にして仕事をしています。

それぞれ、以下の command を実行することで有効になります。

  • Zsh : bindkey -v ( 実際には zplug でもう少しカスタマイズしている )
  • Bash : set -o vi

ところで最近は新しい職場で Ruby on Rails の開発をするようになりました。
毎日チームメンバに指摘をいただきつつ、新卒エンジニアの頃のような挫折感と戦いながら仕事をしています。
( 一日が終わると涙でそうなぐらい凹んている... )

話を戻して本題に。

rails console を使ってデバッグや本番環境のデータ確認をするタイミングがあるのですが、
そんなときに Zsh や Bash のような vi キーバインドが使えないと生産性が半減してしまいます。

どうしたら有効になるか調べてみました。

検証環境

$ uname -moi
arm64 unknown Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.1.16(1)-release (aarch64-apple-darwin21.1.0)

$ bin/rails console
Loading development environment (Rails 6.1.6)

~/.inputrc ファイルに設定を記述するだけ

設定は ~/.inputrc に以下の一文を追記するだけです。

set editing-mode vi

設定した上で bin/rails console を実行してみると、反映されていないようです。

# ローカル実行環境はDocker環境
$ docker-compose exec app bash

$ bin/rails console

当然でして、設定した ~/.inputrc ファイルは Docker 環境外のホスト OS 側で設定していたからでした。

改めて Docker 環境内に設定してやることで正しく vi キーバインドが使えるようになりました。

# ローカル実行環境はDocker環境
$ docker-compose exec app bash

$ echo 'set editing-mode vi' > ~/.inputrc

$ bin/rails console

Docker 内の rails console 起動と同時に設定を行いたい場合

上記の Docker 環境での実行ケースは以下のように 1 文にすることが出来ます。

# ~/.inputrc に設定を書き込んだ直後に rails console を実行
$ docker-compose exec app sh -c "echo 'set editing-mode vi' > ~/.inputrc; bin/rails console"
Loading development environment (Rails 6.1.6)
[1] pry(main)>

ひとこと

本番 Kubernetes 環境などで作業用のコンテナ立ち上げるときにも利用してみようと思います。

Rails