## 概要
- [[Hammerspoon]]から[[Swift]]に移行する
- 目的
- ユーザーの導入ハードルを下げる
- パフォーマンスの向上
- 機能向上
- 経緯
- [[Claude Fable 5]]が 7/7 まで使えるのでやってみた
## 機能追加
### [[Window Hints (JINRAI)|Window Hints]]
- [x] アクティブウィンドウをspotlightする
- [x] ボーダーにradiusをもたせる
- [-] ワークスペース移動のアニメーションを0にできるか?
- 正攻法では(非公開API含めても)厳しいとのことなので断念
- [x] 背面ウィンドウのレイアウト改善
- [x] スペース番号表示を右上に三角形の襷のようなUIにする
### [[Area Hints]]
- [x] フルスクリーン対応
- [x] Window Hintsのようにspotlight/アクティブボーダーを表示する
- [x] 接続されているディスプレイ数で定義を変更する仕組み
- [x] default設定が複数ディスプレイに適応されるとき、数字のprefixをつけて衝突しないようにする
### 設定
- [x] 補完/Lint機能 ([[JSON Schema]]対応)
- [x] デフォルト設定の再考
## 構成変更
- [x] 設定のcamelCase化
- [x] 設定項目の最適化
## 不具合対応
### [[Window Hints (JINRAI)|Window Hints]]
- [x] Window Hintsよりborderが前面に表示される
- [x] 背面ウィンドウのHintの上にアクティブウィンドウのHintが重なってしまい見えなくなることがある
- [x] [[📌Jinrai nativeでマルチワークスペースに対応する]]
- [x] 縦長ディスプレイでプレビューヒントのサイズが不自然に横長になる
- [x] 別スペースの不可視ウィンドウが表示される
- [x] 最大化したウィンドウが候補に表示されない
### [[Application Hints (JINRAI)|Application Hints]]
- [x] Application Hintsで2文字以上の場合に1文字入力してもグレーアウトにならない
- [x] 起動中Obsidianがある状態でApplication Hintsで別Vaultを開くと、起動中のVaultが一瞬アクティブになる
### [[JINRAIモード]]
- [x] Window Hintsでアクティブウィンドウのディスプレイと別のディスプレイのウィンドウヒントをキーで選択したとき、ロゴ・コンボ・キャラクターが新しくアクティブになったウィンドウ側に移動しない
- [x] Window Hintsでヒントのキー以外で移動したとき (上下左右 や 直近のウィンドウ) に終了してしまう
- [x] Combo数と "Combo" の文字が下揃えになっていない
- [x] JINRAIモードでApplication Hintsを開くといきなりCombo数が1になる
- [x] JINRAIモードでArea Hintsからウィンドウサイズ/位置を変更したとき、その後に表示されるWindow HintsでCOMBO/キャラ/ロゴは変更後に追従するが、アクティブボーダーだけ追従しないことがある
- [x] JINRAIモードのCOMBOやキャラ、ロゴがWindow Hints、Area Hints、Application HIntsよりも前面に表示されてしまう
- [x] JINRAIモードでWindow Hintsを起動し、ヒントのキー以外で移動したとき (上下左右 や 直近のウィンドウ) に、その直後に起動されたArea Hintsでアクティブウィンドウにspotlightやボーダーが表示されない (直前のアクティブウィンドウ領域に表示される)
### 全体
- [x] Space と S のように本来重複していないキーが重複エラーになる
## 現行JINRAIを畳む
- [x] GitHubのリポジトリ名をリネーム
- [x] [[Minerva]]のノートで[[🦉JINRAI]]が2つの意味があることを記述
- [ ] `リリース後` GitHubのリポジトリ名をアーカイブ
## リリース準備
- [x] ロゴ
- [x] [[📜2026-07-05 JINRAIのmacOSアプリを作成する]]
- [x] [[📜2026-07-05 jinrai-spoonからJINRAI(native)にドキュメントをマイグレーション]]
## パフォーマンス
```
現実装のラグの大半はキャプチャ自体ではなく SCShareableContent の列挙(ウィンドウ一覧の取得、数十ms〜)です。ここは以下で大きく縮められます:
1. 列挙の先行実行: 現在は「ヒント構築完了後」にキャプチャを開始していますが、show() 冒頭(候補収集と並行)で開始すれば、ヒント表示時点にはほぼ画像が揃います
2. 前回画像のキャッシュ: windowID→最後に撮った画像を保持しておき、次回表示時はまず前回画像を即表示→新しい画像で上書き。2回目以降は体感ラグゼロになります(内容が古い瞬間が一瞬ある、というトレードオフ)
```