Upgrade to Pro — share decks privately, control downloads, hide ads and more …

一文字エイリアスのすすめ

 一文字エイリアスのすすめ

Fujimura Daisuke

May 10, 2024
Tweet

More Decks by Fujimura Daisuke

Other Decks in Programming

Transcript

  1. 自己紹介 - お仕事 2 時期 2008~2012 2013~ 2015~ 2020~ 会社

    いろいろ Quipper マチマチ STORES バックエンド Rails Rails Rails Rails, Go, etc. フロントエンド jQuery, Backbone.js etc. Backbone.js etc. React.js React.js, Vue.js 立場 ほぼメンバー いわゆるEM CTO CTO 藤村大介 twitter.com/ffu_ github.com/fujimura note.com/fujimuradaisuke
  2. 自己紹介 - 書いたり発表したもの 3 Rails Developer Meetup 2019 入門 名前

    WEB+DB PRESSの特集のダイジェスト版 https://speakerdeck.com/fujimura/ru-men-ming-qian WEB+DB PRESS Vol.110 特集 名前付け大全 「よい命名とは」をガチで考えてみたやつ https://gihyo.jp/magazine/wdpress/archive/2019/vol110
  3. 自己紹介 - 作品 5 Haskellのプロジェクト生成ツール $ bundle gem みたいなやつ。当 時いいツールがなかったので作った

    git-grepの結果で置換とリネーム $ git grep | xargs sed -i s/foo/bar/ が面倒なので作った rspec-railsのHaskell版 正確にはRackにあたる層のためのも の。無かったので作った
  4. 6

  5. 塵も積もれば… 9 ものすごくざっくりと打鍵数を推定してみます。 コマンド 文字数 年間平日日数 一日の回数 年間打鍵数 git status

    10 250 30 75000 git diff 8 250 20 40000 git checkout master 19 250 5 23750 cd /path/to/repo 16 250 10 40000 vim foo/bar.ts 14 250 30 105000 283750 約28万打鍵!もったいね〜〜!!! よく使うコマンドの実行は、できるだけ短くしたい!!
  6. v 12 v () { if [ -z $1 ]

    then local choice=$(fzf) if [ -z $choice ] then else local cmd="v $choice" print -S $cmd eval $cmd fi else nvim $@ fi } 本当はもう少し手が込んでいます。
  7. v 14 なお .gitconfig にあるコマンドのエイリアスも一文字のものが多いので、僕 のターミナルの履歴は g l とか g

    g ...とかがたくさんある [alias] s = status -bs d = diff l = log --decorate f = fetch g = grep --line-number --show-function --color --heading --break
  8. s 15 alias s='git s' ターミナルのプロンプトで毎回 git status を出す、つまり何かコマンドを実 行するたびに

    git status を出す設定にしたこともありますが、シンプルに見 づらかったのでこれはやめました。 コードを書いているとメチャクチャ良く見る git status。しかし git statusと打つの面倒、 g status も面倒、 g s ですら面倒なので sにしまし た。
  9. m 17 m () { local main_branch=$(git symbolic-ref refs/remotes/origin/HEAD |

    sed 's@^refs/remotes/origin/@@') git checkout $main_branch } git checkout master も打つ頻度高くね?ということで一文字に。これも 非常に便利。なお main ブランチの場合もあるので一工夫しています。
  10. r 18 ローカルリポジトリの移動も面倒だな…ということで一文字に。なおローカル リポジトリの管理はx-motemen/ghqでしています。 - r $REPO_NAME でローカルリポジトリに移動 - 引数なしの

    r でfzfを使ってローカルリポジトリを選択し移動 - r $URL で $URLにあるリモートリポジトリをghqでクローン とローカルリポジトリへの移動・追加を簡単にしました。便利!
  11. r 19 function repo(){ local result="" local choice="" local dest=""

    if [ -z $1 ]; then choice=$(ghq list --unique | fzf) if [ -z $choice ]; then echo "No repo was chosen" else result=$choice fi else result=$1 fi dest=`ghq list --exact --full-path $result` if [ "$dest" == "" ] ; then if [ "$1" =~ "^(git|http)" ] ; then ghq get $1 return else echo "Not found" fi else cd $dest fi } alias r='repo' 実装はこうなっています。
  12. r 20 function _repo { _values $(ghq list --unique) }

    compdef _repo repo なお、.zshrc に以下を追加すると補完も効きます。
  13. 一文字エイリアス紹介おわり 22 名前 実行されるもの v vim(nvim) g git s git

    status d git diff m git checkout master r 自作のリポジトリ移動コマンド 実際のコードは https://github.com/fujimura/dotfiles にあります。
  14. 効用1: 打鍵量を最小化することで開発効率が上がる 24 • 単純な生産性 ◦ 同じことをやるなら、より少ない手順でやったほうが時間あたりの生 産性は高い • 脳内のコードを逃さない

    ◦ コマンドを打っている間に脳内にあるコードが逃げていく感覚、あり ませんか? ◦ 脳内のコードをコミットのエンコードするときの障害を最小にするべ く、コマンドを最短にすべし