ShellSage - あなたのAI/bashパートナー
本文の状態
日本語全文を表示中
詳細モードで約15分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
Answer.AI
ShellSageは、ターミナル操作におけるコンテキストスイッチングの煩雑さを解消するAIツール。ChatGPT等の外部アシスタントと異なり、ターミナル内のコンテキストを保持し、具体的な状況に即したコマンド提案を行うことで、開発者の作業効率を向上させる。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
ターミナルの問題
誰もが経験があるでしょう - ターミナルを見つめながら、その珍しい tar コマンドや ssh の正しいフラグを思い出そうとしている場面です。もちろん Google で検索することもできますが、そうなるとドキュメント、Stack Overflow、そしてターミナルの間でコンテキストを切り替えることになります。あるいは ChatGPT や Claude といった AI アシスタントを使っているかもしれませんが、その場合はウィンドウ間でコピー&ペーストを行う必要があり、ターミナルの文脈を失い、特定の状況に完全にフィットしない文章の壁に直面することになります。
このコンテキストの切り替えは単に不便なだけでなく、私たちが発見した効果的な人間と AI の協働のための基本原則の一つを損なうものです:共有された文脈の維持です。ウィンドウ間でスニペットをコピー&ペーストしたり、問題を AI アシスタントに説明しようとしたりすると、人間の思考と機械の思考の間に人工的な障壁が生じます。私たちは、人間も AI も同じ完全な文脈を、作業が行われている場所で同時に視認し理解できる時にこそ、最も強力な協働が実現できると発見しました。

llm を使って tar について学ぶ私
Simon Willison の優れた llm ツールを発見した際、私は常にこの状況に陥っていました。llm を使えばターミナル内で AI アシスタントとチャットできますが、多くの用途には素晴らしいものの、これらのシステム管理タスクには私の必要とするものとは少し違いました。回答はしばしば長く冗長な文章の壁となり、ターミナルをスクロールして読む必要があり、強力なコマンドに伴う落とし穴について常に警告してくれるわけではありませんでした。最も重要なのは、llm が私が実際にターミナルで行っていることを見ることができない点です。これはより関連性の高い回答を提供するために役立つ文脈情報ですが、それが見えていないのです。
この課題は、Answer.AI で SolveIt を開発している間に特に深刻になりました。私たちは複数のシステム管理タスクを並行して処理していました。リバースプロキシ用に Caddy をセットアップしたり、Docker コンテナを管理したり、Linux のクォータを設定したりする作業です。ドキュメント、Claude Projects、そしてターミナルの間を行き来するコンテキストスイッチングが大きなボトルネックとなっていました。これらの異なるインターフェース間を移動することによる認知負荷が私たちの速度を落とし、経験から学ぶことを難しくしていました。
私たちが求めたのは単にドキュメントを読み上げる AI ではありませんでした。私たちが何をしているかを見守り、文脈を理解し、即座の問題を解決しながら学習を手伝ってくれる教育アシスタントが必要だったのです。そこで ShellSage(コードネームは BashBuddy)が誕生しました。私が llm に同じ質問をした際の出力と、ShellSage を使用した場合の出力を比較すると以下のようになります。

ShellSage が tar コマンドについて、より簡潔かつ実行可能な回答を提供しています
これはまた、Answer.AI において重要な点に触れるものです。私たちは、AI の未来が人間を置き換えることにあるのではなく、人間と AI がそれぞれの独自の強みを活かして協力し、問題を解決することにあると考えています。ShellSage はこの哲学を体現しており、多くの人が仕事の日を過ごすターミナル内で、あなたと AI の間に共有された文脈を構築します。
ShellSage の誕生
単に bash コマンドを覚えるのを助けるためのシンプルなスクリプトとして始まったものが、はるかに強力な何かに進化しました。初期のアイデアは非常に単純明快でした:LLM(大規模言語モデル)の利便性を手に入れつつも、ただ教示するのではなく、教育に焦点を当てたいと考えていました。決定的な洞察が得られたのは、多くの開発者がすでにターミナル管理に使用している tmux が、欠けていた文脈のピースを提供できることに気づいた時でした。
tmux の capture-pane 機能と統合することで、ShellSage は今や私がターミナルで行っていることを「見る」ことができるようになりました。つまり、私の質問だけでなく、作業全体の文脈を理解できるようになったのです。Docker コンテナの問題をデバッグしている最中だった場合、ShellSage はターミナルの履歴からその状況を把握します。Git コマンドでエラーに直面した直後であれば、それも認識できます。
このように AI の支援とターミナルの状況を組み合わせたアプローチは、まさに私たちが求めていたものでした。ドキュメントとターミナルの間でコンテキストを切り替える代わりに、タスクに集中しながら、その過程で適切なシステム管理の実践を学ぶことができました。
本当の試練は、Answer.AI での集中的な開発期間中に訪れました。私たちは絶えず新しいサービスのセットアップを行い、サーバーの設定を行い、システムのデバッグを行っていました。ShellSage はこれらの課題に対処するための頼れるツールとなり、遭遇するたびに新たなユースケースに合わせて進化していきました。コマンドを覚えるための個人的なユーティリティとして始まったものが、システム管理のための真の教育アシスタントへと成長したのです。
実例:証明書の謎
人間と AI が協力して複雑な問題を解決する方法を完璧に示す物語をお話ししましょう。SolveIt の開発中、Jeremy はサーバーログで奇妙な点に気づきました。サーバーが稼働してからすぐに、潜在的な攻撃者によるプローブが行われていたのです。これは特に不可解でした。なぜなら、私たちはランダムなサブドメインを使用しており、それは推測不可能であるはずだったからです。
私たちのログは以下のようになっていました:
INFO: "GET /.git/config HTTP/1.1" 404 Not Found
INFO: "GET /.env HTTP/1.1" 404 Not Found
INFO: "GET /wp/v2/users/ HTTP/1.1" 404 Not Found
INFO: "GET /.vscode/sftp.json HTTP/1.1" 404 Not Found
ジェレミーは興味深い仮説を立てました。これらのサブドメインを知るべきは、私たちのサーバーと Let's Encrypt だけのはずなのに、Let's Encrypt の証明書発行プロセスのどこかに不意に URL が漏洩する要因があるのではないか、と。彼は ShellSage にこの理論を検証するよう依頼し、Let's Encrypt の証明書登録プロセスや潜在的な情報露出について尋ねました。
ShellSage は重要な詳細を確認しました。Let's Encrypt の証明書は、検索可能で自動化されたスキャンツールによって監視されている公開 Certificate Transparency (CT) ログ(例:https://crt.sh)に記録されるという事実です。この検証により、ジェレミーは解決策を考案することができました。それは個別のサブドメイン証明書ではなくワイルドカード証明書を使用するというものであり、ShellSage による確認でこれが情報漏洩を防ぐことが確実視されました。
この対話は ShellSage の特別さを示しています。これは AI が問題を代わりに解決するものではなく、人間の直感や問題解決能力を補完するものです。ジェレミーの経験が仮説を生み出し、ShellSage の知識が理論を検証し、解決策の実現可能性を確認しました。それぞれの強みを発揮して協力するこの種の人間と AI の協働こそが、Answer.AI で目指している姿です。
このギストでは同様の対話を再現し、このような共同問題解決がどのように機能するかを示しました。
ShellSage の仕組み
ShellSage の核心は驚くほどシンプルです。実際、初期バージョンのコード行数は 80 行未満で、その大半はシステムプロンプト(system prompt)であり、これが ShellSage の人格や動作を定義しています。現在でも約 150 行程度ですが、依然として主にシステムプロンプトと、一部自動生成されたコードおよびコメントで構成されています。このシンプルさは、焦点を絞った設計哲学によるものです。AI に何でもさせようと試みるのではなく、現実世界の課題に対して効果的な人間と AI の協働を可能にするツールを作成しました。
このシンプルなツールがこれほど効果的である理由となる主要なコンポーネントを見てみましょう:
tmux の力
ShellSage の文脈認識機能の秘密の鍵は、多くの開発者がすでにターミナルセッション管理に使用しているターミナルマルチプレクサ(terminal multiplexer)である tmux です。具体的には、tmux の capture-pane 機能を活用しています。これにより、ターミナルに表示されている内容だけでなく、スクロール履歴も取得できます。つまり ShellSage は以下を見ることができます:
最近実行したコマンド
その出力結果およびエラーメッセージ
現在のターミナルセッションの状態
適切に設定されていれば、テキストエディタの内容さえも
tmux とのこの深い統合こそが、真の人と AI の協働を可能にします。エラーメッセージをコピー&ペーストしたり、自分が何をやろうとしているかを説明する必要はなく、あなたと ShellSage が同じコンテキストにアクセスできるため、より自然で効果的な問題解決が可能になります。
文脈を通じた指導
従来のコマンド生成ツールや AI アシスタントとは異なり、ShellSage は単に指示するのではなく、教えるために設計されています。コマンドについて質問すると、以下のような回答が得られます:
そのコマンドが何をするのかの説明
特定のフラグやオプションが使用されている理由
異なるユースケースにおける一般的なバリエーション
現在のコンテキストに基づいた実際の例
このアプローチは、人間と AI が互いから学習するフィードバックループを生み出します。あなたはコマンドを試してエラーに遭遇し、ShellSage と共に何が間違っていたのか、そしてどう修正すべきかを理解します。このような反復的な協働学習こそが、人と AI の相互作用の未来であると私たちは信じています。
ShellSage の実装におけるシンプルさは、ターミナルで人間がより良く作業できるよう支援するという特定のニーズに焦点を当て、自動化ではなく協働のために設計されたことに由来しています。人間と AI の間でコンテキストを共有することで、人間の能力を代替するのではなく強化するツールを作成しました。これは Answer.AI での私たちの哲学と完全に一致しています:最良のツールとは、あなたに代わって作業を行うものではなく、あなたがより良く作業できるよう支援するものです。
ShellSage は誰向けか?
経験豊富な開発者であっても、コマンドラインツールに苦戦することが occasionally あります。そこで ShellSage を構築しました。これは、初めてのコマンドを学ぶ場合でも複雑なシステム管理タスクを処理する場合でも、初心者から経験豊富な開発者までがターミナルでより効果的に作業できるよう支援するためです。
初心者の方向け
もしあなたがコマンドラインでの旅を始めたばかりなら、ShellSage は忍耐強い教師として機能します。マニュアルページを投げつけたり、盲目的にコピー&ペーストするよう命令を与えたりするのではなく、文脈の中で概念を説明します。コマンドについて質問すると、何を入力すべきかだけでなく、なぜそれを入力するのかも理解できるようになります。
経験豊富な開発者の方向け
ターミナルを数年間使用していても、ShellSage は以下の点で価値があります:
- 頻繁には使わないコマンドの構文をすばやく思い出す
- 複雑なシナリオにおけるシステム動作を理解する
- 即座に文脈を意識しながら問題をデバッグする
- システム管理タスクのためのベストプラクティスを学ぶ

ShellSage が nginx の問題診断を支援している様子
目標はあなたの知識や経験を置き換えることではなく、それを補強することです。ShellSage を、初めてのコマンドを学んでいる場合でも複雑なシステムの問題をデバッグしている場合でも、いつでも助けを準備している知識豊富な同僚だと考えてください。
始め方
ShellSage の使い始めは簡単です。まず、pip を使用してインストールしてください:
pip install shell_sage
ShellSage は、その強力さを支えるターミナルの文脈認識機能を提供する tmux とともに最もよく動作します。すでに tmux を使用していない場合は、まずインストールすることをお勧めします(apt、brew、yum などのほとんどのパッケージマネージャーから入手可能です)。
最高の体験を得るためには、終了後もコンテンツが表示されたままになるようにターミナルエディタを設定することを推奨します。vim ユーザーの場合は、.vimrc に以下の行を追加してください:
echo "set t_ti= t_te=" >> ~/.vimrc
次に、Anthropic API キーを取得し、環境変数として設定する必要があります:
export ANTHROPIC_API_KEY=sk...
インストールが完了したら、すぐに ShellSage の使用を開始できます:
ssage "How do I compress this directory?" # 二重引用符は任意です
tmux を使用していない場合でも、--NH フラグを指定して ShellSage を利用することは可能ですが、文脈認識機能の一部を利用できなくなります:

ShellSage による rsync 構文の説明
zsh ユーザーへのひとこと注意:zsh の疑問符の扱い方により、疑問符を含むクエリは引用符で囲む必要があります。
今後の展望
ShellSage はまだ初期段階にあり、コミュニティがどのように活用するかを楽しみにしています。すでにチームの日常業務において非常に貴重な存在となっていますが、さらなる成長と改善の可能性を多く見ています。
特に興味を持っている分野の一つは、ターミナル統合オプションの拡大です。現在、tmux に焦点を当てていますが、多くの開発者が Wezterm などの異なるターミナルエミュレータを使用していることも承知しています。Wezterm は、ターミナルコンテキストのキャプチャにおいて類似した機能を提供します。これらの代替手段をサポートすることで、ShellSage をより広範なユーザー層にアクセスしやすくできるでしょう。
しかし、それ以上に重要なのは、ShellSage がより大きなものを象徴している点です。これは、効果的な人間と AI の協働を可能にするツールを作成するという Answer.AI の広範な使命の一部なのです。現在、私たちは「How to Solve It with Code」コースの最初の 1,000 人の学生に対してこれらの原則を教えており、コンテキストを共有し互いの強みを活かすことで、人間と AI がどのように最も効果的に協働できるかを探索しています。
AI の未来は人間の知能を置き換えることではなく、それを補完することにあります。Answer.AI では、この哲学を実践するツールを開発しており、人間と AI がより効果的に協働できるよう支援する、シンプルながら強力なソリューションを生み出しています。ShellSage はこのアプローチの一例に過ぎず、コミュニティがどのようにしてこれをさらに進化させるかを見ることを楽しみにしています。
貢献に興味がある場合や改善のためのアイデアをお持ちの場合は、GitHub リポジトリをご覧ください。コマンドラインでの冒険において ShellSage をより役立つものにする方法や、人間と AI の協働の未来をよりよく支援する方法について、皆様の意見を聞きたいと考えています。
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み