20 人が閲覧(直近 30 日) 開発

Starshipとは?Rust製シェルプロンプトの導入とstarship.toml設定・Oh My Zsh併用【v1.27対応】

Starshipとは?Rust製シェルプロンプトの導入とstarship.toml設定・Oh My Zsh併用【v1.27対応】

「Starship」で検索するとSpaceXの宇宙船やK-POPの事務所も並びますが、この記事で扱うのは、ターミナルの入力行を置き換えるRust製のプロンプト「Starship」です。zsh・bash・fish・PowerShellなど10種類のシェルで同じ ~/.config/starship.toml を読み、Gitの状態や言語のバージョンを入力行に出します。

2026年10月17日に公開されたv1.27.0を公式リリースから取得し、macOS(Intel)上でStarship本体のコマンドと設定例を実行して確かめました。WindowsやLinuxのインストール手順は、公式READMEと各パッケージ配布元の情報に基づいています。インストールと初期化、starship.tomlでGitやホスト名を出す設定、プリセット、Oh My Zshとの併用、遅いときの切り分けの順に説明します。v1.26.0以前を使っている人は、先に「v1.27.0の脆弱性修正」の章を読んでください。

まとめ:Starshipの導入と設定の要点

  • 導入は2段階:バイナリを入れる(macOSは brew install starship、Windowsは winget install --id Starship.Starship)→ シェルの設定ファイルの末尾に初期化行(zshなら eval "$(starship init zsh)")を書く。
  • apt版は古い:aptで入るのはUbuntu 25.04以降とDebian 13以降だけで、Ubuntu 24.04には収録されていません。Ubuntu 26.04 LTSとDebian 13の収録版は1.22.1です。
  • v1.26.0以前は更新する:v1.27.0で、細工されたリポジトリのディレクトリに入ったときに働く脆弱性2件(深刻度medium)が修正されました。
  • 設定は ~/.config/starship.toml の1ファイル:ファイルが無くても既定値で動きます。ホスト名はSSH接続時だけ出るのが既定で、常に出すなら [hostname] に ssh_only = false を書きます。
  • 見た目はプリセットから:v1.27.0の内蔵プリセットは12種類。アイコン付きのプリセットには端末側でNerd Fontを選んでおく必要があります。
  • 遅いときは starship timings:モジュールごとの所要時間が出ます。外部コマンドの待ち上限 command_timeout の既定は500ミリ秒です。
  • Oh My Zshとは併用できる:ZSH_THEME="" でテーマを止め、初期化行をOh My Zshの読み込みより後に置きます。

Starshipとは:10種のシェルで同じ表示を作るRust製プロンプト

Starshipは、シェルが入力待ちのときに出す文字列(プロンプト)を描くコマンドです。シェルは入力のたびに starship prompt を呼び、Starshipはカレントディレクトリを調べて「Gitリポジトリか」「package.json や pyproject.toml があるか」を判断し、該当するモジュールだけを並べて返します。補完や履歴検索は担当しません。

v1.27.0のバイナリに対応外のシェル名を渡すと、対応シェルの一覧が出ます。実行結果は次の10種類でした。

$ starship init foo
foo is not yet supported by starship.
For the time being, we support the following shells:
* bash
* elvish
* fish
* ion
* powershell
* tcsh
* zsh
* nu
* xonsh
* cmd

ソースはGitHubのstarship/starshipで公開され、ライセンスはISCです。直近のリリースはv1.26.0(2026-06-28)とv1.27.0(2026-10-17)です(GitHub Releases)。

Starshipのインストール手順(macOS・Linux・Windows)

macOS・Linux:Homebrewかインストールスクリプト

macOSはHomebrewが手早く、2026-10-17時点でHomebrewのformulaはv1.27.0に追従済みです(Homebrew Formulae)。Linuxは公式のインストールスクリプトが現行版を入れます。

# macOS(Homebrew)
brew install starship

# Linux / macOS 共通(公式インストールスクリプト)
curl -sS https://starship.rs/install.sh | sh

# sudo を使わずにホーム配下へ入れる場合(-b で置き場所、-y で確認を省略)
curl -sS https://starship.rs/install.sh | sh -s -- -b ~/.local/bin -y

# Rust のツールチェーンがある場合
cargo install starship --locked

スクリプトは既定で /usr/local/bin に置き、そこに書き込めないときだけ sudo を使います(公式FAQ)。-b ~/.local/bin で入れたときは、そのディレクトリにPATHが通っているかを which starship で確かめます。

Debian 13・Ubuntu 25.04以降のapt導入と収録版の古さ

公式READMEのLinux向け一覧では、aptで入れられるのは Debian 13以降 と Ubuntu 25.04以降 です(README)。Ubuntu 24.04 LTSのリポジトリにStarshipはありません(Launchpad)。2026-10-17時点で各リリースに入っている版は次のとおりです。

ディストリビューション apt で入る版
Ubuntu 24.04 LTS 収録なし
Ubuntu 26.04 LTS 1.22.1
Ubuntu 26.10 1.26.0
Debian 13(trixie) 1.22.1
Debian forky・sid 1.26.0

出典はDebianのsources.debian.orgとLaunchpadです。1.22.1では、後述するClaude Code連携(1.25.0〜)やJujutsuモジュール(1.27.0〜)は使えません。新しい版が要るならインストールスクリプトかcargoで入れます。Ubuntu自体の準備はUbuntuとは|インストール手順・推奨スペック・日本語化とアプリセンターの文字化け対策にまとめています。

Windows:wingetかScoop、WSLではLinuxの手順

# winget
winget install --id Starship.Starship

# Scoop
scoop install starship

# Chocolatey
choco install starship

GitHub ReleasesにはMSIインストーラーもあります。WSLの中のLinuxはWindowsとは別の環境なので、Linux側にも上の手順で入れます(WSLの仕組みはWSL2とは?WSL1との違い・仕組み・インストール手順【WSL 3.0対応・2026年10月】)。PowerShell 7をこれから入れる場合はPowerShellのインストール手順|7.6 LTSをwinget・MSI・Linux・macOSで入れるが参考になります。

シェル別の初期化設定(zsh・bash・fish・PowerShell・Nushell・cmd)

バイナリを入れただけでは表示は変わりません。使っているシェルの設定ファイルの末尾に初期化行を1行足し、ターミナルを開き直します。

# zsh(~/.zshrc の末尾)
eval "$(starship init zsh)"

# bash(~/.bashrc の末尾)
eval "$(starship init bash)"

# fish(~/.config/fish/config.fish の末尾)
starship init fish | source

# PowerShell($PROFILE が指すファイルの末尾)
Invoke-Expression (&starship init powershell)

bashでログイン時に ~/.bashrc が読まれない環境では表示が変わりません。読み込み順は.bashrcとは?.bash_profileとの読み込み順の違いと書き方・反映手順で確認できます。

Nushellとcmdは手順が少し違います。NushellはNushell v0.96以降が対象で、初期化スクリプトをautoloadディレクトリへ書き出します。cmdはClink(v1.2.30以降)が前提で、%LocalAppData%\clink\starship.lua にLuaの1行を置きます(いずれもREADMEの手順)。

# Nushell(設定ファイルの末尾。場所は $nu.config-path で確認)
mkdir ($nu.data-dir | path join "vendor/autoload")
starship init nu | save -f ($nu.data-dir | path join "vendor/autoload/starship.nu")

-- cmd(Clink): %LocalAppData%\clink\starship.lua
load(io.popen('starship init cmd'):read("*a"))()

Nushell自体の特徴はNushellとは?次世代シェルの特徴・インストール・基本コマンドを解説で扱っています。

実行済みのコマンド行を短い記号に置き換える「transient prompt」は、公式の高度な設定に手順があるのはPowerShell・cmd・fish・bash(ble.sh v0.4以降が必要)だけで、zshの手順はありません。fishなら enable_transience を config.fish に書けば有効になります。

starship.tomlの設定とカスタマイズ

設定ファイルの場所と、書き間違いの見つけ方

設定は ~/.config/starship.toml に書きます。ファイルが無い間は既定値で動くので、変えたい項目だけを書けば足ります。別の場所に置くときは環境変数 STARSHIP_CONFIG でパスを渡します。先頭に "$schema" を書いておくと、JSON Schemaに対応したTOML拡張機能(VS CodeのEven Better TOMLなど)を入れたエディタでキー名の補完が効きます。

キー名を書き間違えても、プロンプトは既定値のまま表示され続けます。v1.27.0で ssh_only を ssh_onl と誤記すると、プロンプトの上に次の警告が出ました。設定が効かないときは、まずこの警告と starship print-config(既定値を含めた最終的な設定の表示)を見ます。

[WARN] - (starship::config): Error in 'Hostname' at 'ssh_onl': Unknown key (Did you mean 'ssh_only'?)

Gitブランチ名・変更状態の表示設定

Gitの表示は git_branch(ブランチ名)と git_status(変更の有無)の2つのモジュールが受け持ちます。git_status の既定の記号は、変更ありが !、未追跡が ?、ステージ済みが +、リモートより進んでいると ⇡、遅れていると ⇣ です。次の設定はアイコンを文字に置き換え、ahead/behindに件数を付けます。

"$schema" = 'https://starship.rs/config-schema.json'
add_newline = false

[character]
success_symbol = "[>](bold green)"
error_symbol = "[x](bold red)"

[directory]
truncation_length = 3
truncate_to_repo = true

[git_branch]
symbol = "branch "
format = "on [$symbol$branch]($style) "

[git_status]
ahead = "A${count}"
behind = "B${count}"

[cmd_duration]
min_time = 500
format = "took [$duration](bold yellow) "

この設定で、直前のコマンドが1.2秒かかって終了コード1だった状態を starship prompt --status 1 --cmd-duration 1200 で描かせると、次の2行になりました(色の制御文字は除去)。cmd_duration は min_time(ミリ秒)を超えたときだけ表示され、character は終了コードが0以外だと error_symbol に切り替わります。2行目に分かれるのは、既定のフォーマットに改行(line_break モジュール)が入っているためです。

issoh-cc on branch main [!?A48] via 🐍 v3.14.6 took 1s
x

Gitコマンドそのものの整理はGitコマンド一覧|用途別早見表とよく使う基本コマンドの使い方を解説を参照してください。

ホスト名(マシン名)・ユーザー名の表示条件と常時表示

「どのマシンで作業しているか」をプロンプトに出すのは hostname モジュールです。既定は ssh_only = true で、SSH接続中だけ表示されます。v1.27.0で確かめたところ、ローカルでは何も出ず、SSH_TTY を設定して呼ぶと 🌐 macbookpro in と表示されました。v1.27.0からは、SSH判定に SSH_CONNECTION に加えて SSH_CLIENT と SSH_TTY も見るようになっています(v1.27.0のリリースノート)。

[hostname]
ssh_only = false                   # ローカルでも常に表示
format = "[$hostname]($style) in "
trim_at = "."                      # 最初の . 以降を切る(既定)
aliases = { "macbookpro" = "mbp" } # 長いホスト名を短い別名で出す

[username]
show_always = true                 # 既定 false(条件を満たすときだけ表示)

上の設定では、ローカルでも aliases で短くした mbp in が出ることを確認しました(aliases を外すと macbookpro in)。username は既定で、rootや管理者のとき、ログインしたユーザーと現在のユーザーが違うとき、SSH接続中のときに出ます。普段のログインユーザーでも出したいときは show_always = true を足します。各オプションの既定値は公式の設定リファレンスにあります。

Docker・AWS・言語バージョンと時刻の表示

言語やクラウドのモジュールは、該当するファイルや環境変数があるディレクトリでだけ表示されます。たとえば docker_context は compose.yml や Dockerfile があるディレクトリで、使用中のDockerコンテキストが default と desktop-linux 以外のとき、または DOCKER_HOST・DOCKER_CONTEXT などの環境変数が設定されているときに出ます。Docker Desktopの既定のまま使っていると表示されないのはこのためです(公式の設定リファレンス)。time はモジュール一覧に入っていても既定で無効です。

[nodejs]
format = "via [Node $version](bold green) "

[python]
format = "via [Py $version](bold yellow) "

[aws]
format = "on [AWS $profile]($style) "

[time]
disabled = false        # 既定は true(無効)
time_format = "%H:%M"

コンテナの基礎はDockerとは|仮想マシンとの違い・必要スペック・インストール手順を解説【2026年版】で扱っています。

プリセットとNerd Fontによる見た目の調整

一から書くより、内蔵のプリセットを書き出して手直しする方が早く仕上がります。v1.27.0の starship preset --list が返したのは次の12種類でした。

$ starship preset --list
bracketed-segments
catppuccin-powerline
gruvbox-rainbow
jetpack
nerd-font-symbols
no-empty-icons
no-nerd-font
no-runtime-versions
pastel-powerline
plain-text-symbols
pure-preset
tokyo-night

# 適用=starship.toml として書き出す(既存ファイルは上書きされる)
starship preset tokyo-night -o ~/.config/starship.toml

既存の設定を残したいときは、別名で書き出してから必要な部分だけ移します。zshの軽量プロンプト「Pure」に近い見た目にしたいなら pure-preset が該当します。

アイコンを使うプリセット(nerd-font-symbols や tokyo-night などのPowerline系)は、ターミナルのフォントにNerd Fontを選んでいないと記号が□や?になります。公式READMEも前提条件にNerd Fontを挙げています。フォントを入れたくない環境では no-nerd-font(絵文字とPowerline記号だけで描くプリセット。公式は将来の既定にする予定と書いています)か、記号を文字にする plain-text-symbols を選びます。日本語も読みやすいNerd Font対応フォントはHackGen(白源)の導入とVS Code設定|更新停止後の選定基準で紹介しています。

プロンプトが遅いときの切り分け:timings・explain・command_timeout

Starshipは「速い」と紹介されがちですが、所要時間は有効なモジュールと置かれたディレクトリで決まります。starship timings は1ミリ秒以上かかったか何かを出力したモジュールを一覧にします。この記事の作業リポジトリ(Intel Core i9-9880HのMac、別の重い処理が動いている状態)で3回測ると、git_status が97〜124ミリ秒、directory が67〜90ミリ秒、python が27〜51ミリ秒で、残りのモジュールは1ミリ秒前後でした。

$ starship timings
 git_status      -  96ms  -   "[!?⇡] "
 directory       -  85ms  -   "issoh-cc "
 python          -  38ms  -   "via 🐍 v3.14.6 "
 username        -   1ms  -   ""
 character       -  <1ms  -   "❯ "

$ starship explain     # 表示中の各部品が何のモジュールかを説明する

遅さの大半が1つのモジュールに集まっているなら、そのモジュールを止めるか表示条件を絞ります。大きなリポジトリで git_status が重いなら、[git_status] に disabled = true を書くのが最も効きます。

もう1つの調整点がタイムアウトです。Starshipは言語のバージョンなどを外部コマンドで取得し、既定では500ミリ秒(command_timeout = 500)で打ち切ります。打ち切ると Executing command "..." timed out. という警告が出ます。ファイル走査の上限は scan_timeout = 30(ミリ秒)です(いずれも公式の設定リファレンス)。

# ~/.config/starship.toml の先頭(どのセクションよりも前)
command_timeout = 1000   # 初回のバージョン取得が遅い言語環境向けに延ばす

どのコマンドが遅いかは、ターミナルで次を実行するとログで確かめられます。

env STARSHIP_LOG=trace starship timings

延ばすほどプロンプトが出るまでの待ち時間も延びます。公式FAQは、遅いコマンドを特定するか、警告だけ消したいなら STARSHIP_LOG=error にする方法を示しています。ネットワーク上のファイルシステムへのシンボリックリンクがある環境では、follow_symlinks = false も検討します。

Oh My Zsh・Powerlevel10k・Pure・Oh My Poshとの違い

Oh My Zshと併用する設定

Oh My Zshはプラグインと補完の枠組みですが、テーマ機能でプロンプトも描きます。重なるのはこのテーマの部分だけなので、併用するときはOh My Zshのテーマを止め、プロンプトの描画をStarshipに任せます。oh-my-zsh.shは ZSH_THEME が空のときテーマを読み込まない作りです。

# ~/.zshrc
ZSH_THEME=""                         # Oh My Zsh のテーマを読み込まない
plugins=(git)
source $ZSH/oh-my-zsh.sh

eval "$(starship init zsh)"          # Oh My Zsh の読み込みより後に置く

プロンプト系ツールの比較と選び方

ツール 実装 対象シェル 設定 開発状況(2026-10)
Starship Rust 10種 TOML 1ファイル v1.27.0(10-17)
Oh My Posh Go 複数シェル テーマファイル v31.8.0(10-12)
Powerlevel10k zsh zshのみ 対話ウィザード 保守は限定的と明記
Pure zsh zshのみ 環境変数で少し 更新継続
Oh My Zsh zsh zshのみ .zshrc プロンプト専用ではない

選び方ははっきりしています。macOSとLinuxとWindowsを行き来する、またはシェルを複数使うならStarshipです。設定ファイルを1つ持ち回れば、どの環境でも同じ書式と配色になります(表示される項目は、そのディレクトリにあるファイルやツールに応じて変わります)。同じクロスシェル型のOh My Poshも有力で、Windows中心で既成テーマを選んで済ませたいならこちらも候補になります。

新しくPowerlevel10kを選ぶのは避けた方がよいでしょう。READMEの冒頭に「THE PROJECT HAS VERY LIMITED SUPPORT」「NO NEW FEATURES ARE IN THE WORKS」と書かれています。すでに使っていて不満がないなら移る必要はありません。zshしか使わず表示も最小限でよいならPureで十分で、Starshipに替える利点は小さくなります。

v1.27.0の脆弱性修正と更新の判断

2026-10-17、v1.27.0の公開と同じ日に、深刻度mediumのセキュリティアドバイザリが2件公開されました。どちらも、細工されたリポジトリのディレクトリに入ってプロンプトが描かれるだけで、既定の設定のまま発動する点が共通です。

ID 内容 影響を受ける版
GHSA-679r-jwc5-r5m3 他人所有リポジトリのGit設定を読み込む 1.1.0〜1.26.0
GHSA-x486-6jjc-phfp メタデータの無制限読み込み 1.26.0以下

GHSA-679r-jwc5-r5m3は、Gitを呼ぶときに --git-dir を明示していたため、Gitのリポジトリ所有者チェック(CVE-2022-24765の対策)が働かなかった問題です。他のユーザーが所有するリポジトリ(共有サーバーの共用ディレクトリなど)に入ると、そのリポジトリの設定が読まれ、そこに書かれたcleanフィルタがプロンプトを描くユーザーの権限で動きえます。自分でcloneしたリポジトリは自分の所有になるため、こちらは主に複数人が使うマシンで問題になります。既定の設定では1.17.0以降が対象です。GHSA-x486-6jjc-phfpは、リポジトリに /dev/zero を指すシンボリックリンクを package.json という名前で置かれると、既定で有効な package モジュールが読み込みを終えられず、メモリを使い続ける問題です。シンボリックリンクはGitに記録されるので、cloneしただけのリポジトリでも起きます。

共有サーバーで作業する人や、レビューのために外部のリポジトリをよくcloneする人は、早めに1.27.0へ上げてください。Homebrew・Scoop・crates.ioは公開当日に1.27.0が入りました。wingetは2026-10-17時点で1.26.0のままなので、急ぐ場合はGitHub ReleasesのMSIで上書きします。

starship --version                          # 1.27.0 未満なら更新対象
brew upgrade starship                       # Homebrew
winget upgrade --id Starship.Starship       # winget
scoop update starship                       # Scoop
curl -sS https://starship.rs/install.sh | sh  # スクリプトで入れた場合は再実行

aptで入れた1.22.1や1.26.0は、ディストリビューション側が修正を取り込むまで対象の版のままです。各ディストリビューションのセキュリティ情報を確認し、待てない場合はスクリプト版に切り替えます。どの方法で更新しても starship.toml は書き換わりません。

1.25.0以降の新機能:Claude Codeのステータスライン・Jujutsu対応

Claude Codeのステータスライン連携設定

v1.25.0で starship statusline サブコマンドが入り、Claude Code(AnthropicのCLI)の画面下部のステータスラインをStarshipで描けるようになりました。v1.27.0の starship statusline --help では、指定できる提供元は claude-code だけです。設定はClaude Codeの .claude/settings.json に次を書きます(公式の高度な設定)。

{
  "statusLine": {
    "type": "command",
    "command": "starship statusline claude-code"
  }
}

Claude Codeが標準入力に渡すセッション情報を読み、claude_model(モデル名)、git_branch、claude_context(コンテキスト使用率のゲージ)、claude_cost(セッションの費用)を並べます。表示確認のため、モデル名「Opus 5.5」・コンテキスト使用率45%・費用1.25ドルという架空のセッション情報を標準入力から渡すと、次のように描かれました(Nerd Fontのブランチ記号は省略)。

🤖 Opus 5.5 on main ██▒░░ 45% 💰 $1.25

既定の閾値では、コンテキスト使用率が30%未満のときゲージが、費用が1ドル未満のとき金額が表示されません。最初はモデル名とブランチしか出ないのはこのためで、故障ではありません。表示する並びは starship.toml の [profiles] にある claude-code で変えられます。

Jujutsu(jj)のモジュール

v1.27.0では、Git互換のバージョン管理ツールJujutsu向けに jj_bookmark・jj_change・jj_metrics・jj_status の4モジュールが加わり、Git・Mercurial・Jujutsuをまとめて扱う vcs モジュール(1.25.0で導入)もJujutsuに対応しました。ほかにも、OpenTofuの .tofu ファイルの検出や、bashでFlyline(v1.7.1以降)を使った右プロンプトが加わっています。JujutsuそのものはJujutsu(jj)とは?Git互換VCSのインストール・使い方とGitとの違いで解説しています。

よくある質問

Starshipに補完(autocomplete)やプラグインの機能はありますか?

ありません。Starshipはプロンプトの描画だけを担当し、コマンドの補完や入力候補の表示はシェル側の機能です。公式FAQは、zshなら zsh-autosuggestions を勧めています。プラグイン機構もありませんが、任意のコマンドの結果を出す custom モジュールで表示項目は追加できます。

アイコンが□や?で表示されるのはなぜですか?

使っているフォントに、その記号の字形が入っていないのが原因です。多くはターミナルのフォントにNerd Fontが選ばれていないケースで、Nerd Fontを入れてターミナル側のフォント設定で選ぶか、starship preset no-nerd-font -o ~/.config/starship.toml でNerd Fontが要らない記号に切り替えます。

starship.tomlを書き換えたのに表示が変わらないのはなぜですか?

キー名の誤記か、ファイルの場所が違う可能性があります。Starshipは不明なキーがあると警告を出したうえで既定値のまま動くので、starship print-config で実際に読まれた値を確かめます。STARSHIP_CONFIG を設定しているときは、そちらのパスが優先されます。

Starshipをアンインストールするには?

シェルの設定ファイルから初期化行を消し、バイナリを削除します。インストールスクリプトで入れた場合は sh -c 'rm "$(command -v 'starship')"' で消せます(公式FAQ)。パッケージマネージャーで入れた場合は、それぞれのアンインストールコマンドを使います。

Starshipに合うターミナルアプリはどれですか?

Nerd Fontと24ビットカラーを表示できるターミナルなら動きます。MacならiTerm2、WindowsとMacの両方で同じ設定を使うならWezTermが候補です。それぞれiTerm2とは?Macのおすすめターミナル|インストール・使い方・おすすめ設定【3.7対応】とWezTerm(ウェズターム)とは?Windows/Macの導入と設定・日本語入力・WSL2/SSH【2026年版】で設定を解説しています。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

RELATED POSTS 関連記事

目次