自作 Go ツールに導入したガードレール策

こんにちは。ジェダイパンくず🚀 です。 以前の記事 Go によるコマンド履歴・ファイル・Git ブランチ/Worktree/コミットを検索する Fish Plugin 開発 で紹介した fuzz.fish は、Fish shell のコマンド履歴・ファイル・Git ブランチなどをファジー検索する Fish plugin です。plugin ですが、検索と TUI の本体は Go で実装していて、Fish 側のスクリプト(conf.d/fuzz.fish)はキーバインドの登録と Go バイナリの呼び出しだけを担っています。このツールを自分で毎日使いながら一人で開発・運用しています。最近はコードの大半を Claude Code や opencode といった AI agent に書いてもらっていて、自分はレビューとマージが中心です。 この開発スタイルで一番気になっていたのは、LLM に何を意識させ続けられるかでした。具体的には次の 4 つです。 セキュリティ: シェルに文字列を渡して実行する箇所や、サプライチェーンに穴を開けないこと バグ混入: 既存の挙動を壊さないこと、テストを減らさないこと パフォーマンス: キー入力のたびに走るフィルタ処理を遅くしないこと 設計思想: パッケージの依存方向や Bubble Tea の Model / Update / View の分担を崩さないこと これらは CLAUDE.md に書いてあります。ただ、プロンプトに書いたルールは守られる保証がありませんし、一度守られても次の変更では忘れられます。チームであれば他のメンバーのレビューで拾えることも、一人だと自分が見落とした時点で main に入ってしまいます。 そこで「ルールは CLAUDE.md で宣言し、違反は linter と CI で機械的に落とす」という方針でガードレールを 17 件 issue 化して実装しました。この記事はその記録です。 方針: 宣言 → 可視化 → gate 化 ガードレールは次の 3 段階で考えました。 ...

2026-10-12 · 8 分 · jedipunkz

Open Source Tools by jedipunkz

Open source tools I have built and published on GitHub. gm https://github.com/jedipunkz/gm A ghq-style repository manager with a built-in fuzzy finder. Written in Rust. Keeps every clone in one host/user/repo tree. An existing ghq tree works as is. Press Ctrl-G, type, and hit Enter: the shell cds to the repository. Results are ranked by match quality, then by frecency (how often and how recently you opened it). From the finder you can also list a repository’s worktrees (Ctrl-W), branches (Ctrl-L) and pull requests (Ctrl-J). Picking a branch or pull request creates its worktree on demand. Slash commands such as /create, /remove, /expire, /dirty and /unpushed create or remove repositories and worktrees, and find uncommitted or unpushed work, without leaving the finder. Sub commands (gm get, gm list, gm status, gm wt create, gm migrate, …) cover the same operations from scripts. brew install jedipunkz/gm/gm Related post (in Japanese): ghq の気になる点を改善した Rust 製ツール開発 ...

2026-10-11 · 4 分 · jedipunkz

Go によるコマンド履歴・ファイル・Git ブランチ/Worktree/コミットを検索する Fish Plugin 開発

jedipunkz です。 今回は自作した Fish シェルの Plugin である fuzz.fish を紹介します。 fuzz.fish は Fish Shell の コマンド履歴・ファイル・Git ブランチ・Git Worktree・Git コミット をインクリメンタルサーチできる Fish Plugin です。Go と Bubble Tea で TUI を実装していて、fzf や fd、ripgrep、bat といった外部ツールは一切不要です。プラグイン本体と単一の Go バイナリだけで動きます。 リンク ソースコード: https://github.com/jedipunkz/fuzz.fish 公式サイト: https://jedipunkz.rocks/fuzz.fish/ スクリーンショット コマンド履歴・ファイル・Git ブランチ検索を切り替えている様子です。 開発動機 幾つか小さなツールはこれまでも作ってきましたが、利用する機会が減るとメンテナンスも怠りがちなことに気が付き、自分自身がよく使うツールを作ろうと思ったのがきっかけです。そして普段から Fish をシェルとして使っていますが、コマンド履歴検索や Git ブランチの切り替えをより効率的に出来れば何より自分にとって便利なツールになる予感がありました。 主な機能 外部ツールが不要。fzf / fd / ripgrep / bat をインストールしなくても、プラグインと Go バイナリだけで完結する キーバインドは ctrl+r の 1 つ。起動後は ctrl+s ctrl+w ctrl+g ctrl+x で閉じずにモードを切り替えられる 全モードにプレビューがある。履歴は実行時刻・ディレクトリ・前後のコマンド、ファイルはシンタックスハイライト付きの中身、Git 系はそれぞれの文脈を表示する 履歴は frecency で並ぶ。マッチ品質を最優先にした上で、log1p(頻度) を最終実行時刻で減衰させるため、実際によく叩くコマンドが上に来る Git はブランチだけでなく Worktree とコミットも扱える。コミット検索はハッシュと件名の両方にマッチし、git show / git diff / git revert / git cherry-pick をプロンプトに置く(実行はしない) インストール方法 必要なのは Fish Shell 3.0+ のみです。Fisher を使ってインストールします。 ...

2026-01-17 · 2 分 · jedipunkz