ghq の気になる点を改善した Rust 製ツール開発

jedipunkz🚀 です。 今回は自作した ツール gm を紹介します。 gm は ghq と同じくリポジトリを clone して管理するツールです。違うのは Fuzzy Finder を内蔵していることと、clone だけでなく Git Worktree も同じ画面から扱えることです。ブランチや Pull Request を選べば、その場で Worktree を作って移動します。Ctrl-G を押すと Finder が開き、選んだリポジトリまたは Worktree に cd します。またランク機能を設けて頻繁にアクセスするレポジトリを優先的に選択するようにしています。 最初は Go (Bubble Tea) で書いていましたが、PR #83 で挙動を変えずに Rust (ratatui) へ書き換えました。gm.toml・訪問記録・ディレクトリ構成は互換なので、Go 版から入れ替えてもそのまま動きます。 リンク ソースコード: https://github.com/jedipunkz/gm 公式サイト: https://jedipunkz.rocks/gm/ Finder の画面 左がリポジトリ一覧、右が選択中のリポジトリの詳細、下が入力欄とキーの案内です。詳細には path・remote・ブランチ・作業ツリーの状態・訪問回数・直近 3 コミットが出ます。最有力候補は入力欄のすぐ隣、一覧の一番下に置いています。入力欄の右端の箱には、いま絞り込んでいる一覧の名前 (repository / worktree / branch / pr) が出ます。 (公式サイトに置いてあるモックです) 開発動機 普段の作業で ghq を頻繁に使っています。長く使っていて不満はほとんど無かったのですが、2点だけ引っかかるなと気が付きました。 1 つは頻繁にアクセスするレポジトリに似た名前のレポジトリがあるとそちらが起動直後に選択されて ctrl-n/p で移動して毎回アクセスしていました。毎日多用してるのでこの作業無駄では・・と考えるようになりました。 もう 1 つは Git Worktree です。最近は 1 つのリポジトリに対して複数の Worktree を切って作業することが増えました。以前作った agx も Worktree 前提のツールです。しかし ghq は Worktree にはアクセスが出来ないので、Worktree への移動だけは別の手段を用意することになっていました。これも以前作った fuzz.fish で Worktree にアクセスしていたのですが、これはレポジトリに移動した後に利用できるツールです。なので ghq を起動してその流れで Worktree にアクセスしたい!という要望が出てきました。 ...

2026-09-23 · 6 分 · jedipunkz

Go によるコマンド履歴・ファイル・Git ブランチ/Worktree/コミットを検索する Fish Plugin 開発

jedipunkz です。 今回は自作した Fish シェルの Plugin である fuzz.fish を紹介します。 fuzz.fish は Fish Shell の コマンド履歴・ファイル・Git ブランチ・Git Worktree・Git コミット をインクリメンタルサーチできる Fish Plugin です。Go と Bubble Tea で TUI を実装していて、fzf や fd、ripgrep、bat といった外部ツールは一切不要です。プラグイン本体と単一の Go バイナリだけで動きます。 リンク ソースコード: https://github.com/jedipunkz/fuzz.fish 公式サイト: https://jedipunkz.rocks/fuzz.fish/ スクリーンショット コマンド履歴・ファイル・Git ブランチ検索を切り替えている様子です。 開発動機 幾つか小さなツールはこれまでも作ってきましたが、利用する機会が減るとメンテナンスも怠りがちなことに気が付き、自分自身がよく使うツールを作ろうと思ったのがきっかけです。そして普段から Fish をシェルとして使っていますが、コマンド履歴検索や Git ブランチの切り替えをより効率的に出来れば何より自分にとって便利なツールになる予感がありました。 主な機能 外部ツールが不要。fzf / fd / ripgrep / bat をインストールしなくても、プラグインと Go バイナリだけで完結する キーバインドは ctrl+r の 1 つ。起動後は ctrl+s ctrl+w ctrl+g ctrl+x で閉じずにモードを切り替えられる 全モードにプレビューがある。履歴は実行時刻・ディレクトリ・前後のコマンド、ファイルはシンタックスハイライト付きの中身、Git 系はそれぞれの文脈を表示する 履歴は frecency で並ぶ。マッチ品質を最優先にした上で、log1p(頻度) を最終実行時刻で減衰させるため、実際によく叩くコマンドが上に来る Git はブランチだけでなく Worktree とコミットも扱える。コミット検索はハッシュと件名の両方にマッチし、git show / git diff / git revert / git cherry-pick をプロンプトに置く(実行はしない) インストール方法 必要なのは Fish Shell 3.0+ のみです。Fisher を使ってインストールします。 ...

2026-01-17 · 2 分 · jedipunkz

Discord サーバ運営を補助する Go 実装のボット開発

自分は Discord サーバの運営を行っているのですがその運営の補助をしてもらうためにボット開発を行っています。Go で Discord ボットを開発しメンバー数の推移やログ分析を行うシステムを構築している話とまたその他幾つか機能をもっていて日々の作業の効率化を図っています。この記事ではそのボットの紹介をさせて頂きます。 ※ 以前の記事 https://jedipunkz.github.io/post/discord-exporter/ の内容を含んでいます システム構成 このシステムは以下の3つの主要コンポーネントで構成されています。 Discord ボット(padawan) - Go 製の Discord ボット discord-exporter - Go 実装の Discord サーバメトリクス収集用 Prometheus Exporter 分析基盤 - DuckDB を用いた構造化ログの分析コンテナ 構成図は下記になります。Prometheus Exporter は Discord API から情報を取得し Prometheus Server にメトリクスを提供。Prometheus Server はそのメトリクスをポーリングしストレージにデータを蓄積。Grafana はそれをデータソースとして参照。padawan は Go 実装のボットで Discord API やその他ゲーム用 API 等を参照し機能提供。ボットと隣接してある DuckDB コンテナはボットのログを分析するための Go 実装の CLI を備える。 構成の詳細 ボットの構成 padawan と名前のボットとそのボットのログを分析する DuckDB コンテナで構成されています。 # padawan/docker-compose.yaml services: padawan: build: context: . dockerfile: Dockerfile volumes: - ./data:/root/data - ./logs:/logs restart: always duckdb: build: context: . dockerfile: Dockerfile.duckdb volumes: - ./logs:/logs:ro restart: "no" profiles: - tools discord-exporter の構成 Go 実装の Discord API から情報を収集する Exporter を中心とし Grafana, Prometheus Server を構成としても持っています。 ...

2025-12-30 · 5 分 · jedipunkz