IRB の補完機能の色を設定してみた

この記事は、所属している永和システムマネジメントのアドベントカレンダー ESM Advent Calendar 2023 の 2 日目の記事です。

はじめに

11月にリリースされた Reline の v0.4.0 から Reline::Face というクラスが登場しました。

github.com

これによって、IRB のメソッド補完ダイアログの色を変えることができるようになりました。

今回はその色を変える設定をしてみたことについて書いていきます。

設定方法

設定方法は Reline::Face のドキュメントに書かれてます。

まず Reline の v4.0.0 以上がインストールされていなければ Reline の最新版をインストールしましょう。

gem  install reline

次に .irbrc へ設定を書きます。 Reline::Face.config(:completion_dialog) にブロックを渡して設定します。

サンプルコードは以下です。

# .irbrc

Reline::Face.config(:completion_dialog) do |conf|
  conf.define :default, foreground: :white, background: :blue
  #                                                     ^^^^^ `:cyan` by default
  conf.define :enhanced, foreground: :white, background: :magenta
  conf.define :scrollbar, foreground: :white, background: :blue
end

conf.define の引数に、色を変えたい対象、文字の色( :foreground )、背景の色( :background ) を渡すことができます。

色を変えたい対象として、補完候補の表示部分(:default)、選択された補完候補の部分(:enhanced)、補完候補のスクロールバーの部分(:scrollbar) の3箇所の色を変えることができるようです。

指定する色は、ドキュメントの表に書いてある :blue などの用意されたラベルの色を使う他にも、"#FF1020" のように16進カラーコードで細かく色を表現することもできます。

他にも :style オプションを渡して :bold などを指定することで、文字を太字にするなどの装飾をすることもできます。

実際に設定した内容

自分以下のように設定しました。

# .irbrc

Reline::Face.config(:completion_dialog) do |conf|
  conf.define :default, foreground: :white, background: '#2C2B2B'
  conf.define :enhanced, foreground: '#FFFFFF', background: '#005bbb'
  conf.define :scrollbar, foreground: :gray, background: '#2C2B2B'
end

ターミナルの黒い画面に目立ち過ぎず馴染むような色にしました。

補完候補の表示部分は、文字の色を white にして背景色を blackより少し明るい黒色にしました。選択された補完候補の部分は、白色にして背景色を青色にしました。スクロールバーの部分は、バーの色を gray にしてバーの背景色を black より少し明るい黒色にしました。

どのように変わったか

設定前

自分はターミナルアプリに iTerm2 を使っており、Monokai Soda というテーマを設定しています。

そのテーマと補完のデフォルトの色との相性が悪いようで、補完候補の部分の文字色が白色で背景色が水色になっており、目を凝らさないと見えないくらい見づらい状態でした。

設定前

設定後

設定後はくっきり見えるようになり使いやすくなりました  🎉

設定後

おまけ:バージョンによっては補完機能を無効にしたい

色を設定する以前は、補完候補が見づらく実用的でなかったため補完機能を無効にしていました。

# .irbrc

IRB.conf[:USE_AUTOCOMPLETE] = false

色を設定したことで補完機能を無効にする記述は消すことができると思ったのですが、 Reline::Face が利用できるのは Reline の v0.4.0 からなので、Bundler の Gemfile.lock などで v0.4.0 より前のバージョンを固定して使われると Reline::Face が利用できません。

そのため Reline が v0.4.0 以降であれば色の設定をするようにして、前であれば補完機能を無効にする条件分岐を入れてみました。

# .irbrc

if Gem::Version.new(Reline::VERSION) >= Gem::Version.new('0.4.0')
  Reline::Face.config(:completion_dialog) do |conf|
    conf.define :default, foreground: :white, background: '#2C2B2B'
    conf.define :enhanced, foreground: '#FFFFFF', background: '#005bbb'
    conf.define :scrollbar, foreground: :gray, background: '#2C2B2B'
  end
else
  IRB.conf[:USE_AUTOCOMPLETE] = false
end

さいごに

IRB の補完機能をどんどん使っていきたいです。ますます便利になっていく IRB に期待です。