Snacks.nvimのpickerでソートして開く方法――SpecDDファイルがすぐ開ける
仕様書駆動開発(Spec Driven Development)中、「さっき作った仕様書ファイルを開きたい」というケースがよくあります。これに対応するキーマップを設定したので解説します。
筆者はFuzzy Finderプラグインとしてsnacks.nvimのpickerを使っているため、pickerでの設定例です。
※snacks.nvimのpickerの紹介・解説は別の記事爆速Fuzzy FinderプラグインSnacks.pickerの使い方をご覧ください。
## やりたいこと
普段は「Git管理下のファイル一覧」をpickerで開いています。これとは別に、「AI用に作ったディレクトリの配下のファイルを最新順で開くpickerのキーマップ」を設定します。
### 筆者のAI用ディレクトリ構成
参考までに、筆者のAI用ディレクトリ.myworkの構成も書いておきます。
.mywork|-- changes # 作業中のやつ| `-- 2025-01-30-xxxx-xxxxxxxx-checker| |-- design.md| |-- requirements.md| `-- tasks.md|-- specs # 作成済み| `-- 2026-01-28-rfc9457-error-response| |-- design.md| |-- requirements.md| `-- tasks.md|-- tmp # 一時的なやつ| `-- redmine.md`-- work-logs # 調査記録とか |-- 2025-10-14-deploy-502-error-investigation.md `-- 2026-01-21-xxxxxxxxxxxxxxxxxxxxx-bug.md.myworkディレクトリは全ワークツリー共通にしてます。
SpecDDで今開発中のやつはchangesに置いてます。こうすると 並行している作業数が分かりやすい ですし、ファイル数が限られるので ファイルも探しやすい です。
## 設定
transformして更新日をアイテムに突っ込み、sortに指定してます。
picker.pick({ source = "files", args = { ".", ".mywork" }, transform = function(item) item.mtime = vim.fn.getftime(item.file) end, sort = { fields = { "mtime:desc", "file" } }, matcher = { sort_empty = true },})ソートされた状態でピッカーが開いてほしかったので、sort_empty = trueも指定しました。
### lazy.nvimでの設定
lazy.nvimではkeysに書いてキーマップを設定しつつ、遅延読み込み指定してます。
keys = { -- ...他のキーマップ { "<space>fs", function() picker.pick({ source = "files", args = { ".", ".mywork" }, transform = function(item) item.mtime = vim.fn.getftime(item.file) end, sort = { fields = { "mtime:desc", "file" } }, matcher = { sort_empty = true }, }) end, desc = "Picker files: .mywork(更新順)", }, },以上、仕様書駆動開発でよく使っているキーマップの紹介でした。