[[🦉JINRAI]]のプランメモ。 > [!left-bubble] ![[chappy.webp]] [[Codex CLI]] x [[GPT-5.3-Codex]] のプランです。 ## Jinrai を Spoon専用配布へ再編する計画 ### 概要 jinrai を dofile 前提のスクリプト構成から、hs.loadSpoon("Jinrai") で読み込む Spoon 構成へ移行する。 配布物は Jinrai.spoon.zip を正式形式とし、開発時はリポジトリ内 .spoon を直接参照して、現行同等の高速リロード体験を維持する。 ### Spoon配布の要点(説明) - Spoon は Name.spoon/init.lua を基本単位とする Lua プラグイン形式。 - 利用者は ~/.hammerspoon/Spoons/Name.spoon に配置し、hs.loadSpoon("Name") でロードする。 - 配布は通常 .zip(例: Jinrai.spoon.zip)。 - 開発時は zip 不要で、package.path 追加またはシンボリックリンクでリポジトリ直読みできる。 - 参考仕様: Hammerspoon SPOONS.md(公式) ### 実装方針(Spoon専用) 1. ディレクトリ再編 - ルートに Jinrai.spoon/ を作成。 - 既存 Lua モジュールを Jinrai.spoon/ 配下へ移設: - init.lua - focus_border.lua - window_hints.lua - focus_back.lua - focus_history.lua - アセット jinrai.svg も Jinrai.spoon/ へ移動(必要なら assets/ サブディレクトリ化)。 2. ロード方式の Spoon 準拠化 - debug.getinfo ベースの相対解決を廃止。 - 追加コード/リソース読み込みは hs.spoons.resourcePath(...) + dofile(...) に統一。 - focus_back.lua からの focus_history.lua 読み込みも同方式へ変更。 3. 公開APIの再定義(Spoon専用) - spoon.Jinrai:setup(config) を主APIとして維持(既存 setup 利用者の移行コスト最小化)。 - spoon.Jinrai:teardown() を明示公開。 - name/version/author/license/homepage のメタデータを init.lua に追加。 - start/stop/bindHotkeys は今回は追加しない(現行機能は setup で十分なため)。 4. ドキュメント更新 - README.md / README.ja.md の導入手順を全面更新: - 旧: dofile("/path/to/jinrai/init.lua") - 新: hs.loadSpoon("Jinrai") + spoon.Jinrai:setup({...}) - 開発者向けに「開発時の即時確認フロー」を明記: - ~/.hammerspoon/Spoons/Jinrai.spoon をリポジトリへ symlink - または package.path 追加で repo 直読み - 配布手順として Jinrai.spoon.zip の作り方を記載。 5. 配布オペレーション整備 - scripts/package-spoon.sh を追加し、Jinrai.spoon.zip を再現可能に生成。 - .github/workflows/ に release 用 workflow を追加: - タグ push で zip 生成 - GitHub Release へ asset 添付 - CI は既存 busted を維持し、必要に応じてテスト対象パスのみ更新。 ### 変更対象ファイル(予定) - init.lua 相当を Jinrai.spoon/init.lua へ移行 - focus_back.lua ほか4モジュールを Jinrai.spoon/ へ移行 - README.md - README.ja.md - .github/workflows/ci.yml(必要最小限) - 新規: scripts/package-spoon.sh - 新規: .github/workflows/release.yml ### テストケース 1. 既存ユニットテスト - busted - busted spec/focus_back_spec.lua - busted spec/init_spec.lua 2. Spoonロード検証(回帰防止) - hs.loadSpoon("Jinrai") でロード成功。 - spoon.Jinrai:setup({ focus_border = {}, window_hints = {}, focus_back = {} }) で従来同等動作。 - spoon.Jinrai:teardown() が teardown 順序要件を満たす。 3. 開発フロー検証 - symlink 運用で Hammerspoon Reload Config 後に変更反映される。 - zip 配布物を展開しても同一APIで動作。 4. 配布物検証 - Jinrai.spoon.zip 内に Jinrai.spoon/init.lua と必要ファイルが揃う。 - 余計なファイル(spec 等)が含まれない。 ### 受け入れ基準 - README の初期導入手順に dofile が残っていない。 - 初期導入は hs.loadSpoon("Jinrai") 前提で完結。 - 開発時に repo 直参照で反復確認できる手順が README に明記されている。 - CI が通り、リリースで Jinrai.spoon.zip を生成可能。 ### 前提・デフォルト - 配布導線は GitHub Releases をデフォルト採用。 - Spoon名は Jinrai(TitleCase)を採用。 - API は setup/teardown 継続をデフォルト採用(start/stop/bindHotkeys は非導入)。 - 既存 dofile 方式との互換レイヤーは作らない(Spoon専用方針)。