Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コードレビューを支える技術
Search
ktrysmt
June 01, 2017
Technology
1
990
コードレビューを支える技術
6/1 2017 社内LT会で発表したときの資料です
ktrysmt
June 01, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
210
いまからでも遅くないコンテナ座学
nomu
0
130
型情報を用いたLintでコード品質を向上させる
sansantech
PRO
2
140
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
300
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
190
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
130
re:Invent 2024 Innovation Talks(NET201)で語られた大切なこと
shotashiratori
0
320
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
18
5.6k
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
120
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
500
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
290
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
280
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
GraphQLとの向き合い方2022年版
quramy
44
13k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Writing Fast Ruby
sferik
628
61k
Embracing the Ebb and Flow
colly
84
4.5k
Producing Creativity
orderedlist
PRO
342
39k
BBQ
matthewcrist
85
9.4k
Fireside Chat
paigeccino
34
3.1k
How to Ace a Technical Interview
jacobian
276
23k
Bash Introduction
62gerente
609
210k
Six Lessons from altMBA
skipperchong
27
3.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Transcript
コードレビューを支える技術 コードレビューを支える技術 Kotaro Yoshimatsu 6/1 2017
WHOAMI WHOAMI Kotaro Yoshimatsu @ktrysmt 学生時代 Perl monger 受託開発会社 5年くらい
リクルート 2年目 https://twitter.com/ktrysmt https://github.com/ktrysmt
みなさん
コードレビューしてますか。
わたしのある日のプルリクレビュー →
プルリクの本数 だいたいいつも6~8本 技術スタック JS,CSS(フロントエンド) PHP NodeJS Ruby Docker その他インフラ系いろいろ アサインされてないやつも時々巡回してたり...
問題点 1. 技術スタックが多岐にわたる 2. そもそも数が多い
対策します
1. 豊富な技術スタック 2. 数が多い
1. 豊富な技術スタック 1. 豊富な技術スタック
技術スタックが多岐にわたるのは どうすればいい か。
エコシステムが巨大で対応技術の多い, 安定した開 発環境が必要。
→ Vimでしょ。
(すみませんただの好みです) 一応弁明すると, Vimもプラグインが豊富にあり,CLIベースなので柔 軟。 大抵の言語は標準でサポート,それ以外もエコシステ ムがだいたい吸収してくれる。
Vimについては語りだすとキリがないので… コードレビューに役立ちそうなTipsなどを一部紹介。
プラグインマネージャ vim-fugitive ale vim-easymotion tagbar & ler auto-ctags 高速vimgrep(※後述)
プラグインマネージャ 使いましょう。 Dein, Plug, NeoBundle など
ありがちなのが...
「プラグイン入れすぎて重くなってきた」
(エディタやIDEによりますが) ファイルタイプや拡張子ごとに読み込むプラグインを 絞って速度を維持するなど Plug の例 Plug 'fatih/vim-go', { 'for': 'go'
}
vim-fugitive Vim上でGit操作いろいろできるやつ。 :Gdiff が便利, [c,]c でhunk単位で移動 レビューでは :Gblame がマジ便利
ale 最近の言語とそのエコシステムに一通り対応してる lint & static check の基盤。 主要言語の静的解析にだい たい対応してる。 非同期対応なので作業の邪魔をせず,快適。
特別な設定なしにプラグインを入れるだけでいいのが Good。
vim-easymotion コード上を縦横無尽に動き回れるようになる
tagbar & ler IDEチックに
auto-ctags ctagsのタグファイル自動生成。 :Ctags でOK let g:auto_ctags = 1 で保存時に自動生成
ctagsとは auto-ctagsはこのタグファイル生成をVimから操作し やすくしてくれます。 変数・関数・DOCコメント等の定義リスト(タグファイル)をソ ースコードから生成するツールで,IDEでよくある宣言ジャンプや 呼び出し元への復帰を助ける仕組み。
ctagsについて補足 ctagsはメンテされていないらしいので... universal-ctags を使いましょう
universal-ctags ビルドインストールを推奨 ちゃんとメンテされてる(モダン言語にも対応し てる) 前述のauto-ctagsで,Vimが更に便利に。
豊富な技術スタック対策のまとめ 巨大なエコシステムに乗っかりましょう Vim以外にも色々 IntelliJ,Emacs,Atom,VSCode... 最近だとVSCODEもいいですね 開発が活発 IDEらしさもちゃんとあり プラグインが豊富 意外と軽い 無料
自分の手に馴染むものを選び,育てましょう
次。
2. 数が多い 2. 数が多い
→ 気合で。
2. 数が多い → 気合 (!?) 2. 数が多い → 気合 (!?)
というのは(半分)冗談で…。
高速化・効率化できる工夫をしていきましょう。
効率化できる余地を探す
私の環境の場合 zsh, vim, tig, tmux etc... という感じなので...
この辺の手入れをしてみる git tig zsh grep それぞれ高速化・効率化できそうな箇所を探していき ます
git
レビューでよくつかうコマンド alias gdw="git diff --color-words" alias glogg='git log --graph --name-status
-- pretty=format:"%C(red)%h %C(green)%an %Creset%s %C(yellow)%d%Creset"' b4b4r07/git-br
alias gdw="git diff --color-words" インラインdiff spaceやインデントをスルーしてくれるので変数名・ 関数名の変更などが見やすくなる 通常のgit diffと適宜使い分け。
alias glogg='git log --graph --name-status -- pretty=format:"%C(red)%h %C(green)%an %Creset%s %C(yellow)%d%Creset"'
tigがめんどくさいときに。--prettyは表現力が高い ので自分の使いやすいように加工すると良い。
b4b4r07/git-br gbr(git branch --remote)の出力をfuzzy nderで絞込選 択し,選択後自動的に当該ブランチをチェックアウト します。 マジ便利。 特に,ブランチ名が長い・リモートブランチ数が多い リポジトリにおすすめ。
元ソース(小さなShellScript)を,少しいじって使っ てます https://github.com/b4b4r07/git-br
tig
私の.tigrc bind generic g move-first-line bind generic G move-last-line bind
main G move-last-line bind main R !git rebase -i %(commit) bind diff R !git rebase -i %(commit) set main-view = id:width=6 date author commit-title:graph=yes,refs=yes set diff-context = 6 set split-view-width = 70% set line-graphics = utf-8
こういうことやってる split表示時の幅をもう少し広く g,G を使ってより移動をVimっぽく 任意のログ行で Shift + R すると git
rebase -i 起動 行頭にコミットハッシュ値を6文字表示 diff閲覧時の差分の前後を3行→6行に増やす
zsh
いろいろあります 高速プラグインマネージャ 各種プラグイン zzy nder との組み合わせ zshのパフォーマンス計測
高速プラグインマネージャ antigen, zgen, zplug など zsh使うならぜひ使いましょう これがないと生きていけない...
各種プラグイン oh-my-zsh/plugins/* zsh-users/* だいたいこの辺入れとけばいい感じになります (特に補完系) それぞれかなり量が多いので,使えそうだなと思った ものから一つずつ試してみると良いです (特に補完系)
zzy nder との組み合わせ ghq + peco powered_cd + fzf
ghq + peco history | peco と似たような感じ リポジトリで管理されているものは全部 ghq get
で取 得するようにすると,幸せになれます alias gh='cd $(ghq list -p | peco)' ghq管理下のリポジトリ一覧から pecoで選んで cd
powerd_cd + fzf powered_cd は,薄いshellscript enhancdと似てますが,enhancdはちょっと高機能す ぎるというときに リポジトリ管理外の書き捨てのコードや一時的に落と しただけのソースがある場所も含め,全体的にcdの 履歴管理をしてくれます
alias c="powered_cd" は必須です マジ便利 http://qiita.com/arks22/items/8515a7f4eab37cfbfb17
zshのパフォーマンス計測
zshを色々いじりだすと,zshの起動時間の遅さが気に なってくる
特に私はtmuxを多用するので,zshの起動時間はでき るだけ速いほうが嬉しい...
計測をしたい
単純な例
で,Initializeにかかる時間を計測 (↑起動してすぐexitしてる) $ time (zsh -i -c exit)
遅い箇所をもうちょっと特定できないか
できます
こういうのを仕込むと # .zshenv zmodload zsh/zprof && zprof # .zshrc の末行に
if (which zprof > /dev/null) ;then zprof | less fi
起動時に計測結果が表示される 使わないときは .zshenv のほうをコメントアウト
話はわかったが
めんどくさい!
...というあなたに sh & sherman おすすめ
ほぼ設定不要 軽い デフォルトの状態でかなり便利 補完 履歴管理,などなど プラグインマネージャーも安定( sherman) http:// shshell.com
高速grep
高速grepといえば ag, pt, ack いろいろありますが...
ripgrep
インストールしておくといいです 並列処理で,めちゃくちゃ速い https://github.com/BurntSushi/ripgrep
Vimmer向け 外部vimgrepにripgrepを設定するとマジで幸せになれ ます! if executable("rg") set grepprg=rg\ --vimgrep\ --no-heading set
grepformat=%f:%l:%c:%m,%f:%l:%m endif command! -nargs=* -complete=file Rg :tabnew | :silent grep <args>
注意点 デフォルトでは出力結果がsortはされないので, --sort-files をつけるか, | sort するとよいです --sort-files はシングルスレッドになるので, パフ
ォーマンスに注意。
数が多い対策のまとめ 速いは正義 工夫の余地はいろいろあります (それでも気合は必要)
コードをがっつり追いかけるときのレビューが主題だ ったので今回は割愛しますが, プルリク文脈での OSSもいろいろあります。 楽しそう https://github.com/facebook/mention-bot http://haya14busa.com/reviewdog/
まとめ 本当にその作業は必要ですかという業務ハックも, もちろん大事ですが… 一技術者として, 手に馴染んだ道具を手入れしたり,工夫したりするこ とも大切なことだと思います。
普段から手入れをしておくと, 本当に困ったとき=緊急時,救われます。
引き続き,作業効率が改善する仕組みやツールを探し 中です。 みなさんも「これ便利だよ」というものがありました ら教えてください。 泣いて喜びます
EOD