世界を動かす技術を、日本語で。

スターシップ:あらゆるシェルに対応した最小限で高速、かつカスタマイズ可能なプロンプト

2025年6月24日原文(starship.rs)

概要

  • Starship は、どのシェルでも使える 高速・最小限・無限カスタマイズ可能 なプロンプトツール
  • Rust製 で高速・安全性に優れ、シェルの起動が快適
  • 主要OS・主要シェル に幅広く対応し、どこでも同じ使い心地を実現
  • 導入には Nerd Font のインストールが必要
  • インストールや設定は シェルごとに簡単な手順 で完了

Starship:どのシェルにも対応する超高速プロンプト

  • Starship は、どんなシェル・OSでも動作する 汎用プロンプトツール
  • Rust言語 による実装で、プロンプト表示の 速度・安全性 を両立
  • 最小限から多機能まで、細部までカスタマイズ可能な設計
  • Nerd Font の導入が前提条件
  • 主要なシェル・OS で一貫した操作感を実現

インストール前提条件

  • Nerd Font のインストールとターミナルでの有効化が必須

Starshipのインストール手順

  • 最新版のインストール

    • シェルで下記コマンドを実行し、 公式インストーラ で導入
      • sh -c "$(curl -sS https://starship.rs/install.sh)"
    • アップデート も同じコマンドで実行
  • パッケージマネージャでのインストール

    • Homebrewbrew install starship
    • Wingetwinget install starship

シェルごとの初期化スクリプト設定

  • Bash

    • ~/.bashrcの末尾に追記
      • eval "$(starship init bash)"
  • Fish

    • ~/.config/fish/config.fishの末尾に追記
      • starship init fish | source
  • Zsh

    • ~/.zshrcの末尾に追記
      • eval "$(starship init zsh)"
  • Powershell

    • Microsoft.PowerShell_profile.ps1の末尾に追記
      • Invoke-Expression (&starship init powershell)
  • Ion

    • ~/.config/ion/initrcの末尾に追記
      • eval $(starship init ion)
  • Elvish (v0.18以上対応)

    • ~/.elvish/rc.elvの末尾に追記
      • eval (starship init elvish)
  • Tcsh

    • ~/.tcshrcの末尾に追記
      • eval \starship init tcsh``
  • Nushell (v0.96以上対応、今後変更予定)

    • $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")
        
  • Xonsh

    • ~/.xonshrcの末尾に追記
      • execx($(starship init xonsh))
  • Cmd (Clink v1.2.30+が必要)

    • starship.luaファイルを作成し、Clinkのscriptsディレクトリに配置
      • -- starship.lua
        load(io.popen('starship init cmd'):read("*a"))()
        

注意事項

  • Elvish はv0.18以降のみ対応
  • Nushell はv0.96以降のみ対応、今後設定方法が変わる予定
  • Cmd ではClinkの使用が必須

まとめ

  • Starship は、どのシェルでも一貫したプロンプト体験を提供
  • 高速・安全・柔軟なカスタマイズ性 を兼ね備えた次世代ツール
  • 導入・設定もシンプルで、すぐに使い始め可能

Hackerたちの意見

なんでこれが「ミニマル」って売り出されてるのか全然わからない。機能がたくさんあって、誰かが使ってるのを見るたびに、すごいプロンプトが出てきて、いろんな装飾がついてる。俺のシェルプロンプトはこれだよ: : ▶ ミニマルでいるために、全体のシェルプロンプトカスタマイズフレームワークなんて必要ないんだ。

そう、これはミニマルじゃなくて、マキシマリズムだよ。情報が多すぎて、文字も多い。もっとマキシマリストなプロンプトを受け入れた方がいい。

他のシェルやプロンプトと比べると、設定は本当にシンプルでミニマルだよ。ちょっと複雑なものが欲しいなら、これで十分。

俺のはもっと細い矢印だよ。# クリーンでシンプル、ミニマル PROMPT='%{%F{red}%}%~ %{%F{yellow}%}% › %{%F{reset_color}%}%'

シェルが git status を表示するのに100msかかるたびに、必要ないのに流れに見えない税金を払ってる感じだ。ターミナルは反応的なメモリツールであって、受動的な装飾じゃない。コードの実行時間を最適化してるけど、自分のタイピングの遅延には気を使ってない。

Starshipはめっちゃ速いよ。データを集めるのに数ミリ秒しかかからないし、集める内容を簡単に設定できるから、時間を無駄にしないようにできる。今まで試した他のやつとは雲泥の差で、100ミリ秒くらいの遅延にはイライラしてたからね。

例えば、VS CodeやGitHubのオンラインエディタに慣れてる人なら、キーボードを押してから画面に文字が表示されるまでに数万ミリ秒かかることもあるから、100ミリ秒なんて雷のように感じるよ。

コードの実行時間は最適化してるけど、自分のタイピングの遅延はあんまり考えてないな。100ミリ秒の最適化はCPUと人間の脳では全然違うし。毎回プロンプトでシステムログを全部出すのは擁護しないけど、ちょっとした便利機能は人間にとって数ミリ秒の計算時間の価値があると思う。例えば、プロンプトが100ミリ秒かかってgitのブランチやステータスを表示するのが「流れ」を壊すとは思えないし、自分でコマンドを打って時間がかかるのはどうなんだろうね。膨張と使いやすさのバランスが大事だと思うけど、極端な膨張か極端なミニマリズムのどちらかに偏るのは逆効果な気がする。

こういうプロンプトツールって、ユーザーに戻す前に表示されたプロンプトを編集するためにTUIスタイルの機能を使えたりしないかな?kubectlやgit、aws cliが200msかかっても問題ないし、これらのコマンドの出力データはプロンプトがユーザーに戻った後に数秒で表示されるから、ユーザーはプロンプトが準備できるのを待ってる感じがしないんだよね。

遅延は確かにイライラするよね。私はkittyターミナルのパッチ版を使ってて、starshipプロンプトをウィンドウの下に移動させてるんだ。vimやemacsみたいにね。モデルラインの更新が非同期だから、大きなgitリポジトリでもシェルプロンプトはすごくサクサク動くよ。ただ、kittyをパッチしなきゃいけないのが難点で、個人的なプロジェクトはLinux以外では試したことがないんだ。 https://github.com/mbachry/kitty-modeline

逆に、常に頭の中でgitのステータスを追いかけたり、自分に思い出させるためにコマンドを打たなきゃいけないのは、もっと大きな気が散る要因だよね。数ミリ秒の遅延のためじゃなくて、コンテキストスイッチを避けるように最適化すべきだと思う。ちなみに、私はzshのデフォルトからstarshipに切り替えたけど、特に違いは感じなかったよ。でも、gitのコミットを間違えたときは確実に気づくね!

コードの実行時間を最適化するけど、自分のタイピングの遅延は最適化しない。 フレームワークのレイヤーがあるから、逆のことが言えるんじゃない?

Hacker Newsで議論の続きを見る