← ブログ一覧
フルスタック7分

Gumとは?シェルスクリプトに選択メニューや確認ダイアログを足せるCharm製CLIをREADMEから読む

  • #Gum
  • #Charm
  • #CLI
  • #シェルスクリプト

シェルスクリプトで「候補から1つ選ばせる」「実行前に確認する」といった画面を作ろうとすると、readやselectを組み合わせて自前で書くことになりがちです。Charmが公開している「Gum」は、そうした対話部品を1コマンドずつ呼び出せるようにしたCLIです。

この記事は、GitHubの公式READMEとリリースノートをもとに整理した解説です。筆者がGumをインストールして動かした検証記録ではありません。コマンドの書き方はREADMEの記述に沿っています。手元で使うときはgum <command> --helpで、お使いのバージョンの指定方法を確認してください。

Gumは「シェルから呼ぶ対話部品」の詰め合わせ

READMEはGumを「A tool for glamorous shell scripts」と紹介しています。CharmのBubblesとLip Glossという部品を、Goのコードを書かずにスクリプトやエイリアスから使えるようにしたものです。READMEのチュートリアルも、dotfilesのエイリアスや数行のシェルスクリプトを想定した書き方になっています。Gum公式リポジトリ

開発元のCharmは、Markdownをターミナルで表示するGlowや、ターミナルで動くAIコーディングエージェントのCrushも手がけているチームです。

ライセンスはMITです。GitHubの表示では、2026年10月14日時点でスターは約2.4万、最新リリースは2026年9月24日公開のv2.0.2でした。

13のコマンドを役割別に見る

READMEが挙げているコマンドは13個です。役割で分けると、次のようになります。

分類コマンドREADMEでの説明
入力input1行の入力を求める。--passwordでパスワード入力にもできる
入力write複数行のテキストを入力させる。ctrl+dで確定
入力confirm実行してよいかを確認する。肯定なら終了コード0、否定なら1
選択choose選択肢の一覧から選ばせる。--limitや--no-limitで複数選択も可能
選択filter一覧をあいまい検索で絞り込む
選択fileファイルツリーからファイルを選ばせる
選択table表データから1行を選ばせる
表示style文字に色・枠線・余白・配置を付ける
表示joinテキストを縦または横に結合する。styleと組み合わせてレイアウトを作る
表示formatMarkdown、テンプレート、絵文字、コードのハイライトを整形して表示する
表示pager長い文書を行番号付きでスクロール表示する
表示logレベルや構造化フィールドを付けてメッセージを出力する
実行spinコマンドの実行中にスピナーを表示する。コマンドが終わると自動で止まる

使い方の基本は、画面で選んだ結果を標準出力に受け取ることです。READMEのチュートリアルにも、gum choose単体では選んだ値が標準出力に出るだけなので、$VARIABLEやファイルに保存して使うよう注記があります。

見た目や挙動は、--foregroundや--placeholderのようなフラグで変えられます。同じ指定はGUM_INPUT_PROMPTのような環境変数でも書けて、両方あるときはフラグが優先されると説明されています。

READMEのコミットメッセージ例で流れをつかむ

READMEのチュートリアルは、Conventional Commits形式のコミットメッセージを作る流れで、主要コマンドを順番に使っています。

まず、変更の種類を選ばせます。

gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore" "revert"

次に、スコープを1行で入力させます。

gum input --placeholder "scope"

要約は1行、詳細は複数行で入力させます。

gum input --value "$TYPE$SCOPE: " --placeholder "Summary of this change"
gum write --placeholder "Details of this change"

最後に、コミットしてよいかを確認します。

gum confirm "Commit changes?" && git commit -m "$SUMMARY" -m "$DESCRIPTION"

gum confirmは、肯定なら終了コード0、否定なら1で終わります。そのため、&&でつないだコマンドは、確認で「はい」を選んだときだけ実行されます。READMEの別の例では、入力と複数行入力をgit commitの引数に直接渡す1行版も紹介されています。

git commit -m "$(gum input --width 50 --placeholder "Summary of changes")" \
           -m "$(gum write --width 80 --placeholder "Details of changes")"

日常作業での使いどころと、先に確認しておきたい点

READMEのExamplesには、日常のコマンド操作に組み込む例が並んでいます。

  • 絞り込んだファイルをエディタで開く:$EDITOR $(gum filter)
  • シェル履歴からコマンドを選ぶ:gum filter < $HISTFILE --height 20
  • git log --onelineの一覧からコミットハッシュを選ぶ:git log --oneline | gum filter | cut -d' ' -f1
  • GitHub CLIで一覧からプルリクエストを選んでチェックアウトする:gh pr list | cut -f1,2 | gum choose | cut -f1 | xargs gh pr checkout

シェル履歴を一覧から探すという目的は、Atuinの解説記事で扱ったシェル履歴ツールと近いものです。

一方で、READMEには選んだ結果を削除系のコマンドへ渡す例もあります。

brew list | gum choose --no-limit | xargs brew uninstall
git branch | cut -c 3- | gum choose --no-limit | xargs git branch -D

どちらも、複数選択した項目をそのままxargsで削除コマンドに渡しています。git branch -Dは、マージ済みかどうかにかかわらずブランチを強制削除するオプションです。選び間違えたり、全項目を選んだりすると元に戻せない場合があります。最初はxargsの後ろのコマンドをechoに置き換えて、何が渡されるかを表示するだけにして試すと安全です。これはREADMEの記述ではなく、この記事での提案です。

また、READMEにはcronやCIのような、人が画面を操作できない環境での挙動は書かれていません。定期実行するスクリプトに入れる前に、別途確認が必要です。

インストール方法とv2の変更点

READMEが挙げているインストール方法は、次のとおりです。

  • macOS / Linux:brew install gum
  • Windows:winget install charmbracelet.gum または scoop install charm-gum
  • Arch Linux:pacman -S gum
  • Fedora / EPEL 10:dnf install gum
  • Nix:nix-env -iA nixpkgs.gum
  • Go:go install charm.land/gum/v2@latest

Debian・Ubuntuでは、Charmのaptリポジトリを追加してからsudo apt install gumを実行する手順が案内されています。GitHub Releasesには、Debian・RPM・Alpine形式のパッケージと、Linux、macOS、Windows、FreeBSD、OpenBSD、NetBSD向けのバイナリもあります。

2026年8月20日公開のv2.0.0では、画面描画に使うBubble TeaとLip Glossがv2系に更新されました。リリースノートによると、使い勝手の変更はなく、描画が速く正確になるとされています。あわせて、Goのパッケージ名がcharm.land/gum/v2に変わりました。

その後のv2.0.1(9月11日)とv2.0.2(9月24日)は、端末に意味のない文字列が表示される不具合の修正です。v2.0.1はキーボード入力まわりの記号が漏れる問題、v2.0.2は入力を求めないコマンドでも制御用の文字列(ANSIエスケープシーケンス)が出力される問題を、Bubble Teaの更新で直したと書かれています。v2系の初期版を使っていて出力に見慣れない文字が混ざるときは、最新版への更新を試す価値があります。

向いている場面と、別の手段を考えたほうがよい場面

READMEの説明と例から考えると、Gumが向いているのは、自分用のdotfilesやエイリアス、ブランチの選択やコミット補助のような小さなスクリプトです。既存のシェルスクリプトの構造を変えずに、入力と確認の部分だけを見やすくできます。

別の手段を考えたほうがよいのは、次のような場面です。これはREADMEに書かれた制約ではなく、使い方から考えた目安です。

  • 他の人に配るスクリプト:受け取る側にGumのインストールが必要になります
  • 人が操作しない自動実行:READMEに挙動の説明がなく、事前確認が必要です
  • 複雑な画面を持つ専用ツール:画面の作り込みが目的なら、Gumの土台であるBubble TeaをGoで直接使う選択肢もあります

CharmのツールはGlowやCrushのように、ターミナルの中で完結する作業を楽にする方向で揃っています。Gumはその中でも、自分のシェルスクリプトに手を入れて使えるものです。

参考にした一次情報

まずは、やりたいことを聞かせてください

「何から手をつければいいか分からない」段階でも大丈夫です。 ご相談・お見積りは無料。碧南近郊なら直接伺います。