自作シェルプロンプトを (8ヶ月前に) 作り直した - croque

数度本ブログ内で記事にしていますが、自作したシェルプロンプト almel を長らく使用していました。

ryooooooga.hateblo.jp

ryooooooga.hateblo.jp

数点思うところがあり、シェルプロンプトを (8か月前に) 新たに作り直しました。 作成したプロンプトは croque (読みは "くろっく" ではなく "くろっけ") という名前で公開しています。

github.com

almelとの違い

RPROMPT

croqueはalmelのデザイン (というよりは agnoster.zsh-theme のデザイン) を引き継いでおり見た目上の変化はあまり大きくありませんが、almelでは実現できていなかったRPROMPTに対応しました。

その実現のために非同期プロンプト周りのアプローチを大きく変更し、また、prompt_subst オプションを利用するように変更しました。

アプローチの変更は init サブコマンドの出力の違いとして現れています。もし興味があれば両者を見比べてみてください。

GitHub の Pull Request, GitLab の Merge Request セグメントの追加

現在のブランチに対応したPull Request や Merge Request の情報を新たに表示できるようになりました (それぞれ gh / glab の別途導入が必要)。

両者ともPR/MRの番号 (#42 / !42) とそれについているコメントの数を表示します。

PR/MRの情報の取得はHTTPリクエストが絡むためGit statusなどのローカルファイルシステムへのアクセスのみで完結するセグメントに比べ100ms単位のとても長い時間が掛かります。 almelで取っていた非同期プロンプトのアプローチでは、パフォーマンス上の都合でこのような重たいセグメントを実装することが難しかったのですが、前述の非同期アプローチの変更によって実現が可能になりました。

コンフィグファイルの見直し

自作Zshプラグイン・CLIツールの使用状況報告 - 茅の下 でも触れたようにalmelの設定ファイルには反省点が多く、設定ファイルの構造の見直しを行いました。

ただし項目などについては今後も破壊的な変更を加える可能性があります。

まとめ

作成から8ヶ月間使い続けていますが現状パフォーマンスなどに関しても不満なく使用できています。

またアプローチの変更に伴って処理の重さを気にすることなく機能を追加出来る拡張性を持たせることができました。

また、今回のリメイクではテストの記述可能性が個人的な課題でした。 almelはテストを書きにくい設計になってしまっており、実際単体テストがほぼ書かれていませんでした。 対してcroqueではテスト可能なインターフェースを念頭においてモジュール設計を行いました。 実際には一部テストを書くのをサボってしまっているのですが……。

今後は単体テストのみでなく統合テストも充実させたいと考えています (考えているだけで8ヶ月が経過しました)。