年末の大掃除に合わせて、ローカルのリポジトリも掃除しよう
はじめに
こんにちは、丸山です。
突然ですが、エンジニアって掃除苦手な人多いですよね(偏見)。
仕事ができるエンジニアの方はそんなことはないでしょうが、私と同じ底辺エンジニアの中には片付けが苦手な方もいるはずです。
私のローカル環境は大体こんな感じになっています。
これが原因で以下のような損をしていたと考えています。
- 作業環境の構築に時間がかかるので、取り掛かるのが面倒になる
- 既存の実装をすぐに見れないので、既知問題の解決方法を探しにくい
- 開発体験が低くなる
今回はこのような問題をスクリプトを書いて解決できたので、記事にまとめました。
書いたもの
量がないので、ソースコードは貼ります。
使ったツールは以下です。
- ghq (1.6.2)
- fzf (0.55.0)
- zoxide (0.9.6)
- eza (0.20.12)
動作環境は以下です。
- MacOS
- fish
- wezterm
fish環境で動かしているせいでPOSIX互換がありません。zshとかbash使っている人は書き直してください。
# custom command
function ghq
if [ $argv[1] = repo ]
set --erase argv[1]
source ~/.config/fish/functions/ghq.sh $argv 2>/dev/null
else
command ghq $argv
end
end
# zoxide init
export _ZO_EXCLUDE_DIRS="$HOME/.ghq/**/*"
zoxide init fish | source
#!/usr/bin/env fish
set -gx FZF_DEFAULT_OPTS "--layout=reverse --height=45% --border --preview-window=down:30%"
if test -z "$argv[1]"
set repo_name (ghq list --unique | fzf --preview 'ls --grid (ghq list -p | rg {})')
else
set repo_name (ghq list --unique | rg "$argv[1]" | fzf --ansi)
end
set repo_path (ghq list -p | grep "/$repo_name\$")
cd "$repo_path"
実際に動かすとこんな感じです。
ghq知らない人のために
知っている人は読まなくて大丈夫です。
ghqとは
一言で言うと、ローカルにあるリポジトリの管理が可能になるCLIツールです。
主な機能は、以下の2つです。
- リポジトリの一元管理
- リポジトリの検索
リポジトリの一元管理
ghqのサブコマンドはそれぞれ以下の操作を行えます。
-
ghq get
: git clone -
ghq remove
: ローカルリポジトリの削除
gitコマンドとの違いは、保存先がリモートリポジトリの構造に則って自動的に決まる点です。
例えば下のようなコマンドを打った場合、clone先のディレクトリがURLのsegmentごとに別れます。
# これと同じ: git clone https://github.com/example/repo ~/.ghq/github.com/example/repo
$ ghq get https://github.com/example/repo
# ここにcloneされる: ~/.ghq/github.com/example/repo
これによってリポジトリが~/.ghq
配下で一元管理され、ローカルの環境にリポジトリが散乱することを防ぐことができます。
$ tree ~/.ghq -L 3
/Users/maruyama/.ghq
└── github.com
├── "User name"
│ ├── amplify-sandbox
│ ├── dotfiles
│ ├── mkdocs-personal-wiki
│ ├── rust_workspace
│ ├── ci_cd_react
│ ├── custom_chatbot
│ ├── nostr-study-project
│ ├── shared-auth
│ └── shared-utils
├── flutter
│ └── engine
└── martinvonz
└── jj
リポジトリの検索
ghq
を使用すると、クローンしたリポジトリを素早く検索でき、目的のリポジトリのディレクトリに簡単に移動することができます。
# リポジトリ一覧表示
$ ghq list
github.com/example/repo
github.com/example/another-repo
# フルパスを表示
$ ghq list --full-path
/home/user/.ghq/github.com/example/repo
/home/user/.ghq/github.com/example/another-repo
正直、このフルパスでcd
すればリポジトリに飛ぶことができるのですが、毎回フルパスを全て表示してgrep
かけるのが面倒だったので今回のスクリプトを書きました。
終わりに
他のエンジニアの人から見たら問題点が沢山あると思いますが、一旦満足しています。
作業効率も体感ですが結構上がったと感じています。
個人的に改善したい点として、vim使用中リポジトリを変えるときに、vimから抜ける必要があるのが面倒です。
telescope-ghqとかで楽にいい感じにできないかと思っています。
こんな感じで今後も面倒なことはできるだけ無くしていきたいです。
追記
- tmuxを使っているなら
fzf
に--tmux=center
を入れた方が強そうに見える。 -
tmux.conf
にbindしておくとprefix key
+設定key
で起動するので便利そう。
Discussion