Gitもシェル (zsh) もよく使うコマンドをエイリアスとして設定して任意の入力で呼び出すことができる。
このエイリアスについていくつか派閥があると感じていて、おおまかには:
……という派閥に分類できると思う。
自分は3つめの「よく使うコマンド・オプションの組み合わせに説明的な名前をつける」に属する。
短いエイリアスへの苦手意識
衝突しないようエイリアスを管理するのがだるい
エイリアスは名前空間を通常のコマンドと共有しているので、それらと衝突しないよう管理しなければいけない。
短い名前を設定しても思い出せない
よく使うコマンドなら手癖で打てるだろうけれど、ごくたまにしか使わないコマンドのごく短いエイリアスを思い出せる気がしない。
これはエイリアスではない通常のコマンドでも起きるけれど、コマンドは検索なりすれば出てきて辿れるのでリーチできるが、エイリアスの場合は検索しても出てこないので死にエイリアスになったままになりがちという問題があると思う。
これはシェルやGitの設定でコメントを書くとか
誤爆のリスクが高まる
たとえば gr
で git reset --hard HEAD
にエイリアスしているとして、 grep
と打とうしたが誤って gr
でエンターを押してしまって誤爆すると悲惨なことになる。
危険な操作にエイリアスをつけるなとか、いろいろ突っ込みどころはあるが、操作者に責任と自由が委ねられているシェルにおいてわざわざ危険な操作を実行する敷居を下げることもないなと感じている。
検索性が低い
シェルのヒストリ検索は文字列の部分一致で行うのが常なので、ごく短い文字列にしていると発見しづらい。
これは技術的に挽回する余地はあると思うけれども、後述するように長いが説明的な名前をつけて、それを検索しやすくするというほうが技術のテコをきかせやすく総合的に生産性が高まると感じている。
説明的な名前をつける
特にGitの操作はやたらと難しいので自分でいろいろエイリアスを作っている。たとえば:
git cp
:git cherry-pick
- ファイル操作のメタファーになぞらえて
git interactive-rebase
,git continue-rebase
,git abort-rebase
: それぞれgit rebase --interactive
,git rebase --continue
,git rebase --abort
- git-rebaseはinteractiveとそれ以外でかなり性質の異なるサブコマンドだが1つに押し込められておりかなりヤバい設計になっている
- 区別しやすくなるだけではなく、先頭一致で検索する際にサブコマンドの先頭を分けることで誤ったrebaseのオプションを選ぶことを防ぐ意味がある
git rebase
まででC-pするとgit rebase --continue
もgit rebase --abort
も候補に含まれるが、git cont
を入力してC-pするとgit abort-rebase
が候補に出てこない
など。
そもそもGUIを使えばっていうのはごもっともだと思うけれど、なんだかんだ複雑であまり整然としていないと批判されることの多いGitのCLIも覚えておけばリポジトリの統合とか凝った操作をする時に役立つことがあるので、そこは妥協している。