こんにちは。ナミレリです。この記事ではStarshipの魅力を紹介し、Starshipの設定方法やカスタマイズ方法を解説します。
私はPreztoとPowerlevel10kを使っていて何の不満もないですが、StarshipはRust制であることとシンプルで速い!という噂を聞いていて気になっていました。実際にその辺がどうなのかと、Starshipで普段使っているPowerlevel10kによるプロンプトを再現し、よりかっこ良く使いやすくする設定を紹介していきます。
Starshipでプロンプトをカスタマイズ


この記事はこんな人にオススメ
- Starshipでプロンプトをかっこ良くしたい。
- powerlevel10kのようなかっこ良いプロンプトを再現したい。
- プロンプトに様々な情報を表示したい!しかもアイコンで。
- プロンプトをかっこ良くして作業効率とモチベをあげたい。

- MacBook Pro 14インチ M1Max(メモリ32GB)
- macOS Ventura 13.5.1
- Parallels Desktop 18 for Mac(Parallelsの公式サイト)
- starship 1.16.0
- zsh 5.9
- Ubuntu 23.0.4

目次
Starshipの特徴
Starshipはミニマルで高速なRust製のプロンプトです。特に下記の3つの特徴があります。
クロスプラットフォーム対応
Starshipは多くのOSやシェルに対応しており、MacOSやLinux、FreeBSD、WindowsなどのほとんどのOSで動作し、Tcsh、bash、zsh、fish、Powershell、などの主要なシェルで動作します。
Rust製で高速
Rust制なので最高レベルの速度と安全性があり、高速で信頼性高く動作します。
柔軟なカスタマイズ性
細かい部分も自分好みにカスタマイズでき、基本ミニマルですが、Powerlevel10kのように多機能なプロンプトを設定することができます。
Powerlevel10kのように多機能なプロンプトを設定

事前準備
Starshipをよりかっこ良く使うために、お好きなNerd Fontのインストールしておきます。
Nerd Fontのインストール
brewでのインストール方法
brew tap homebrew/cask-fonts
brew install --cask font-<FONT NAME->-nerd-font
例えば、font-meslo-lg-nerd-fontをインストールする場合は、下のコマンドとなります。
例:font-meslo-lg-nerd-fontをインストールする
brew tap homebrew/cask-fonts
brew install --cask font-meslo-lg-nerd-font
例えば、font-fira-code-nerd-fontをインストールする場合は、下のコマンドとなります。
例:font-fira-code-nerd-fontをインストールする
brew install --cask font-fira-code-nerd-font
ちなみに、brewで'nerd-font'以下のように検索すると一覧を得ることもできます。
brew search 'nerd-font'
iTerm2のフォント設定
インストールしたNerd FontをiTerm2に設定します。
Preferences -> Profiles -> Text -> Font

Starshipのインストール
macの場合は、brewでサクッとインストールします。
macの場合
brew install starship
UbuntuなどのLinuxでは以下のコマンドで、バイナリを直接ダウンロードしてインストールすることができます。
Starshipをインストール後、zshの場合は~/.zshrcに初期化スクリプトを追加します。
Linuxの場合
curl -sS https://starship.rs/install.sh | sh
vi ~/.zshrc
eval "$(starship init zsh)"
zshの補完を強力にする
今回はPreztoなどのフレームワークを使わずにまっさらから設定します。
zshの補完を強力にするために、以下の3つのプラグインをインストールします。
Mac:zshの補完を強力にする
brew install zsh-completions
brew install zsh-autosuggestions
brew install zsh-syntax-highlighting
Ubuntu:zshの補完を強力にする
sudo apt install zsh-autosuggestions
sudo apt install zsh-syntax-highlighting
ぞれぞれのプラグインを簡単に紹介します。
プラグイン | 説明 |
---|---|
zsh-completions | zsh-completionsは、サポートされていないプログラムや 新しいプログラムの補完定義を追加する。 |
zsh-autosuggestions | コマンドラインに入力を始めると、過去のコマンド履歴から 関連するコマンドが薄いグレーで表示される。 |
zsh-syntax-highlighting | コマンドラインに入力するとき、構文に基づいてリアルタイムで 色分けされたハイライトが表示される。 例えば、存在しないコマンドを入力すると赤色で表示されます。 |
~/.zshrcに以下を追加します。
vi ~/.zshrc
Macの場合
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
FPATH=/opt/homebrew/share/zsh-completions:$FPATH
FPATH=/opt/homebrew/share/zsh/site-functions:$FPATH
autoload -Uz compinit
compinit
Ubuntuの場合
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
autoload -Uz compinit
compinit
場合によっては、キャッシュファイルである~/.zcompdumpを削除し、compinitコマンドによって補完システムを初期化しておくと良いです。
~/.zcompdumpを削除し初期化
rm ~/.zcompdump; compinit
パーミッションの変更
chmod -R go-w /opt/homebrew/share/
以下のコマンドでパーミッションを変更します。
chmod -R go-w /opt/homebrew/share/
このコマンドは/opt/homebrew/share/zsh配下に対して、自分が属さないその他のグループのユーザーの権限から書き込み権限を削除し、よりセキュアなパーミッションに変更しています。
基本的なカスタマイズ方法
Starshipは柔軟なカスタマイズが可能ですが、まずは基本的なカスタマイズ方法を紹介します。
設定ファイルの場所
Starshipの設定ファイルは、~/.config/starship.toml です。形式はTOML形式となります。~/.config/starship.toml が存在しない場合は、新たに作成します。
また、下のように.zshrcに設定ファイルを指定することもできます。
.zshrcに設定ファイルを指定する
export STARSHIP_CONFIG=~/path/to/file.toml
compinit
設定ファイルの形式(TOML形式)
TOMLは人間が読み書きし易く、機械も簡単に解析できることを目的とし、ミニマルであることを目指した明確な構文で、読みやすいフォーマットです。TOMLは特に設定ファイルのためにデザインされており多くのモダンなプロジェクト(例えば、RustのパッケージマネージャCargo)で用いられています。
TOMLの基本的な構文を以下に記載します。
キー・値ペア
キー・値のペアはTOMLの基本的な要素です。
key = "value"
配列
配列は複数の値を持つことができます。
fruits = ["apple", "banana", "cherry"]
テーブル
他の形式での「オブジェクト」や「辞書」に相当します。
[table]
key1 = "value1"
ネストしたテーブル
テーブルの中にテーブルを持つことができます。
[table.inner]
key2 = "value2"
コメント
#の後ろはコメントとして扱われます。
# この行はコメントです
key = "value" # ここからコメントです
基本的なカスタマイズ
では~/.config/starship.tomlに基本的なカスタムの例を書いてみます。
format = """
$os\
$directory\
$character\
"""
[os]
format = "[$symbol](bold white)"
disabled = false
[os.symbols]
Macos = " " #リンゴのicon
Ubuntu = " " #Ubuntuのicon
[directory]
truncation_length = 5
truncation_symbol = ".../"
truncate_to_repo = false
read_only = " " #鍵のicon
[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"
この基本の設定でiTerm2を起動すると下のようなプロンプトになります。

それでは次にこの基本設定の内容をひとつひとつ説明していきます。
基本的なプロンプトの説明
上の基本的な設定について、ひとつひとつ説明していきます。
format
format
下の設定は、OSアイコン、カレントディレクトリ、プロンプトキャラクターの順序で表示します。

format = """
$os\
$directory\
$character\
"""
formatは、プロンプト全体の形式を定義するキーです。キーの値としてモジュールを指定し、指定した順番で、プロンプトにモジュールが表示されます。
"""(トリプルクォート)は、文字列を複数行にわたって記述するための構文です。
\(バックスラッシュ)は、行の終わりで改行しないことを意味します。従って、$os, $directory, $characterの間に空白や改行を追加せずに、3つのモジュールが連続して表示されることを意味します。
[os]
[os]
[os]セクションでは、osモジュールの設定を記載します。現在使用しているosのアイコンや名前、色などをプロンプトに表示するためのモジュールです。
![基本プロンプト:[os]セクション](https://namileriblog.com/wp-content/uploads/2023/08/10-1.png)
[os]
format = "[$symbol](bold white)"
disabled = false
[os.symbols]
Macos = " " #リンゴのicon
Ubuntu = " " #Ubuntuのicon
format = "[$symbol](bold white)"は、osモジュールの表示フォーマットを定義しています。$symbolはosのシンボル(アイコンや名前など)で、(bold white)
は、表示するシンボルのスタイルを、太字 (bold) で白色 (white) で指定しています。
disabled = falseで、モジュールを有効化しています。osモジュールはデフォルトでは無効。
[os.symbols]は、様々なosのシンボルを指定します。例ではMacOSとUbuntuを指定しています。
上記以外にもたくさんのことができます。osモジュールのより詳しいはStarshipの公式サイトを確認ください。
[directory]
[directory]
[directory]セクションは、現在の作業ディレクトリのパスをプロンプトに表示する設定を記載します。
![基本プロンプト:[directory]セクション](https://namileriblog.com/wp-content/uploads/2023/08/11-1.png)
[directory]
truncation_length = 5
truncation_symbol = ".../"
truncate_to_repo = false
read_only = " " #鍵のicon
truncation_length = 5:は、表示するディレクトリの階層の深さです。5階層まで表示する設定です。
truncation_symbol = ".../"は階層の深さでディレクトリを切り詰めたときに、切り詰めた部分の代わりに表示するシンボルです。
truncate_to_repo = falseは、階層の深さが上限でもgitリポジトリのルートディレクトリまでは切り詰めない設定です。
read_only = " "は、ディレクトリが読み取り専用の場合のアイコンの設定です。
上記以外にもたくさんのことができます。directoryモジュールのより詳しいはStarshipの公式サイトを確認ください。
[character]
[character]
[character]セクションは、プロンプトの最後に表示される文字($
や >
等)をカスタマイズするための設定を記載します。
![基本プロンプト:[charactor]セクション](https://namileriblog.com/wp-content/uploads/2023/08/12-1.png)
[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"
success_symbol = "❯"は、直前のコマンドが成功した場合に表示するシンボルを定義します。
error_symbol = "❯"は、直前のコマンドがエラーで終了した場合に表示するシンボルを定義します。
上記以外にもたくさんのことができます。characterモジュールのより詳しいはStarshipの公式サイトを確認ください。
StarshipでMacのターミナルをかっこ良く使いやすくする設定
それでは、Powerlevel10kによるプロンプトを再現し、よりかっこ良く使いやすくする設定を紹介していきます。
完成プロンプト

Starshipの設定ファイル(TOML)
下の設定ファイルでは、アイコンはシンボルは表示されませんが、Nerd Fontが設定されたエディタなどにコピーすると表示されますので確認してください。
format
formatは、プロンプト全体の形式を定義します。キーの値としてモジュールを指定し指定した順番で、プロンプトにモジュールが表示されます。
今回は下の画像のような順番で表示するプロンプトを設定してみます。左からOSシンボル、ディレクトリ、青い線、conda環境名、pythonのバージョン、venv仮想環境名を表示しています。

formatの設定
format = """
[](fg:#7aa2f7)\
$os\
[ ](fg:#7aa2f7 bg:#1a1b26)\
$directory\
$git_branch\
$git_status\
$git_metrics\
[](fg:#1a1b26)\
$fill\
[](fg:#1a1b26)\
$conda\
[](fg:#9ece6a bg:#1a1b26)\
$python\
[](fg:#9ece6a)\
\n$character\
"""
right_format
right_formatは、右側のプロンプト形式を定義します。
今回の右プロンプトには、コマンド実行時間、luaバージョン、rustバージョン、現在時間を表示しています。
right_formatの設定
right_format = """
$cmd_duration
$lua
$rust
$time
"""
[os]
[os]セクションでは、osモジュールの設定を記載します。現在使用しているosのアイコンや名前、色などをプロンプトに表示するためのモジュールです。
私は普段、MacとUbuntu、時々Debianを使っていますが各OSのアイコンが表示されるととても便利です。

[os]セクション
[os]
format = "[$symbol]($style)"
style = 'fg:#1a1b26 bg:#7aa2f7'
disabled = false
[os.symbols]
[os.symbols]は、様々なosのシンボルを指定します。今回はMacOS、Ubuntu、Debianを指定しています。
[os.symbols]セクション
[os.symbols]
Macos = " " # nf-fa-apple
Ubuntu = " " # nf-linux-ubuntu
Debian = " " # nf-linux-debian
他にもWindowsなど多くのosのシンボルを指定することができます。詳しくは以下の公式サイトで確認ください。
[directory]
[directory]セクションは、現在の作業ディレクトリのパスをプロンプトに表示するモジュールです。
表示するディレクトリの深さや、ディレクトリが読み取り専用の場合のアイコンの設定などが可能です。今回は6階層まで表示しています。

[directory]セクション
[directory]
truncation_length = 6
truncation_symbol = ' ' # nf-fa-folder_open
truncate_to_repo = false
home_symbol = ' ~' # nf-costum-home
style = 'fg:#7aa2f7 bg:#1a1b26'
read_only = ' ' # nf-md-lock
read_only_style = 'fg:#f7768e bg:#1a1b26'
format = '[$path]($style)[$read_only]($read_only_style)'
[git_branch]
[git_branch]セクションは、現在のディレクトリにおけるgitリポジトリのアクティブなブランチ名を表示するモジュールです。

[git_branch]セクション
[git_branch]
symbol = ' ' # nf-fa-github_alt, nf-fa-code_fork
truncation_length = 4
truncation_symbol = ''
style = 'fg:#7aa2f7 bg:#1a1b26'
format = '[ $symbol$branch(:$remote_branch)]($style)' # nf-pl-left_soft_divider
[git_status]
[git_status]セクションは、現在のディレクトリにおけるgitリポジトリの状態に関する情報を表示するモジュールです。(変更されたファイルの数やステージングされていない変更の数など)

[git_status]セクション
[git_status]
style = 'fg:#e0af68 bg:#1a1b26'
conflicted = '='
ahead = '⇡${count}'
behind = '⇣${count}'
diverged = '⇕'
up_to_date = '✓'
untracked = '?'
stashed = '$'
modified = '!${count}'
renamed = '»'
deleted = '✘'
format = '([\[$all_status$ahead_behind\]]($style))'
[git_metrics]
[git_metrics]セクションは、現在のgitリポジトリ内で追加された行数と削除された行数を表示します。

[git_metrics]セクション
[git_metrics]
added_style = 'fg:#9ece6a bg:#1a1b26'
deleted_style = 'fg:#9ece6a bg:#1a1b26'
format = '[+$added/-$deleted]($deleted_style)'
disabled = false
[fill]
[fill]セクションは、行の余分なスペースを記号で埋めます。他のモジュールの位置合わせに便利です。

[fill]セクション
[fill]
symbol = '─'
style = 'blue'
[conda]
[conda]セクションは、$CONDA_DEFAULT_ENV が設定されている場合、その環境名を表示します。

[conda]セクション
[conda]
symbol = ' ' # nf-dev-python
style = 'fg:#9ece6a bg:#1a1b26'
format = '[ $symbol$environment ]($style)'
ignore_base = false
[python]
[python]セクションは、pythonのバージョンとvenv仮想環境名を表示するモジュールです。デフォルトでは次の条件のいずれかが満たされると、pythonのバージョンが表示されます。
- カレントディレクトリに
.python-version
ファイルがある場合 - カレントディレクトリに
Pipfile
ファイルがある場合 - カレントディレクトリに
__init__.py
ファイルがある場合 - カレントディレクトリに
pyproject.toml
ファイルがある場合 - カレントディレクトリに
requirements.txt
ファイルがある場合 - カレントディレクトリに
setup.py
ファイルがある場合 - カレントディレクトリに
tox.ini
ファイルがある場合 - カレントディレクトリに
.py
の拡張子ファイルがある場合 - venv仮想環境がアクティブな場合

[python]セクション
[python]
symbol = ' ' # nf-dev-python
format = '[ ${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style)'
pyenv_version_name = false
style = 'fg:#1a1b26 bg:#9ece6a'
[direnv]
[direnv]セクションは、direnvのステータスとdirenvの設定ファイルがロードされているか、また許可されているかを表示するモジュールです。
[direnv]セクション
[direnv]
format = '[$symbol$allowed]($style) '
style = "bold fg:#1a1b26 bg:#cba6f7"
disabled = false

[character]
[character]セクションは、プロンプトの最後に表示される文字($
や >
等)をカスタマイズするための設定を記載します。

[character]セクション
[character]
success_symbol = '[❯](bold #9ece6a)'
error_symbol = '[❯](bold red)'
[cmd_duration]
[cmd_duration]セクションは、コマンドの実行時間を表示するモジュールです。今回はmin_timeで1ms以上かかった場合に実行時間を表示しています。(デフォルトは2ms)

[cmd_duration]セクション
[cmd_duration]
min_time = 1
style = 'fg:#e0af68'
format = "[ $duration]($style)" # nf-pl-right_soft_divider, nf-mdi-clock
[lua]
[lua]セクションは、luaのバージョンを表示するモジュールです。デフォルトでは次の3つの条件のいずれかが満たされると、luaのバージョンが表示されます。
- カレントディレクトリに.lua-versionがある場合
- カレントディレクトリにluaディレクトリがある場合
- カレントディレクトリに.luaの拡張子のファイルがある場合

[lua]セクション
[lua]
symbol = "" # nf-seti-lua
format = '[ $symbol $version](blue)' # nf-pl-right_soft_divider
[rust]
[rust]セクションは、rustのバージョンを表示するモジュールです。デフォルトでは次の2つの条件のいずれかが満たされると、rustのバージョンが表示されます。
- カレントディレクトリにCargo.tomlファイルがある場合
- カレントディレクトリに.rsの拡張子のファイルがある場合

[rust]セクション
[rust]
symbol = "" # nf-dev-rust
format = '[ $symbol $version](red)' # nf-pl-right_soft_divider
[time]
[time]セクションは、今の時間を表示します。 表示オプションはchrono strftimeのドキュメントで確認できます。

[time]セクション
[time]
disabled = false
style = 'fg:#73daca'
format = '[ $time]($style)' # nf-pl-right_soft_divider, nf-fa-clock_o
time_format = '%T'
utc_time_offset = '+9'
StarshipでMacのターミナルをかっこ良く使いやすくする設定ファイル(全体)
下の設定ファイルでは、アイコンはシンボルは表示されませんが、Nerd Fontが設定されたエディタなどにコピーすると表示されますので確認してください。
#### icon
# nf-ple-left_half_circle_thick
# nf-pl-left_hard_divider
# nf-pl-left_hard_divider
# nf-pl-right_hard_divider
# nf-ple-right_half_circle_thick
format = """
[](fg:#7aa2f7)\
$os\
[ ](fg:#7aa2f7 bg:#1a1b26)\
$direnv\
$directory\
$git_branch\
$git_status\
$git_metrics\
[](fg:#1a1b26)\
$fill\
[](fg:#1a1b26)\
$conda\
[](fg:#9ece6a bg:#1a1b26)\
$python\
[](fg:#9ece6a)\
\n$character\
"""
right_format = """
$cmd_duration
$lua
$rust
$time
"""
[os]
format = "[$symbol]($style)"
style = 'fg:#1a1b26 bg:#7aa2f7'
disabled = false
[os.symbols]
Macos = " " # nf-fa-apple
Ubuntu = " " # nf-linux-ubuntu
Debian = " " # nf-linux-debian
[directory]
truncation_length = 6
truncation_symbol = ' ' # nf-fa-folder_open
truncate_to_repo = false
home_symbol = ' ~' # nf-costum-home
style = 'fg:#7aa2f7 bg:#1a1b26'
read_only = ' ' # nf-md-lock
read_only_style = 'fg:#f7768e bg:#1a1b26'
format = '[$path]($style)[$read_only]($read_only_style)'
[git_branch]
symbol = ' ' # nf-fa-github_alt, nf-fa-code_fork
truncation_length = 4
truncation_symbol = ''
style = 'fg:#7aa2f7 bg:#1a1b26'
format = '[ $symbol$branch(:$remote_branch)]($style)' # nf-pl-left_soft_divider
[git_status]
style = 'fg:#e0af68 bg:#1a1b26'
conflicted = '='
ahead = '⇡${count}'
behind = '⇣${count}'
diverged = '⇕'
up_to_date = '✓'
untracked = '?'
stashed = '$'
modified = '!${count}'
renamed = '»'
deleted = '✘'
format = '([\[$all_status$ahead_behind\]]($style))'
[git_metrics]
added_style = 'fg:#9ece6a bg:#1a1b26'
deleted_style = 'fg:#9ece6a bg:#1a1b26'
format = '[+$added/-$deleted]($deleted_style)'
disabled = false
[fill]
symbol = '─'
style = 'blue'
[conda]
symbol = ' ' # nf-dev-python
style = 'fg:#9ece6a bg:#1a1b26'
format = '[ $symbol$environment ]($style)'
ignore_base = false
[python]
symbol = ' ' # nf-dev-python
format = '[ ${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style)'
pyenv_version_name = false
style = 'fg:#1a1b26 bg:#9ece6a'
[direnv]
format = '[$symbol$allowed]($style) '
style = "bold fg:#1a1b26 bg:#cba6f7"
disabled = false
[character]
success_symbol = '[❯](bold #9ece6a)'
error_symbol = '[❯](bold red)'
[cmd_duration]
min_time = 1
style = 'fg:#e0af68'
format = "[ $duration]($style)" # nf-pl-right_soft_divider, nf-mdi-clock
[lua]
symbol = "" # nf-seti-lua
format = '[ $symbol $version](blue)' # nf-pl-right_soft_divider
[rust]
symbol = "" # nf-dev-rust
format = '[ $symbol $version](red)' # nf-pl-right_soft_divider
[time]
disabled = false
style = 'fg:#73daca'
format = '[ $time]($style)' # nf-pl-right_soft_divider, nf-fa-clock_o
time_format = '%T'
utc_time_offset = '+9'
表示しているモジュールの実行速度と説明を表示する
starship explainコマンドで、表示しているモジュールの実行速度と説明を見ることができます。starshipの表示が遅いと感じる時や、表示されているモジュールの意味を確認する場合にも便利です。
starship explain
Here's a breakdown of your prompt:
"❯ " (<1ms) - A character (usually an arrow) beside where the text is entered in your terminal
" base " (<1ms) - The current conda environment, if $CONDA_DEFAULT_ENV is set
" ~/dotfiles " (<1ms) - The current working directory
"─" (<1ms) - Fills the remaining space on the line with a pad string
" main " (<1ms) - The active branch of the repo in your current directory
"(+/-)" (9ms) - The currently added/deleted lines in your repo
"[✓]" (7ms) - Symbol representing the state of the repo
" " (11ms) - The current operating system
" v3.10.13" (2ms) - The currently installed version of Python
" 22:41:44" (<1ms) - The current local time
最後に
最後まで読んでいただきありがとうございます。StarshipでMacのターミナルをかっこ良く使いやすくする設定はいかがでしたでしょうか。この記事ではStarshipの魅力を紹介し、Starshipの設定方法やカスタマイズ方法を紹介しました。
自分好みのプロンプトにするとモチベが上がりますのでぜひいろいろ試してください。