Neovim Telescope にインスパイアされたスタンドアローンの TUI ファジーファインダー。 エディタに依存せず、ターミナルから単体で動作する。
fdまたはrg --filesの出力をソースとしてファイル一覧を取得- キー入力に応じたファジーフィルタリング
- 選択したファイルを
$EDITORで開いて終了
rg --jsonをデバウンス付きで実行- ファイル名一覧を表示
- 選択で
$EDITOR +行番号 ファイルを起動
- 右ペインにファイル内容をプレビュー表示(シンタックスハイライト付き)
- Grep モードではヒット行をプレビュー中央に配置
- マッチ単語のみをハイライト(シンタックスハイライトの色を保持)
| キー | 動作 |
|---|---|
| 文字入力 | フィルタリング / 検索パターン |
↑ / Ctrl+P |
カーソル上移動 |
↓ / Ctrl+N |
カーソル下移動 |
Tab |
Finder ↔ Grep モード切替 |
Enter |
選択アイテムを $EDITOR で開く |
Esc / Ctrl+C |
終了 |
| カテゴリ | 選定 |
|---|---|
| 言語 | Go |
| TUI フレームワーク | charmbracelet/bubbletea (Elm Architecture) |
| レイアウト・スタイリング | charmbracelet/lipgloss |
| UI コンポーネント | charmbracelet/bubbles (textinput) |
| 用途 | ライブラリ |
|---|---|
| ファジーマッチ | sahilm/fuzzy |
| シンタックスハイライト | alecthomas/chroma |
- ripgrep (rg) — grep ソース、ファイル一覧のフォールバック
- fd — ファイル一覧のソース
Bubbletea の Elm Architecture に従い、親 Model が Pane インターフェースを通じて Finder / Grep の2モードを統一的に扱う。
paneMsgインターフェースで Msg の宛先ペインを自動ルーティング- プレビュー読み込みは
tea.Cmdによる非同期 I/O - 各ペインの
Update()戻り値を正しく反映する Elm Architecture 準拠の設計
詳細は docs/architecture.md を参照。
TDD ベースで開発し、以下の形式を組み合わせる。
| 対象 | 手法 | パッケージ |
|---|---|---|
| ファジーマッチ、rg パーサー | Table-Driven + Fuzz | finder, grep |
| Model 状態遷移 | Msg → Model 検証 | ui |
| View() 出力 | Golden Test (teatest) | ui |
| リファクタリング安全網 | Scenario Test (Msg 駆動) | ui |
| panic 検出 | Fuzz Test (ランダム Msg 列) | ui |
| fd/rg 実行を伴うテスト | Integration Test | finder, grep |
go test ./... # 全ユニットテスト
go test -tags=integration ./... # integration 含む
go test ./internal/ui -fuzz FuzzModelUpdateView -fuzztime 10s # UI fuzz
go test ./internal/ui -update # ゴールデンファイル更新Claude Code (Claude Opus) による Agent Coding で開発。