Skip to content

feat(doctor): doctor --fix で Nerd Font をダウンロード導入#409

Merged
kkyosuke merged 1 commit into
mainfrom
font
Jun 27, 2026
Merged

feat(doctor): doctor --fix で Nerd Font をダウンロード導入#409
kkyosuke merged 1 commit into
mainfrom
font

Conversation

@kkyosuke

Copy link
Copy Markdown
Owner

目的

usagi の TUI は git ライフサイクルや issue グラフのグリフ描画に Nerd Font を使う(未導入時は色付きの語にフォールバック)が、これまで Nerd Font が入っているかの診断も、導入する手段も 無かった。usagi doctor --fix でフォントをダウンロード・導入できるようにする。

変更内容

  • usecase/font.rs(新規)
    • nerd_font_installed() — OS ごとのユーザフォントディレクトリ(macOS: ~/Library/Fonts、Linux: ~/.local/share/fonts / ~/.fonts)を走査して Nerd Font の有無を判定。
    • ensure() — 未導入なら Nerd Fonts の GitHub リリース(latest)から JetBrainsMono を curl で取得 → unzip.ttf/.otf を展開 → Linux では fc-cache でキャッシュ更新。導入済みなら再ダウンロードしない(冪等)。
    • ネットワーク IO は既存方針どおり CommandRunner 経由で実行し、HTTP クレートは追加しない。
  • usecase/doctor/mod.rsdiagnosenerd font チェックを追加。任意機能のため warn 扱い(未導入でも doctor は正常終了)。
  • presentation/cli/doctor.rs--fixfont::ensure を呼ぶよう配線。run を注入可能なコア doctor_lines と実 IO 束ねに分離し、run 経由のテストが実ダウンロードを起こさないようにした。render_font_fix で各ステップ・エラーを整形。
  • ドキュメントdocument/03-commands/01-cli.mddoctor 表・節を更新。

パッケージマネージャ経由のインストールではないため、ollama(ローカル LLM)と同じく汎用の不足ツール修復(fix_missing)とは別フローで処理する。

テスト・確認方法

  • cargo fmt --check / cargo clippy --all-targets -- -D warnings / cargo test(2043 件パス)
  • カバレッジ lines / functions = 100% を維持
  • 動作例:
    $ usagi doctor
    nerd font      warn  (no Nerd Font found; run `usagi doctor --fix` to install one)
    
    $ usagi doctor --fix
    installed the JetBrainsMono Nerd Font into /Users/you/Library/Fonts
    

🤖 Generated with Claude Code

usagi の TUI は git ライフサイクルや issue グラフのグリフ描画に Nerd Font を
使うが、未導入かどうかの診断も導入手段も無かった。`doctor` に `nerd font`
チェック(任意機能なので warn 扱い)を追加し、`--fix` で Nerd Fonts の GitHub
リリースから JetBrainsMono を curl 取得・unzip 展開して導入する。

パッケージマネージャ経由ではないため、ollama と同じく汎用の不足ツール修復とは
別フローで処理する。ネットワーク IO は既存方針どおり CommandRunner 経由で行い、
HTTP クレートは追加しない。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📊 Test Coverage

🚀 いまのカバレッジ (Lines): 100.00% — この調子でいこう!

🎉✨ パーフェクト!全ファイル Lines カバレッジ 100% を達成しました 🏆🐰

@kkyosuke kkyosuke merged commit 4b426b9 into main Jun 27, 2026
4 checks passed
@kkyosuke kkyosuke deleted the font branch June 27, 2026 04:18
@kkyosuke kkyosuke mentioned this pull request Jun 27, 2026
kkyosuke added a commit that referenced this pull request Jun 27, 2026
## 目的

`usagi` の **v1.4.0** をリリースする。`Cargo.toml` の `version` を `1.3.0` →
`1.4.0` に上げ、マージ後に `auto-release.yml` が `v1.4.0` タグと GitHub Release
を自動生成する。

## 変更内容

- `Cargo.toml` / `Cargo.lock` の version を `1.4.0` に更新(version のみ)。

### v1.3.0 以降の主な変更(マージ済み)

TUI / セッション周りの機能追加・改善が中心。

- **TUI 機能追加**
  - セッション一覧の種別ドットを鮮度(heat)ドットに転用 (#412)
  - 没入モードのキー方式を設定で切替可能に(Ctrl-O prefix / Alt)(#411)
  - サイドメニューにメモ・更新時刻・ahead/behind を表示 (#410)
  - サイドバーのうさぎを操作に反応させる (#408) / 終了時のエンゲージメント段階を復帰 (#368)
  - issue graph / gantt をフルサイズのモーダルで表示 (#403) / graph に状態グリフ表示 (#404)
  - セッション削除モーダルを overlay 表示に (#405)
  - preview のコードブロックを syntect でハイライト (#391)
  - サイドバーに既定ブランチとの差分バッジ +N -M を表示 (#389)
  - `?` でキーバインドのチートシートを表示 (#393) / man ヘルプを大きいモーダルで表示 (#374)
  - 入力待ち(◆)セッションを先頭へ寄せる並び替えトグル(s) (#390) / 切替モードで K/J による並び替え (#372)
- **セッション / エージェント**
  - セッションのブランチを `usagi/<name>` に名前空間化 (#407)
  - 起動した Agent をセッション worktree に閉じ込める (#392)
- **doctor**
  - `doctor --fix` で Nerd Font をダウンロード導入 (#409)
- **バグ修正 / 安全性**
  - 依存ツリーの非有界再帰でスタックオーバーフローを防ぐ (#400)
  - JSON-RPC id 欠落・入力契約の不一致を修正 (#399)
  - ollama 出力の read エラー伝播とデッドロック回避 (#398)
  - リソースリーク・非有界入力を塞ぐ (#397) / 進捗計算をオーバーフロー安全に (#362)
  - ログ追記の原子化・config 編集での設定喪失防止 (#396) / 並行更新のロストをストアロックで防止 (#394)
  - 破壊的な worktree 削除と孤立ブランチを安全化 (#395)
- **パフォーマンス / リファクタ**
  - 端末ペインのメモリと多数セッション時の描画負荷を削減 (#402) ほか perf 改善 (#401, #388, #382)
  - TUI モジュール構成の整理・カバレッジ対象の整理など複数のリファクタ

## テスト・確認方法

- `cargo fmt` / `cargo clippy --all-targets -- -D warnings` / `cargo
test`(pre-push フックで clippy・test がパス済み)。
- マージ後、`auto-release.yml` が version 変更を検知し `release.yml` を起動 → 4
プラットフォームのバイナリビルドと `v1.4.0` Release が自動生成されることを確認する。

Co-authored-by: test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant