64
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ターミナルと開発環境(@五反田.rb)

Last updated at Posted at 2016-10-05
1 / 34

###自己紹介

image

cuiとリファクタリングが好きなrailsプログラマです。
awsなどのインフラ周りも触ります。

ジモティーという会社で同名のサービスを作ってます。
会社でvim使っているのは自分だけで、寂しいです。


###zsh tmux vim peco ergodoxのススメ(+α)

cui toolを使いこなすと作業が捗る


###tmuxのススメ(1)
必要な時に、必要な分だけペインを分割して使っていくのが好き

image


###tmuxのススメ(2)
zsh起動時に自動起動にしておく

.zshrc
# tmux自動起動
if [ -z "$TMUX" -a -z "$STY" ]; then
  if type tmuxx >/dev/null 2>&1; then
    tmuxx
  elif type tmux >/dev/null 2>&1; then
    if tmux has-session && tmux list-sessions | /usr/bin/grep -qE '.*]$'; then
      tmux attach && echo "tmux attached session "
    else
      tmux new-session && echo "tmux created new session"
    fi
  elif type screen >/dev/null 2>&1; then
    screen -rx || screen -D -RR
  fi
fi

iterm2との組み合わせでワーキングDirを設定しておくと、
ペインを分割した時に作業場所が最初から開いていると便利。
(作業場所ごとにitermのprofileを作っておくと良いかも。)

profileの設定
image

tmuxinatorというgemを使うと自分のレイアウトを登録して起動ができる。
IDEっぽいレイアウトに調整したあと、登録とか、ペインごとに起動時の動作も登録できたと記憶している。


###tmuxのススメ(3)

.tmux.conf
# 設定ファイルをリロードする
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# プレフィックスキー C-bをC-qに変える
unbind C-b
set-option -g prefix C-t
# キーストロークのディレイを減らす
# set -sg escape-time 1
# ESCキーの効きを改善
# set -s escape-time 0
# ペインを立てに分割する
bind v split-window -h
# bind -n C-v split-window -h
# ペインを横に分割する
bind s split-window -v
# bind -n C-s split-window -v

# bind -r k select-pane -U
# bind -r j select-pane -D
# bind -r h select-pane -L
# bind -r l select-pane -R
bind k select-pane -U
bind j select-pane -D
bind h select-pane -L
bind l select-pane -R


# Vimのキーバインドでペインをリサイズする
bind -r < resize-pane -L 1
bind -r > resize-pane -R 1
bind -r - resize-pane -D 1
bind -r + resize-pane -U 1
# ステータスバーの色を設定する
set -g status-fg white
set -g status-bg black
# ウィンドウリストの色を設定する
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim
# アクティブなウィンドウを目立たせる
# setw -g window-status-current-fg white
# setw -g window-status-current-bg red
# setw -g window-status-current-attr bright
# アクティブなペインを目立たせる
set-option -g pane-border-fg white
set-option -g pane-active-border-fg red
# コマンドラインの色を設定する
set -g message-fg white
set -g message-bg black
set -g message-attr bright
# ステータスバーを設定する
## 左パネルを設定する
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
## 右パネルを設定する
set -g status-right "#[fg=cyan][%Y-%m-%d(%a) %H:%M]"
## ステータスバーのUTF-8サポートを有効にする
## set -g status-utf8 on
## リフレッシュの間隔を設定する(デフォルト 15秒)
set -g status-interval 60
## ウィンドウリストの位置を中心寄せにする
set -g status-justify centre
## ヴィジュアルノーティフィケーションを有効にする
# setw -g monitor-activity on
# set -g visual-activity on
## ステータスバーを上部に表示する
set -g status-position top
#bind : command-prompt

# 256色端末を使用する
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'
# # コピーモードを設定する
# ## viのキーバインドを使用する
setw -g mode-keys vi
# ## クリップボード共有を有効にする
set-option -g default-command "reattach-to-user-namespace -l zsh"
#
# ## コピーモードの操作をvi風に設定する
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
#
# キーバインド(コピーモード)
#
bind Space copy-mode
bind p paste-buffer

# vでマーク開始
# bind -t vi-copy v begin-selection

# Vで行の先頭からマーク開始
bind -t vi-copy V select-line

# C-vで矩形選択の切り替え
bind -t vi-copy C-v rectangle-toggle

# yでヤンク
# bind -t vi-copy y copy-selection

# Yで1行ヤンク
bind -t vi-copy Y copy-line


###zshのススメ(1)

1文字aliasとても便利で生産性があがる。
mを押すと
git fetch -p
git checkout master
git pull origin master
最後にマージ済みのlocal branch削除までするように設定している。

alias t="tig"
alias s="tig status"
alias m="f && git co master && git pull origin B && git delete-merged-branches"
alias gl="git log --decorate"
alias glo="git log --oneline"
alias f="git fetch --prune"

#↓マージ済みのローカルブランチを削除する設定

~/.gitconfig
[alias]
  delete-merged-branches = !git branch --merged | grep -v \\* | xargs -I % git branch -d %

参考:一文字エイリアスはいいぞ!


###zshのススメ(2)

current_branchを打たなくて済む

git push origin B
git pull origin B
.zshrc
function git_current_branch_name()
{
  git branch | grep '^\*' | sed 's/^\* *//'
}
alias -g B='"$(git_current_branch_name)"'

###zshのススメ(4)

terminalからコマンド一発でテンプレートを用いたPullRequest発行

git pr

image

参考:テンプレートを使って指定したbranchに向けてコマンドラインからPull Requestを出す


####gitの設定(commitテンプレートを使う)

.git/config
[commit]
  template = ~/.commit_template

設定しておくと便利、自分が使いやすいように改善サイクルを回したい

image


####zshのススメ(peco ghq hub)

dirctoryに移動したり、githubを開いたり

$ g
$ gh
zshrc
alias g='cd -G' #enhancdが設定されている時
# alias g='cd $(ghq root)/$(ghq list | peco)'
alias gh='hub browse $(ghq list | peco | cut -d "/" -f 2,3)'

image

参考:ghq, peco, hubで快適Gitライフを手に入れよう!


###zshのススメ(好きなプラグイン1)

一度移動したdirectoryを覚えて、曖昧なwordでも移動してくれる
image

$ pwd
/Users/tosMiyake
$ cd my-pr
$ pwd
/Users/tosMiyake/project/node/angular/my-proj

候補が複数ある場合はインクリメンタル検索になる
オプションや、cd以外にbindするようにも出来る

参考:autojump/z から乗り換えよう、cd 拡張プラグイン enhancd


###zshのススメ(好きなプラグイン2)

zsh-users/zsh-history-substring-search
C-rでhistoryをインクリメンタル検索
image


###zshのススメ(好きなプラグイン3)
zsh-users/zsh-autosuggestions
fish likeな補完
image


###pecoる(1)

pecoで絞って、branchを切り替える

$ git peco

image

~/bin/git-peco
#! /bin/sh
git checkout `git branch | peco | sed -e "s/\* //g" | awk "{print \$1}"`

###pecoる(2)

railsのrouttesをインクリメンタル検索

$ rake routes > routes.text
$ cat routes | peco

image


###vimについて

なぜvimか?
keybindが使いやす、text objectという概念がすごく好き。
思考の速度で編集できている気がする。
image

terminalのtoolと相性がいい(serverにも入っている)

IDEのもっさり感がない

何より設定ファイルに投資した時間を考えると他のediterになかなかいけない

terminalとの行き来がつらいので、macvimは使ってない


###vim でお気に入りplugin(1)
todesking/ruby_hl_lvar.vim

rubyのローカル変数のシンタックスハイライト
地味に好き、typoとかに気きやすい。(neovimで使えなくてしばらくたって、このpluginが恋しくてvimに戻ってきた。)
image


###vim でお気に入りplugin(2)

tpope/vim-fugitive

任意のcommitの状態でファイルが開けて(昔の消してしまったコードから拝借できる)、
そこでもgit brameできる(変更経緯を細かく追える)。
git blameのウィンドウでEnterを押すとcommitとdiffが見える。
超絶生産性を上げてくれる神plguin
他にも便利なコマンドあり。
(command :Glog :Gblame)
image


###vim でお気に入りplugin(3)

tpope/vim-rails

railsの規約に沿った移動が便利
controller <=> view
controller <=> spec
model <=> spec

gfでいい感じにファイル移動できる
rubocopなどの結果をファイルにはき、ファイルパスでアクセスできる
roubocop > ru.text
gf

url_helperの上でgfすると、
routingされているcontrollerのactionを開いてくれる、驚き!!


###vim でお気に入りplugin(4)
ctrlpvim/ctrlp.vim

ファイル名のあいまい検索で開いたり、
最近開いたファイルを基準にあいまい検索ができるため、
さっき開いていたcontroller開きたいといった時に、controllerと打てば該当のファイルが開ける。
直近のファイルにすごくアクセスしやすい。

image


###vim でお気に入りplugin(5)

jistr/vim-nerdtree-tabs
現在開いているファイルと同じ階層で、treeを開いてくれるため、同じ種類のファイルを編集する時に、
地味に便利。
new.html.haml編集ついでにeditも編集しておきたいとか。
image


###便利なGem
interactive_editor

rails consoleなどでちょっとした長いコードを打ちたい時にediterで編集できる。
補完やsnipetなどもediterのを使えるので生産性があがる。
閉じても同じSession内なら、さっき開いたファイルがもう一度開くようです。

pry
pry(main)> vim
# editterが立ち上がる
User.pluck(:name)
pry
# 実行される
pry(main)> vim
[
    [ 0] "黒川 美雨",
    [ 1] "浅井 佑南",
    [ 2] "伊東 安未",
    [ 3] "森岡 陸空",
]

###sideci 便利
いろいろな自動規約チェックがあり、Githubにコメントしてくれる。
rubocopのautocorrectをwebのインターフェースでやってくれる機能もある。

image

image


###circleci

テストは全部circleciで回し行く。
細かくpushしていればどこで壊れたかが分かる。
TDD的な取り組みも分かりやすい。

image


###circleci チーム開発でリソースを上手く使う

  • rspecで1つでもコケたらテスト失敗にして終了する設定にする
    (コケたテスト周りをローカルで調査)
  • 同じbranchにpushしたらbuild cancelされて新しいcommitに対してbuildが走る設定がある
  • [skip ci]コメント
  • お金で殴りつけて並列化数を増やす

###ergodoxのススメ(1)

  • 肩がこらない
  • 真ん中にモノがおける
  • 右手を少しずらすとトラックパッドが使える

image


###ergodoxのススメ(2)

  • 左右のL1に切り替える部分をshiftのように押しているときだけ切り替わるようにしている。
  • レイヤーが勝手に切り替わることがないので、ストレスがすくない。
  • レイヤーは全部で3つ存在して、記号数字が押しやすいもの、マウス操作ができるものという感じ。

image

image


###mac便利なアプリ

kiritori
何か(図など)見ながらコーディングしたい時に、スクリーンショットとして全面に出てきてくれる。

image

image


###tigのススメ(1)

gitの操作がcuiでtoolですごく簡単

git rebase -i
git reset soft
git cherry-pick
該当コミットのPullRequestを確認
git stashの管理
git add reset操作がし易い
git add -p
git add 1行単位の操作


tig 操作demo


###tigのススメ(2)

[WIP]説明を追加したい
すごく便利なので是非使って欲しい。
参考:tigでgitをもっと便利に! addやcommitも
設定関連ココ見ればだいたい乗ってます

.tigrc
set diff-options = -m --first-parent
set main-view = id date author commit-title:graph=yes,refs=yes

# open-prというshellを実行(この変更が載っているgithub pull requestを開くshell)
bind generic p @open-pr %(commit)
# ↓かんたん rebase -i 設定
bind diff R !git rebase -i %(commit)
bind main S none
# コミットを基準にリセットしてやりなおす(変更はcommitされてない状態で残る)
bind main S !git reset --soft %(commit)
# ディレクトリ階層関係なくファイル削除できるスクリプト(yes/no聞かないサクサク消す)
bind status D @delete_git_file %(file)


###tigで利用しているスクリプト

open-pr
#! /bin/zsh
merge_commit=$(ruby -e 'print (File.readlines(ARGV[0]) & File.readlines(ARGV[1])).last' <(git rev-list --ancestry-path $1..master) <(git rev-list --first-parent $1..master))
if git show $merge_commit | grep -q 'pull request'
then
  pull_request_number=$(git log -1 --format=%B $merge_commit | sed -e 's/^.*#\([0-9]*\).*$/\1/' | head -1)
  url="${$(hub browse -u)}/pull/${pull_request_number}"
fi
open $url
delete_git_file
#! /bin/sh
path=$(git rev-parse --show-toplevel)
file_path="${path}/$1"
rm $file_path

#ありがとうございました。

64
57
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?