Slide 1

Slide 1 text

会津大学公認サークル Zli 大LT 2024 春 in Aizu 2024-05-11 STORES 株式会社 CTO 藤村大介 一文字エイリアスのすすめ

Slide 2

Slide 2 text

自己紹介 - お仕事 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

Slide 3

Slide 3 text

自己紹介 - 書いたり発表したもの 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

Slide 4

Slide 4 text

自己紹介 - ポッドキャスト 4 論より動くもの.fm 藤村がホストになって、技術や技術にまつわることについてざっくばらんに話す Podcastです。 文字起こしもあるよ! 論より動くもの.fm | Podcast on Spotify 論より動くもの.fm on Apple Podcasts 論より動くもの.fm カテゴリーの記事一覧 - STORES Product Blog

Slide 5

Slide 5 text

自己紹介 - 作品 5 Haskellのプロジェクト生成ツール $ bundle gem みたいなやつ。当 時いいツールがなかったので作った git-grepの結果で置換とリネーム $ git grep | xargs sed -i s/foo/bar/ が面倒なので作った rspec-railsのHaskell版 正確にはRackにあたる層のためのも の。無かったので作った

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

今日の話 7 ● みなさんターミナルでコマンド打ってますか? ● 入力めんどうじゃないですか? ● 一文字にすると便利ですよ!

Slide 8

Slide 8 text

モチベーション:長いコマンドはコストがかかる 8 ● git checkout masterにかかる様々なコスト ○ 19文字分キーを押下する筋肉のコスト ○ 運動全体を設計し、司令を出す脳と神経のコスト ○ 19文字を入力する時間で別のことをする機会が奪われるコスト(機会 費用) ○ 間違った打鍵を修正するコスト

Slide 9

Slide 9 text

塵も積もれば… 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万打鍵!もったいね〜〜!!! よく使うコマンドの実行は、できるだけ短くしたい!!

Slide 10

Slide 10 text

一文字エイリアス紹介 10 ということで、私が実際に使っている一文字エイリアスを紹介します。 ※ zsh前提なので、他のシェルを使っている方は適宜読み替えてください。

Slide 11

Slide 11 text

v 11 alias v='nvim' Vim(NeoVim)を起動します。何度も im 打つ必要ないと判断。

Slide 12

Slide 12 text

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 } 本当はもう少し手が込んでいます。

Slide 13

Slide 13 text

g 13 alias g='git' git です!

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

s 15 alias s='git s' ターミナルのプロンプトで毎回 git status を出す、つまり何かコマンドを実 行するたびに git status を出す設定にしたこともありますが、シンプルに見 づらかったのでこれはやめました。 コードを書いているとメチャクチャ良く見る git status。しかし git statusと打つの面倒、 g status も面倒、 g s ですら面倒なので sにしまし た。

Slide 16

Slide 16 text

d 16 alias d='git d' git diff もメチャクチャ頻繁に使うので一文字に。s で差分の概況をつか み、 d で詳細を知る運用です。

Slide 17

Slide 17 text

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 ブランチの場合もあるので一工夫しています。

Slide 18

Slide 18 text

r 18 ローカルリポジトリの移動も面倒だな…ということで一文字に。なおローカル リポジトリの管理はx-motemen/ghqでしています。 - r $REPO_NAME でローカルリポジトリに移動 - 引数なしの r でfzfを使ってローカルリポジトリを選択し移動 - r $URL で $URLにあるリモートリポジトリをghqでクローン とローカルリポジトリへの移動・追加を簡単にしました。便利!

Slide 19

Slide 19 text

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' 実装はこうなっています。

Slide 20

Slide 20 text

r 20 function _repo { _values $(ghq list --unique) } compdef _repo repo なお、.zshrc に以下を追加すると補完も効きます。

Slide 21

Slide 21 text

b 21 Rubyを使うことが多いので bundle install も一文字にしていました。これは Docker Composeの時代になりあまり使われなくなった alias b='bundle'

Slide 22

Slide 22 text

一文字エイリアス紹介おわり 22 名前 実行されるもの v vim(nvim) g git s git status d git diff m git checkout master r 自作のリポジトリ移動コマンド 実際のコードは https://github.com/fujimura/dotfiles にあります。

Slide 23

Slide 23 text

一文字エイリアスの効用 23 実際どのような効果を感じているのかをお話しします。

Slide 24

Slide 24 text

効用1: 打鍵量を最小化することで開発効率が上がる 24 ● 単純な生産性 ○ 同じことをやるなら、より少ない手順でやったほうが時間あたりの生 産性は高い ● 脳内のコードを逃さない ○ コマンドを打っている間に脳内にあるコードが逃げていく感覚、あり ませんか? ○ 脳内のコードをコミットのエンコードするときの障害を最小にするべ く、コマンドを最短にすべし

Slide 25

Slide 25 text

効用2: ツールをもっと使いこなせるようになる 25 ● 既存ツールの習熟 ○ エイリアスをチューニングする過程でオプションに詳しくなり、公式 ドキュメントとの付き合い方もうまくなる ● 自作ツールによる拡張 ○ ときにはツールを自作することでUnix系OSの操作やシェルスクリプト の書き方に詳しくなる

Slide 26

Slide 26 text

効用3: 設計センスが磨かれる 26 ● 便利なものを作るのは簡単ではない ○ 本当に使いやすい設定は何か、自作するツールのAPIはどうするか、設 計センスが問われる ● 実際に使われる製品を作れる ○ ユーザーは自分。出来が自分の開発生産性に跳ね返ってくるので、 フィードバックが(セルフだけど)得やすい

Slide 27

Slide 27 text

まとめ 27 ● 一文字エイリアスは便利 ● 一文字エイリアスを作ることはエンジニアとしてのレベルアップにもつな がる ○ 設定ファイルのチューニング、自作ツール開発全般に言える