Skip to content

Starshipでのコマンド遅延問題とpyenvの影響

Published:

Table of contents

Open Table of contents

はじめに

私は、starshipという shell をカスタマイズするツールを使用している。例えば、Python のプロジェクトディレクトリに移動したときは以下のような表示となる。 starship-sample-cli.png

git の状態や、Python のバージョンが表示されていることが分かる。この starship を利用したときに、少しコマンドが遅くなった感じた。この記事では、その原因と解決方法について詳述する。

使用する各バージョンは、以下の通り。

# OS: Windows 10
 pyenv --version
pyenv 3.1.1
 starship --version
starship 1.16.0
branch:master
commit_hash:
build_time:2023-07-30 13:40:31 +00:00
build_env:rustc 1.71.0 (8ede3aae2 2023-07-12),stable-x86_64-pc-windows-msvc

原因調査

starship には explain というサブコマンドがあり、これを用いると各表示項目の遅延時間を知ることができる。

starship explain

実行結果


 Here's a breakdown of your prompt:
 "test " (1ms)               -  The current working directory
 "on  master " (<1ms)       -  The active branch of the repo in your current directory
 "[?] " (25ms)               -  Symbol representing the state of the repo
 "is 📦 v0.1.0 " (<1ms)      -  The package version of the current directory's project
 "via 🐍 v3.10.11 " (243ms)  -  The currently installed version of Python
 "➜ " (<1ms)                 -  A character (usually an arrow) beside where the text is entered in your terminal

実行結果を詳しく見ると、Python のバージョン表示が遅延の主な原因であることが判明した。この Python は pyenv を介してインストールしている。

一度 pyenv をアンインストールして、Python を公式からインストールした場合、上記の遅延は解消された。また、virtual environment をアクティベートした場合についても、同様の結果が得られた。

test on master [?] is 📦 v0.1.0 via 🐍 v3.10.11 (test-py3.10)
 starship explain

 Here's a breakdown of your prompt:
 "test " (2ms)                            -  The current working directory
 "on  master " (<1ms)                    -  The active branch of the repo in your current directory
 "[?] " (24ms)                            -  Symbol representing the state of the repo
 "is 📦 v0.1.0 " (<1ms)                   -  The package version of the current directory's project
 "via 🐍 v3.10.11 (test-py3.10) " (12ms)  -  The currently installed version of Python
 "➜ " (<1ms)                              -  A character (usually an arrow) beside where the text is entered in your terminal

これらの結果から、問題の原因は pyenv にあると確認された。

対応

完全な解決ではないが、Python のバージョンを非表示とすることにした。virtual environment をアクティベートして開発するので、アクティベートしたバージョンのみ表示する。

以下のコマンドを実行することで、starship の設定ファイルを開くことができる。

starship config

この設定ファイル内で、Python の表示設定を以下のように変更する。

[python]
format='via [${symbol}(\($virtualenv\) )]($style)'

ファイルを保存し、動作確認する。

 starship explain

 Here's a breakdown of your prompt:
 "test " (1ms)           -  The current working directory
 "on  master " (<1ms)   -  The active branch of the repo in your current directory
 "[?] " (23ms)           -  Symbol representing the state of the repo
 "is 📦 v0.1.0 " (<1ms)  -  The package version of the current directory's project
 "via 🐍 " (<1ms)        -  The currently installed version of Python
 "➜ " (<1ms)             -  A character (usually an arrow) beside where the text is entered in your terminal

速度が改善されたことが分かる。

最終的には以下のような見た目となる。 starship-sample-cli-02.png

最近話題の技術書

GitLab のチームビルディングに関する本。

gitlab