プログラミング
Ziggity – Zigで書かれたGitのためのターミナルUI
Ziggity – A terminal UI for Git, written in Zig (github.com)
要約
Ziggityは、Zig言語で書かれた、高速でキーボード駆動型のGit用ターミナルUIです。LazyGitのようなワークフローを、軽量なZigバイナリで提供します。libgit2を使わず、プレーンなGitサブプロセスとlibvaxis UIライブラリを活用し、IdiomaticなZigと明示的なメモリ管理を特徴としています。ステータス、ファイル、ブランチ、コミット、スタッシュのパネルがあり、ライブ差分プレビューやコンテキストに応じたフッターを備えています。
全文翻訳
ziggity
Gitのための高速でキーボード駆動型のターミナルUI — Zigで書かれたLazyGitスタイルのワークフロー。
ziggityは、ターミナルを離れることなくステージング、コミット、ブランチ、リベース、履歴の検査といったLazyGitのコアワークフローを、小さく依存関係の少ないZigバイナリで提供します。
これは行ごとの移植ではありません。LazyGitの感触を保ちつつ、IdiomaticなZig、明示的なメモリ所有権、プレーンなGitサブプロセス(libgit2なし)、UIにはlibvaxisを使用しています。
ステータスパネルの約スプラッシュ画面、回転するASCIIドーナツ付き。
ステータス、ファイル、ブランチ、コミット、スタッシュパネルには、ライブ差分プレビューとコンテキストに応じたフッターがあります。
コンテンツ
インストール
ハイライト
スクリーンショット
機能
キーバインド
設定
ステータスとロードマップ
開発
スポンサー
ライセンス
インストール
Ziggityは実行時にPATHにgitコマンドが必要です — Gitをサブプロセスとして駆動します。
Homebrew、プリビルドバイナリの取得、またはソースからのビルドでインストールしてください。
Homebrew (macOS / Linux)
brew install simoarpe/ziggity/ziggity
これは simoarpe/homebrew-ziggity をタップし、バイナリをインストールします — 次の短縮形です。
brew tap simoarpe/ziggity
brew install ziggity
brew upgrade ziggity でアップグレードしてください。
ダウンロードしたバイナリとは異なり、Homebrewのインストールは隔離されないため、macOSではGatekeeperのプロンプトなしで実行できます。
手動インストール
すべてのリリースには、macOS、Linux、Windows用の静的バイナリが含まれています — Zigツールチェーンは不要です。
macOS / Linux
リリースページからお使いのプラットフォーム用のアーカイブをダウンロードしてください — macOS用は aarch64-macos または x86_64-macos、Linux用は x86_64-linux-musl または aarch64-linux-musl(muslビルドは完全に静的で、どのディストリビューションでも実行できます) — その後:
# VERSION を最新リリースに設定し、OS/アーキテクチャを選択してください — リリースページを参照
VERSION=v0.1.0
curl -LO https://github.com/simoarpe/ziggity/releases/download/$VERSION/ziggity-$VERSION-aarch64-macos.tar.gz
tar -xzf ziggity-$VERSION-aarch64-macos.tar.gz
sudo mv ziggity /usr/local/bin/
# またはPATH上の任意のディレクトリ
command -v ziggity
# PATH上にあることを確認
macOSではバイナリは署名されていないため、Gatekeeperが初回実行時にブロックする可能性があります。隔離フラグを一度クリアしてください。
xattr -d com.apple.quarantine /usr/local/bin/ziggity
Windows
ziggity-<version>-x86_64-windows-gnu.zip をダウンロードし、解凍して、ziggity.exe をPATH上のフォルダに入れてください。
Git for Windows が必要です。
注意:Windowsビルドはクロスコンパイルされており、まだWindowsで十分にテストされていません — 現時点では実験的なものとして扱ってください。
ダウンロードの検証(オプション)
各リリースには checksums.txt が含まれています。
sha256sum --ignore-missing -c checksums.txt
# macOS: shasum -a 256 --ignore-missing -c checksums.txt
ソースからコンパイル
要件:Zig 0.16.0 および PATH に git が必要です。
git clone https://github.com/simoarpe/ziggity
cd ziggity
zig build -Doptimize=ReleaseSafe
# バイナリは ./zig-out/bin/ziggity にあります
zig build test
# (オプション)テストスイートを実行します
ビルド後、バイナリは ./zig-out/bin/ziggity に配置されます。
PATHに追加して、どこからでもziggityを実行できるようにしてください。
PATH上のディレクトリにコピーするか:
sudo cp zig-out/bin/ziggity /usr/local/bin/
または PATH に zig-out/bin を追加します(例:~/.zshrc または ~/.bashrc で):
export PATH="$PWD/zig-out/bin:$PATH"
インストールしたら、任意のGitリポジトリ内で ziggity を実行してください。
? を押すとアプリ内キーバインドオーバーレイが表示されます(現在いるパネルにスクロールして開きます)、q で終了します。
ハイライト
LazyGitワークフロー全体 — ステータス、ファイル、ブランチ、コミット、スタッシュパネルに差分プレビューとコンテキストに応じたフッターがあります。
Hunkおよび行レベルのステージング — ファイルに入って個々の行またはHunkをステージングします。オプションでサイドバイサイドのステージング前/ステージング後表示が可能です。
完全なインタラクティブリベース — コミットごとのドロップ/スクワッシュ/フィクアップ/編集/リワード/移動、プランエディタ(i)、チェリーピック、カスタムパッチビルド、オートスクワッシュ、マークされたベースからのリベース --onto。
履歴と検査 — 実際の git log --graph DAG(ctrl+l)にファーストペアレントジャンプ、リファレンス間差分(W)にリバースモードと3点モード(merge-base)があります。GPG署名検証(x)、ログフィルタリング(/)。
複数選択 — v / Shift+矢印キーでリスト内の範囲を選択し、複数のファイル、コミット、ブランチ、スタッシュに一度にアクションを実行できます。* はブランチ固有のコミットを選択します。
同期を維持 — 静かなバックグラウンドの git fetch が、インバウンドの「プルするコミット」矢印を独自に更新します。遅いネットワーク操作はスピナーと共にUIスレッド外で実行され、ナビゲーションはライブのままです。
気の利いたタッチ — prepare-commit-msgフックのプリフィル、スタッシュの名前付けとワーキングツリーのスナップショット保持、スタッシュごとのパッチエクスポート、ペーストされた複数行メッセージが決して早期に送信されないようにするブラケットペースト。
軽量&明示的 — 小さな単一バイナリ、プレーンなGitサブプロセス、libgit2なし、完全に再マッピング可能なキー、テーマ可能な色、カスタムコマンド。
スクリーンショット
実際のターミナルセッションからキャプチャされたメイン機能のビジュアルツアー(docs/screenshotsを参照)。
Hunkと行レベルのステージング
ファイルに入ってステージングビューを開きます — 個々の行(スペース)またはHunk全体(タブでステージング前/後を切り替え、
でサイドバイサイド表示を切り替え — ステージングレイアウトを参照)をステージングまたはアンステージングします。
コミットと履歴
コミットパネルは各コミットの差分をプレビューします。GPG署名ステータスも含まれます。Enterでコミットの変更ファイルを開きます。
ctrl+l で、Git自身の色で実際の git log --graph DAG を開きます。
デフォルトでは現在のブランチとそのアップストリームが表示されるため、遅れているコミット(リモートのレーン)がすぐにわかります。a で全ブランチを切り替えます。
@ で現在のコミット(HEAD)にジャンプするか、コミットのファーストペアレントに p でジャンプします。
完全なインタラクティブリベース:コミット上で i を押すとプランエディタが開きます — pick / drop / squash / fixup / edit をマークし、Ctrl+J/Ctrl+K で並べ替え、その後実行します。
コミット c でコミットダイアログが開きます:概要行とオプションの複数行本文、50/72ルールを促すライブ文字数カウンター、そして(オプションで)prepare-commit-msgフックのプリフィル。
ブランチとタグ
ブランチパネルは、ahead/behind矢印、アップストリームトラッキング、およびリファレンスごとのアクション(merge, rebase, reset, checkout…)を表示します。Tagsタブはリファレンスとそのメッセージをリストします。
スタッシュ
差分プレビュー付きのスタッシュパネル。
スタッシュメニュー(s)は、all / +untracked / staged-only / a single file / keep-changes を提供し、それぞれにオプションのメッセージがあります — そして w は任意のスタッシュを git apply 可能なパッチファイルに書き出します。
差分とメニュー
任意の参照をマークし、それを別の参照と比較します(W)。リバースモードと3点モード(merge-base)があります。
破壊的なアクションは、明確で明示的なメニューを通じてルーティングされます。
ヘルプとAbout画面
? でキーバインドオーバーレイが開きます。現在いるパネルにスクロールされています。
ステータスパネルを選択すると、ライブアニメーション付きのAbout画面が表示されます。
機能
ワーキングツリーとステージング
git status --porcelain -z からのファイルパネル。ファイル(スペース)またはすべて(a)をステージング/アンステージングします。
Hunkと行レベルのステージング:ファイルに入るとステージングビューが開き、個々の行(vで範囲指定)またはHunk全体(タブでステージング前/後を切り替え、
でサイドバイサイド表示を切り替え — ステージングレイアウトを参照)をステージング/アンステージングします。
ディレクトリツリービュー(`)でワーキングツリーファイルとコミット/ブランチのファイルリストを表示します。a / ルート、折りたたみ可能なフォルダ(Enter)、単一子チェーンは a/b/c に圧縮されます。
フォルダを選択すると、その下の結合差分が表示されます。ファイルパネルではスペースでフォルダ全体をステージングします。
外部変更のためのスコープ付き定期自動リフレッシュ、およびターミナルがフォーカスを取り戻したときのフルリフレッシュ。
ブランチ、タグ、リモート
git branch --format からのブランチパネル:「〇分前」カラム、ブランチごとのトラッキングステータス(✓同期中、↑/↓ ahead/behind、(gone))、およびアップストリームリファレンスは、それが明白な origin/<same-name> でない場合にのみ表示されます。
ブランチアクション(ローカルタブ):新規(n)、名前変更(R)、削除(d)、マージ(M)、リベース(r)、ファストフォワード(f)、名前によるチェックアウト(c)、リセット(g)、強制チェックアウト(F)、タグ付け(T)、コミットを新規ブランチに移動(N)、プルリクエストページを開く(G)、ソートメニュー(s)。
タグタブ:チェックアウト(スペース、デタッチ)、作成(n、軽量またはアノテート;o