par_TUI - アップデートを簡単なものに
Arch Linux のアップデートを視覚的に管理するための、Ratatui 製 TUI ツールです。
通常、Arch Linux では pacman コマンドでシステムを更新しますが、par_tui はこのプロセスを直感的に、かつ安全に制御することを目指しています。
GitHub: ry2x/par_tui
構築の背景と動機
Arch Linux における sudo pacman -Syu は、ローリングリリースの恩恵を最大化し、システムを最新かつ一貫した状態に保つための基本コマンドです。公式にはこれ以外の手法での更新は推奨されていません。
しかし、AUR (Arch User Repository) を利用している環境では、状況が少し複雑になります。paru や yay といった AUR ヘルパーを使用する場合、特定のパッケージ(開発版の -git パッケージや、ビルドに時間がかかる特定のソフトなど)を一時的にアップデートから除外したい場面が珍しくありません。
通常、これを行うには --ignore <package-name> フラグを手動で付与する必要がありますが、管理コストが高く、入力ミスも発生しやすくなります。
一方で、/etc/pacman.conf の IgnorePkg に恒久的に記述してしまう手法もあります。しかし、これは「除外していること自体を忘れてしまう」というリスクを孕んでおり、長期的にシステムの依存関係を壊す(部分的アップグレード状態の放置)原因になりかねません。
「今、何を除外しようとしているのか」を明確に可視化し、安全かつ柔軟に ignore を指定できるインターフェースが欲しい。 その思いが、このツールを作成した動機です。
技術スタック
- Rust: スタンドアロンで軽量なバイナリを提供するため採用。
- Ratatui: 描画処理を抽象化し、リッチな TUI 画面を効率的に構築するため採用。
クリーンアーキテクチャを実現する設計
このプロジェクトは、明確なスコープを持つ小規模なツールであることを活かし、徹底的な関心事の分離(SoC)を試行しました。
「ディレクトリ構造 = アーキテクチャ」の徹底
本プロジェクトでは、ディレクトリ構造そのものがアーキテクチャを定義するという制約を設けています。各レイヤーの依存関係は厳格に一方通行であり、これを破る実装は設計上の欠陥として排除しています。
| レイヤー | 責務 | 依存ルール |
|---|---|---|
| models/ | ドメインデータの定義(Package, Config など)。 | 他レイヤーへの依存禁止。 |
| io/ | 外部コマンド実行、ファイル読み書き、ターミナル制御。 | ビジネスロジックの記述禁止。 |
| parser/ | 生の文字列をモデルへ変換(checkupdates や paru の出力解析)。 | I/O や UI 処理の禁止。 |
| core/ | 更新プランの作成、依存関係の競合検知、フィルタリング。 | I/O や UI への直接参照禁止(副作用の排除)。 |
| ui/ | プレゼンテーション層。状態の描画と入力の受け取り。 | ビジネスルールの決定禁止。 |
この設計により、core レイヤーの意思決定ロジックは OS や外部コマンドに依存せず、静的なデータに対して決定論的に動作するため、ユニットテストが極めて容易になっています。
主な機能と安全への配慮
非破壊的なスキャン
par_tui は起動直後、バックグラウンドで checkupdates と paru -Qua を実行します。これらはシステムのパッケージデータベースを変更しない「読み取り専用」のコマンドであるため、スキャン中にシステムに影響を与えることはありません。また、スキャンは非同期で行われるため、ユーザーは待機中も TUI 上でヘルプの確認などの操作が可能です。
依存関係の競合検知
安易なパッケージの除外は、システム全体の整合性を損なうリスクがあります。 本ツールでは、ユーザーが特定のパッケージを ignore 指定した際、更新対象の他パッケージがそのパッケージに依存していないかをチェックします。もし競合が検知された場合は警告モーダルを表示し、ユーザーにリスクを承知した上での判断を促します。
リアルなターミナルへの回帰
TUI ツールにありがちな「ツール内で無理にパッケージ更新を完結させる」ことはあえて避けています。
更新内容が確定すると、ツールはターミナルの生モードを解除して終了し、実際の pacman や paru コマンドに制御を戻します。これにより、sudo のパスワード入力や、パッケージマネージャが発する重要なメッセージをユーザーが直接、確実に確認できるようになっています。
最後に:知的インターフェースとしての TUI
par_tui は、自動化のためのツールではありません。むしろ、Arch Linux ユーザーが「今、自分のシステムで何が起きようとしているのか」を正確に把握し、その場で対話的に意思決定を下すためのインターフェースです。
「スキャンは安全に、決定は対話的に、実行は透明に」。
この原則を Rust の型システムと厳格なアーキテクチャで保護することで、Arch Linux のシステムメンテナンスをより快適で、予測可能なものに変えていくことを目指しています。