Pasty v0.9.9-beta
Pasty v0.9.9-beta — 軽量化と構造最適化、業界 No.1 設計思想
7 軸の全方位監査 (critical path / hot path / re-render / leak / DB / concurrency / industry benchmark) を経て、表面ではなく構造レベルで仕立て直したリリースです。Raycast / Linear / Apple Store の "売れる仕組み" を Pasty に翻訳しました。
⚡ 軽量化
- SQLite 同時性チューニング: WAL ジャーナル +
synchronous = NORMAL+ 16MB cache + 32MB mmap を全 DB 起動に適用。検索とインサートの両方が体感で速くなります。 - 無駄な再描画を排除:
ClipStore.recentを実差分があるときだけ publish するよう変更。アイドル状態での SwiftUI 再評価を抑制しました。 - メニューバービューのメモ化: 上位 10 件スライスをキャッシュ。クリップボード polling のたびに新しい配列を生成していたのを停止。
- FTS5 ランキング: 検索結果は BM25 で関連度順にソート (タイブレーカーが
createdAt DESC)。"今コピーしたあの URL" が最上位に来ます。
🎯 ストレスゼロ UX
- キーボードでフォルダ並び替え: ⌥↑ / ⌥↓ で 1 つずつ、⌥⇧↑ / ⌥⇧↓ で先頭 / 末尾へ。マウス不要。
⌘?ヘルプ表にも追記。 - トースト消滅タイマーの統一:
DispatchWorkItem由来の旧式タイマーを構造化並行 (Task+Task.sleep) に置き換え。キャンセル挙動が予測可能に。 searchPage(query:afterID:limit:): 履歴ビュー / アーカイブ拡張に向けたカーソルベースのページネーション API を追加。ユーザー向けの直接効果は次リリース以降。
🔩 リファクタ
- 並行モデルの統一:
DispatchQueue.main.asyncAfterを 4 箇所削除し、Task { @MainActor in try? await Task.sleep(...) }に置換 (PastyAppStage 2、PasteToastauto-dismiss、TemplateFieldDialogfocus latch ほか)。 PerfLog.log(_:)追加: 自由文の perf 計測ポイントを少ないコストで埋められるよう拡張。- DB メンテナンス自動化: 週 1 回
ANALYZE、月 1 回PRAGMA incremental_vacuum(5000)をバックグラウンドで実行。 - Soft-delete 密度ログ:
PerfLog.enabledのときだけ tombstone 比率を出力。GC 遅延の早期検知に使えます。
🏆 業界 No.1 設計思想
- Raycast / Linear: "every action keyboard-reachable" を満たすため、これまでマウス専用だったフォルダ並び替えを ⌥+方向キーで到達可能にしました。
- Linear (motion design tokens): 既存
DesignTokens.swiftのsnappy(response 0.35 / damping 0.85) を引き続き活用。次リリースでキャプチャ瞬間の "祝祭" アニメーションへ拡張予定です。 - McDonald's (operational reproducibility): 7 軸監査と PRAGMA チューニングで、コピー → ストリップ → ペーストのレイテンシを構造的に予測可能にしました。
- Stripe (fail-loud-but-recoverable): DB メンテナンス失敗時はサイレントに記録し、次起動でリトライ。ユーザー操作を阻害しません。
リリース詳細: https://github.com/IvyGain/Pasty/releases/tag/v0.9.9-beta
GitHub Releases で詳細を見る ↗