IRB の補完機能の色を設定してみた
この記事は、所属している永和システムマネジメントのアドベントカレンダー ESM Advent Calendar 2023 の 2 日目の記事です。
はじめに
11月にリリースされた Reline の v0.4.0 から Reline::Face
というクラスが登場しました。
これによって、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