なにするひと?
Railsを中心にRubyで開発をする人です。普通の人間。
2ヶ月〜半年スパンで案件が変わりつづけて6年目、決まり切った開発環境があるので晒す。きっかけはこれ。
開発周り
一番最初に入れるもの
bashより馴染んだコマンドシェル。ここは個人の自由だと思うけどzshrc(設定ファイル)の例がアホほど転がっているので便利だと思う。多分魚(fish)も便利だと思うけど知らない。最近Macのデフォルトがzshになったのでzshが公用語なのでは?適当言ってます。
ディレクトリ名でcdできたりブランチ名の表示がなんかあったりとか便利なので便利だと思います。
gitの一番新しいやつ
大抵「開発環境のOSはなんでもいいです」って言われて「じゃあCentosいれますね〜」ってやるのでyum install -y git
してその後新しいgitを入れ直す。手順に関しては毎回ggrか自分の構築ログ見てやる。
数年前作った構築ログはQiitaにある。
peco
ちょ〜〜〜〜〜便利なやつなんですけど正式名称? 分類は知らない。上司が最初のbox(開発環境をVagrantで作ってboxにして配布する現場にいた)にしれっと入れていたので知った。適当なショートカットにインタラクティブサーチ的ななにがしをブチ込めるので便利。最後の方に汚いコードを晒す。
そのほか
案件によってDB入れたりRuby入れたりgemいれたりする。rails sが無事に動いてrails dbでDB見れてrails cでレコード操作できるようになったらもうなんでもいい。
設定周り
設定ファイル
.zshrc
デフォルトは少し凝ったzshrcでdifffにつっこんで出てきた設定はこれ。
# 好きな見た目にする
export LSCOLORS=cxfxcxdxbxegedabagac
# 覚えてないし何をしているのかも知らない(上司が突っ込んだ説がある)
autoload -Uz history-search-end
zle -N history-beginning-search-backward-end history-search-end
bindkey "^o" history-beginning-search-backward-end
# set rbenv for ruby(まあないと死ぬので)
export PATH="$HOME/.rbenv/shims:$PATH"
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"
# キーバインド
typeset -fuz zkbd
if [[ -f ~/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]]; then
source ~/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
else
echo "Key definition not found."
fi
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line
[[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char
# 起動した瞬間からRailsのプロジェクトに移動する
cd ~/xxxxxxxxx
zshがなんかいい感じにdelete認識してくれなくてストレスなのでキーバインドの設定をしている。
その他pecoの設定がわんさかある。後述。
alias
alias edit="vi ~/.zshrc"
alias update="source ~/.zshrc"
alias rails="bundle exec rails "
alias rake="bundle exec rake "
alias migrate="bundle exec rake db:migrate "
alias rs="rails s"
alias bi="bundle install"
alias pj="cd ~/xxxxxxx"
alias be="bundle exec "
alias rspec="bundle exec rspec "
be全然使ってないな。けそう。pjは~/.ssh
とかに行って迷子になった時にシュッとプロジェクトのディレクトリに飛ぶ時に使うけどほとんど使ってないです。
editとupdateは散々設定ファイルをいじくりまわしている時に最終的に気が触れて設定したalias。
ちなみにalias
コマンドで今現在のalias
の設定が見れます。便利。
function
function setcom(){
if [[ -n "$*" ]]; then
eval "__precmd_for_subsh() { print -z '$* ' }"
else
eval "__precmd_for_subsh() { print -z '' }"
fi
autoload -Uz add-zsh-hook
add-zsh-hook precmd "__precmd_for_subsh"
}
これはどこかでみた必ずgitが入るって言うやつの派生系でプロセスに限り必ず冒頭になんかをセットするって言うやつです。
何をやってもgitが入る。これはひたすらbundle exec ...とかgit cherry-pickする時とかにも使う。便利。
名前がクソなのは自分で作ったからです。これは自分で環境を作って配布する時にしれっと入れるけど同僚が一回しか使ってくれなかった。でも便利です。
git専用のターミナルとかを作る人には便利です。便利でしょ?st
とかaliasはる必要なくなるから便利でしょ?
.gitconfig
[alias]
st = status
ls = status
dd = diff upstream/master HEAD
fu = remote update
d = diff
co = checkout
git = !git
ds = diff --staged
l = log --oneline --decorate -15
po = push origin HEAD
cb = checkout -b
re = rebase upstream/master
bals = reset --hard HEAD
coa = commit --amend
pof = push origin +HEAD
pop = stash pop
rollback = reset --soft HEAD~
m = checkout master
save = commit -m 'save'
br = branch
ref = reflog --oneline
bn = branch --no-merged
fixup = commit --fixup
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
[interactive]
diffFilter = diff-highlight
[diff]
compactionHeuristic = true
変なやつについて解説すると以下。
- git dd
リモートのmasterブランチとのdiffをとる。便利。
- git ls
ひたすらsetcom git
した後にlsを打ってしまう時期があって、無駄すぎたのでstatusを見れるようにしたらgit st
をつかわなくなった。git ls
を見ています。
- git fu
fetch upstream
が面倒になってfu
にしてた時期があったけど複数remoteをfetchする必要が出てきてあ〜〜〜〜ってなってremote update
に中身を変えた。
- git po, git pof
push origin HEAD
をいちいちやりたくなかったので略した。
- git bals
バルス!!!!!!!する
- git save, rollback
ゲームのデータみたいにsave してrollbackしたかった。
- git !git
setcom git
の副作用で必ずgitが含まれてしまうので、丁寧にgit status
とか打つ時にgit git status
とかみたいになってバグるのを回避するやつ。日本語が変。
git fixup, git pop
頻出サブコマンドをaliasシリーズ
diff-highlight
使ってないの?便利だよ?文字単位でdiffがハイライトされます。
私の説明よりこちらが詳しい。diff-highlightでGitのdiffを見やすくする
最近はそのまま使えるわけではないのでこちらを参照してなんかいい感じにコンパイルしてほしい。 Ubuntu 18.04 で git diff-highlight へのパスを通す(リンク)
peco(.zshrc)
ヒストリ
pecoの王道の用途。ヒストリをいい感じにするやつ。
function peco-select-history() {
local tac
if which tac > /dev/null; then
tac="tac"
else
tac="tail -r"
fi
BUFFER=$(\history -n 1 | \
eval $tac | \
peco --query "$LBUFFER")
CURSOR=$#BUFFER
zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history
cd
なんかディレクトリとかに移動できるやつ。上司が作って上司が設置して上司しか使っていなかったのがかわいそうで消していない。
########################################
# Peco with find file or cd
# http://hotolab.net/blog/peco_select_path/
export EDITOR=vim # 好きなエディタ
function peco-path() {
local filepath="$(find . | grep -v '/\.' | peco --prompt 'PATH>')"
[ -z "$filepath" ] && return
if [ -n "$LBUFFER" ]; then
BUFFER="$LBUFFER$filepath"
else
if [ -d "$filepath" ]; then
BUFFER="cd $filepath"
elif [ -f "$filepath" ]; then
BUFFER="$EDITOR $filepath"
fi
fi
CURSOR=$#BUFFER
}
zle -N peco-path
bindkey '^o' peco-path # Ctrl+o で起動
+ git コミットハッシュをシュッととる
git fixupする時に使う。Ctrl+gで現在のブランチのコミットハッシュをシュッと取れるので便利。(fixupの良し悪しについては不問)
function peco-git-hash() {
local commit_hash="$(git log --oneline | peco | awk '{print $1}')"
BUFFER="$LBUFFER $commit_hash"
CURSOR=$#BUFFER
}
zle -N peco-git-hash
bindkey '^g' peco-git-hash # Ctrl+o で起動
+git ブランチ名を取得するやつ
ブランチをいい感じに取得するやつ、自分で適当に書き直しているので辛い。
いい感じにcheckoutできます。便利。
# https://qiita.com/sachaos/items/34946c0085e4e391628c
function peco-git-branch() {
local branch="$(git branch --no-merged | peco | tr -d ' ' | tr -d '*')"
if [ -n "$branch" ]; then
if [ -n "$LBUFFER" ]; then
local flbuffer=$(echo $LBUFFER | sed -e 's/[ \t]*$//' | sed -e "s/.*/'&'/g")
if [ ${flbuffer} = "'git'" ]; then
local new_left="${LBUFFER%\ } co $branch"
else
local new_left="${LBUFFER%\ } $branch"
fi
else
local new_left="$branch"
fi
BUFFER=${new_left}${RBUFFER}
CURSOR=${#new_left}
fi
}
zle -N peco-git-branch
bindkey '^B' peco-git-branch # Ctrl+o で起動
ルーチン
3つくらいvagrant ssh
して1つ目にsetcom git
, (git )fu
、2つ目にrs
、3つ目は放置って感じにする。
こうするとgit専用、rails server専用、遊撃手(必要な時にrails cする)が生まれて便利。