shell-integration について
Unix シェルを拡張または操作するツールを作る開発者向けのリファレンススキルです。Zsh、Bash、Fish の補完、フック、キー割り当て、端末制御、プラグイン配布を扱います。
主な機能
- 01Zsh、Bash、Fish の補完
- 02プロンプトフックとイベントハンドラー
- 03ZLE ウィジェットとキー割り当て
- 04端末とプロセスの制御
- 05プラグインのインストールパターン
活用シーン
- 01CLI ツールに補完を追加
- 02シェルプラグインやプロンプトを構築
- 03ターミナル UI を作成
- 04シェル間のスクリプト互換性を確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill shell-integrationインストール後、Claude Code で/shell-integrationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/bash-integration.mdfish-integration.mdplugin-distribution.mdposix-scripting.mdterminal-control.mdzsh-integration.md詳細
シェル統合
概要
シェル統合では、Unix シェルを拡張したり、シェルと連携したりするツールを構築するための API とパターンを扱います。これには、Zsh、Bash、Fish における補完システム、プロンプトフック、キー割り当て、ターミナル制御、プラグインの配布が含まれます。
使用する場面: CLI ツールの補完、シェルプラグイン、プロンプトのカスタマイズ、ターミナル UI、ドットファイルマネージャー、インストールスクリプト、ネイティブバイナリのラッパーを構築する場合。
使用しない場面: シェル拡張に関係のない汎用スクリプト(単体スクリプトには POSIX スクリプティングのリファレンスを使用してください)、GUI アプリケーション、Web サーバーの開発。
クイックリファレンス
| パターン | シェル | 主なポイント |
|---|---|---|
| 補完関数 | Zsh | マッチャーの設定には compdef、compadd、zstyle を使用します |
| 補完関数 | Bash | complete、compgen、COMP_WORDS、COMP_CWORD、COMPREPLY |
| 補完関数 | Fish | complete -c cmd -a args、条件フラグ、サブコマンドのパターン |
| ZLE ウィジェット | Zsh | zle -N widget func、キーの割り当てには bindkey を使用します |
| プロンプトフック | Zsh | add-zsh-hook を使った precmd、preexec、chpwd |
| プロンプトフック | Bash | PROMPT_COMMAND(文字列、または Bash 5.1 以降では配列) |
| イベントハンドラー | Fish | --on-event、--on-variable、--on-signal |
| 略語 | Fish | abbr -a name expansion、動的な略語には --function |
| パラメーター展開 | Zsh | ${(s.:.)var}、${var:=default}、フラグと修飾子 |
| ターミナル制御 | すべて | ANSI/CSI エスケープシーケンス、tput、stty |
| シグナル処理 | すべて | 組み込みの trap、クリーンアップのパターン、EXIT/INT/TERM |
| プロセス管理 | すべて | ジョブ制御(&、wait、bg、fg)、サブシェル、コプロセス |
| プラグインのインストール | すべて | 読み込み方式、バージョン検出、ZDOTDIR の読み込み順序 |
よくある間違い
| 間違い | 正しいパターン |
|---|---|
互換性が必要な場面でエスケープシーケンスに echo -e を使う | シェルや OS 間の互換性のために printf または tput を使用します |
Bash で = を使って PROMPT_COMMAND を変更する | 他のツールの設定を上書きしないよう、+= で追加します |
| 遅延読み込みされる関数内で Fish のイベントハンドラーを定義する | イベントハンドラーを config.fish に記述するか、明示的に読み込みます |
| ターミナル機能をハードコードする | TERM と terminfo を考慮する tput で照会します |
Zsh 関数で emulate -L zsh を指定し忘れる | 呼び出し元の環境を汚染しないよう、常にローカルオプションを設定します |
COMP_WORDS ではなく $COMP_LINE の分割を使う | 単語を確実に抽出するには COMP_WORDS[$COMP_CWORD] を使用します |
ラッパースクリプトで $@ を引用符で囲まない | 引数の境界を保つため、常に "$@" を使用します |
/bin/sh が Bash だと思い込む | 移植可能なスクリプトでは POSIX sh を対象にし、dash でテストします |
POSIX スクリプトで function キーワードを使う | POSIX 互換性のために name() { ... } 構文を使用します |
クリーンアップ用の EXIT トラップを無視する | 一時ファイルと状態を処理するため、常に trap cleanup EXIT を設定します |
委任
- 完了テスト:
Exploreエージェントを使って、対話的に補完を検証します - スクリプトレビュー:
Taskエージェントを使って、シェル間の互換性を監査します - コードレビュー:
code-reviewerエージェントに委任します
rustスキルが利用できる場合は、ネイティブバイナリのコンパイルパターンを委任してください。パフォーマンスが重要な処理では、シェルラッパーが Rust でコンパイルされたバイナリを呼び出すことがよくあります。cli-power-toolsスキルが利用できる場合は、最新の CLI ユーティリティの使用パターンを委任してください。多くのシェルプラグインは、fd、ripgrep、fzfなどのツールをラップしています。
参考資料
コメント
Markdown 対応