Starship Promptでぼくの考えたさいきょうのターミナルを作る

目次

  1. 背景
  2. プロンプトをカスタマイズするには
  3. インストール
  4. プリセット
  5. Starship.toml
  6. 自分が使っているフォーマット
  7. おすすめのモジュール
  8. timeモジュール
  9. directoryモジュール
  10. Git関連
  11. cmd_durationモジュール
  12. statusモジュール
  13. sudoモジュール
  14. 言語のバージョン
  15. おまけ
  16. まとめ
  17. PR
  18. 関連記事

背景

こんにちは。 かりんとうマニア(@karintozuki)です。

皆さん、プロンプトはご存知でしょうか?

プロンプトとはターミナルを開いたときに左側に出るユーザ名とかマシン名を表示しているあれです。

1
2
karinto@macbook:~$

突然ですが、ぼくの考えたさいきょうのプロンプト私のプロンプトをご覧ください。

どうでしょうか。

私だけかもしれませんが、カラフルなアイコンと細々した数字が出ているUIに惹かれるんですよね。コクピットみたい、といったら伝わるでしょうか。ターミナルを開くたびに笑顔になってしまいます。

プロンプトをカスタマイズするのがこんなに楽しいことだったとは正直、知りませんでした。

これは私が最高だと思うプロンプトですが、あなたも自分が最高だと思えるプロンプトを作ってみたくなりませんか?

プロンプトをカスタマイズするには

プロンプトは特にツールを入れなくても.bashrcなどでカスタマイズできなくはないのですが、そのためにはPS1というクセの強い言語(?)を覚える必要があります。PS1の例は以下のような感じです。

1
2
3
# PS1の例
PS1='\u@\h:\w \t$ '

でもちょっととっつきづらいですよね?

そこで、この記事で紹介するStarship Promptが使います。

Starship PromptはPS1より可読性の高いtomlで設定ができ、PS1にはない機能もたくさんあるプロンプトのカスタマイズに特化したソフトウェアです。またRustで書かれているため高速とのことです。

この記事ではそんなStarship Promptの使い方を紹介していきます。

インストール

Starship Promptはこの手のツールにしては珍しく(?)日本語対応がしてあります。

多分AI翻訳だと思いますが、ありがたいですね。

https://starship.rs/ja-JP/

インストールもこちらのページに従うだけですが、NerdFontが必要です。

私はUbuntuを使っているので、以下のコマンドを実行するだけでした。

1
2
curl -sS https://starship.rs/install.sh | sh

プリセット

いきなりTomlを編集するのはちょっとハードルが高いので、用意されているプリセットから自分が目指すプロンプトに近いものを雛形として選ぶのがかんたんと思います。

こちらのページから好きなものを選んでみたください。

https://starship.rs/ja-JP/presets/

私は基本的にシェルもnvimもcatppuccinのカラーテーマを使うのでcatppuccinのプリセットを使うところから始めました。

Starship.toml

プリセットで一通り遊んだら自分の好きにプロンプトをカスタマイズしましょう。

~/.config/starship.toml に設定ファイルがあります。

この記事では細かい文法などは公式におまかせして、個人的に使っている設定を紹介します。

最近はこういうツールの設定などは割とChatGPTに聞いたらよしなにやってくれるので、どんなことができるのか知るほうが大事かなと思います。

自分が使っているフォーマット

設定ファイルの中にはformatというフィールドがあります。

これはPS1と同じコンセプトで、プロンプトに何をどんなスタイルで表示するかを記述したものですが、PS1より読みやすくなっています。

トップレベルのものとモジュール(次に解説します。)レベルのものがあります。

私のトップレベルのフォーマットはこんな感じです。細かいことは覚えなくて大丈夫で、なんとなくこんなこんな雰囲気なんだなーと思ってもらえれば大丈夫です。

それとこの記事全体に言えることですが、NerdFontのアイコンがうまく表示されていません。なるべくコメントをつけようと思います。

1
2
3
4
5
6
7
8
9
10
11
12
format = """
[ ](mauve)\ # >_みたいなターミナルのアイコンを入れてます。
$sudo\ # sudoパスワードキャッシュの有無
$time\ # 現在時間
$directory\ # 現在のパス
$git_branch\ # Gitブランチ
$git_status\ # Gitステータス
$status\ # 最後に実行したコマンドの結果
$cmd_duration\ # 最後に実行したコマンドの実行時間
$line_break # 改行
$character""" # >マークを表示

ここで例えば$time という行がありますが、これはそのまま時間を表示するモジュールを指しています。他にも$git_branchだったらGitのブランチ名を表示する、など割と直感的になっていることが分かると思います。

おすすめのモジュール

先程もサラッと説明しましたが、Starship Promptはモジュールという概念があります。

ここでは私のおすすめのモジュールを紹介します。

timeモジュール

$time はそのまんまですが、時間を表示します。私は以下のような設定で、styleにラベンダー色を指定し、フォーマットは%T、つまり00:34:60のようになります。

1
2
3
4
5
6
[time]
disabled = false
time_format = "%T"
style = "lavender"
format = '[ $time |]($style)'

directoryモジュール

個人的には必須です。自分が今どのフォルダにいるのかを表示してくれます。

デフォルトでは、もしGitのレポジトリだったら、レポジトリのルートをルートとして表示してくれるようになっています。

自分の設定はこんな感じです。

1
2
3
4
5
6
[directory]
style = "blue"
format = "[  $path |]($style)"
truncation_length = 3
truncation_symbol = "…/"

Git関連

Git関連のモジュールはいくつかあるのですが、私はgit_branchgit_statusを使っています。

git_branch は文字通り、自分が今どのブランチを使っているのかを表示します。

git_status はローカルの変更状況(untracked, stagedなど)とリモートと比べた状態(ahead, behind, divergedなど)を表示してくれます。

結構便利です。

1
2
3
4
5
6
7
8
9
10
[git_branch]
symbol = ""
style = "sapphire"
format = '[ $symbol $branch ]($style)'

[git_status]
style = "sapphire"
format = '[$conflicted$deleted$renamed$modified$staged$untracked$ahead_behind |]($style)'
up_to_date = '✓'

cmd_durationモジュール

これはコマンドの実行にかかった時間を表示、または通知を送ってくれます。

表示と通知それぞれに閾値を設定できて、私は700ms以上のコマンドは実行時間を表示、45秒以上かかったコマンドは通知を送るように設定しています。

1
2
3
4
5
6
7
8
9
[cmd_duration]
show_milliseconds = true
format = "[ 󰾆 $duration ]($style)"
style = "fg:rosewater"
disabled = false
show_notifications = true
min_time_to_notify = 45000
min_time = 700

statusモジュール

これは実行したコマンドの返り値を表示します。

私は成功したら✅、エラーなら❌と終了コード、終了コードの意味(Command not foundなど)を表示させています。

1
2
3
4
5
6
7
[status]
style = "fg:green"
format = '[$symbol]($style)'
disabled = false
success_symbol = "[  ]($style)"
symbol = "[  $status $common_meaning](bold fg:red)"

sudoモジュール

これはシンプルでsudoコマンドのパスワードがキャッシュされていたら🔒マークを表示させています。地味に便利です。

言語のバージョン

私は有効にしていませんが、プロジェクトの設定ファイル、例えばJSならpackage.jsonなどを見てその言語のバージョンを表示するなども設定できます。

おまけ

私のstarship.tomlの全文はこちらから見られます。

記事内にコピペしてもいいのですが、Nerdfontがうまく表示できないので、GitHubからダウンロードして開いてもらったらいいと思います。

https://github.com/karintomania/dotfiles/blob/main/.config/starship.toml

まとめ

少しでもStarship Promptの楽しさが伝わったでしょうか。この記事で紹介した以外にもたくさんの機能・モジュールがありますので、ぜひ試してみてください!

それじゃ今日はこの辺で。

PR

あなたの会社はあなたの技術を評価してくれていますか?
技術力を高めようと頑張っているのに、
技術が評価されないような会社にいたらそれは良い環境なのでしょうか?
エンジニアとして技術を高めたいのなら環境を選ぶことも大事です。

レバテックキャリア
エンジニアとして働いていて実務経験があるなら、
求人数の充実具合からレバテックキャリアがおすすめです。
IT転職ではデファクト・スタンダードですね。
▼レバテック キャリア 登録はこちら▼


Tech Clips
Tech Clipsは年収500万以上&自社サービスを持った会社に特化した求人サイトです。
首都圏限定になってはしまいますが、
収入を増やしたい、自社サービスを持った企業への転職をしたい人におすすめです。

▼Tech Clips 登録はこちら▼


関連記事

こちらの記事もおすすめです。

コマンドラインでPDF関連の処理(一つにまとめる、サイズを圧縮する)