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
Rubocopとの付き合い方
Search
Yasutomo Uemori
PRO
July 29, 2017
Programming
0
39
Rubocopとの付き合い方
第78回ruby関西での登壇資料です。
https://rubykansai.doorkeeper.jp/events/62491
Yasutomo Uemori
PRO
July 29, 2017
Tweet
Share
More Decks by Yasutomo Uemori
See All by Yasutomo Uemori
いまどきのゲームサーバアーキテクチャ
wakaba260
PRO
1
220
オンラインゲームのRails複数db戦略
wakaba260
PRO
0
67
Active job meets kubernetes
wakaba260
PRO
0
34
Ruby/Rails Benchmarking and Profiling with TDD
wakaba260
PRO
0
44
GCP・GKEで作るスケーラブルなゲーム開発環境
wakaba260
PRO
0
51
サービスクラス、その前に
wakaba260
PRO
0
32
Rails on Dockerとの戦い
wakaba260
PRO
0
34
Rails api way in aiming
wakaba260
PRO
0
36
ゲーム会社でのRuby : rails活用事例
wakaba260
PRO
0
51
Other Decks in Programming
See All in Programming
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
330
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
370
Benchmark
sysong
0
230
Bytecode Manipulation 으로 생산성 높이기
bigstark
2
360
関数型まつりレポート for JuliaTokai #22
antimon2
0
140
Using AI Tools Around Software Development
inouehi
0
1.2k
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
300
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
390
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
170
Claude Codeの使い方
ttnyt8701
1
130
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
140
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
The Language of Interfaces
destraynor
158
25k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
4 Signs Your Business is Dying
shpigford
184
22k
Six Lessons from altMBA
skipperchong
28
3.8k
Speed Design
sergeychernyshev
31
1k
Embracing the Ebb and Flow
colly
86
4.7k
BBQ
matthewcrist
89
9.7k
Statistics for Hackers
jakevdp
799
220k
Transcript
rubocop との付き合い方
self.inspect 植森 康友 所属: 株式会社Aiming 役職: エンジニア 管理ツー ル開発 WebAPI
開発 Docker おじさん SNS: twitter: @wakaba260yen github: yuemori
今日の話 コー ドレビュー rubocop 守破離
コー ドレビュー
コー ドレビュー、 してますか?
コー ドレビュー がなぜ必要なのか 新人教育 品質向上 相互学習
でも、 ちょっとまって
そのレビュー、 本当に必要?
例えば、 こういうレビュー
コー ドレビュー の本質 コー ドレビュー に慣れないチー ムが、 何の考えもナシにコー ドレビ ュー
を始めるととにかく気になったこと大小様々 な指摘が行われる ことになる。 一見、 いろいろな指摘が出て議論が活発になっている ように見えるが、 だいたい議論が紛糾しているのは「 コー ドのイン デント幅が違う」 とか「return が省略されてる。 俺は return があ ったほうが好み」 とか「 その場合は字下げをした方が綺麗にみえる んでは」 とか、 そんな些末なことばかりである、 ということが多い naoya のはてなダイアリー「 些末なコー ドレビュー」 より http://d.hatena.ne.jp/naoya/20140313/1394664578
コー ドレビュー の本質 そんなことを延々 議論していたって、 はっきり言って何の意味もな い。 何の意味もない、 は言い過ぎにしても、 そんなところを改善し
たところで実質的な品質は何ひとつ上がらないわけだし、 どうして も揃えたいなら lint ツー ルか何かで機械的にチェックすればよいこ とであって人間がやることではない。 naoya のはてなダイアリー「 些末なコー ドレビュー」 より http://d.hatena.ne.jp/naoya/20140313/1394664578
コー ドレビュー の本質 やらなければいけないのは、「 その設計は拡張に対して開いていな いから開くべき」 とか「 これではエッジケー スが想定されていない からこういう不具合につながるのでは」
とか「 そのテストでは後日 見返したときに第三者が要求仕様を解釈しづらい」 とかそういう指 摘である。 naoya のはてなダイアリー「 些末なコー ドレビュー」 より http://d.hatena.ne.jp/naoya/20140313/1394664578
再び、 コー ドレビュー がなぜ必要なのか 新人教育 品質向上 相互学習 => より本質的なことにクロー ズアップした教育をしたい
=> 変更や拡張、 バグ回避などに重点を置きたい => 設計や実装などのより良い議論に時間を使いたい
"lint ツー ルか何かで機械的にチェックすればよい"
None
rubocop、 使ってますか?
rubocop とは Ruby の静的解析ツー ル コー ディングルー ルを始め、 様々 な静的解析を行ってくれる
コー ディングルー ルは同作者のruby‑style‑guide に準拠 https://github.com/bbatsov/ruby‑style‑guide
コー ディングルー ル? Ruby には公式のコー ディングルー ルがない Ruby の思想 =
Happy Hacking! 楽しくプログラミングできるようにデザインされた言語 おのおのが好きなように、 楽しくかけるのが重要
コー ディングルー ル? しかし、 必ずしも一人が楽しければHappy ではない 他人のコー ドを読む・ 触るとき 他人にコー
ドを書いてもらうとき(Pull Request!) 業務においてはコー ドが自分だけのものではない 状況に応じた適切なコー ディングルー ルがあるとみんながハッピー になれる
静的解析の恩恵 rubocop はスタイルチェックだけではない Metrics、Performance、Security、etc... より良いコー ドを書くためのチェックも行う より綺麗で読みやすいコー ドを書けるようになる
rubocop の機能紹介
Cop I n R u b o C o p
l i n g o t h e v a r i o u s c h e c k s p e r f o r m e d o n t h e c o d e a r e c a l l e d c o p s rubocop の用語で、 コー ド上で実行される検査のことをCop と呼ぶ Cop の種類 Style Layout Lint Metrics Performance Security Rails Bundler
StyleCop コー ディングスタイルに対するCop。 コー ディングルー ルの一貫性のチェックを行う。 デフォルトはruby‑style‑guide に準拠。 設定により変更することもできる。
LayoutCop レイアウトに対するCop。 インデント、alignment、 空白などに対するチェックを行う。
LintCop エラー に対するCop。 曖昧な表現や、 エラー に対するチェックを行う。
MetricsCop メトリクスに対するCop。 コー ドの複雑さや保守性などのメトリクスを解析しチェックを行う。
PerformanceCop パフォー マンスに対するCop。 パフォー マンスの低いコー ドのチェックを行う。
SecurityCop セキュリティに対するCop。 セキュリティに問題のあるコー ドのチェックを行う。
RailsCop Rails に対するCop。 Rails に特定したコー ドのチェックを行う。
BundlerCop Bundler に対するCop。 Bundler に特定したコー ドのチェックを行う。
auto‑correct auto‑correct 対応のCop に対し、 自動整形を行う。
Todo r u b o c o p - -
a u t o - g e n - c o n f i g を実行することで、Todo リストを作成 することができる。 「 今は直せない負債」 を目に見える形で残すことができるため、 既存プ ロジェクトへの導入などに効果的
守破離
rubocop はきょうせいギブス
rubocop はきょうせいギブス 1 ファイルに警告×300 個
やかましい!
ちょっとまった
Configuration .rubocop.yml を設置することで設定を変更することができる コー ディングルー ルなどプロジェクト内の設定を記述する
守破離って、 知ってますか?
守破離 日本での茶道、 武道、 芸術等における師弟関係のあり方の一つ 個人のスキル( 作業遂行能力) を3 段階のレベルで表している
守破離 まずは、 師匠の教えを守る 「 型を守る」 ところから修行を始める => 支援のもとに作業を遂行できる( 半人前) =>
自律的に作業を遂行できる(1 人前)
守破離 型を研究し自分と照らし合わせていき、 自分にあった型を見つける 自分の型を作ることで「 型を破る」 => 作業を分析し改善・ 改良できる(1.5 人前)
守破離 最終的に師匠の型と自分が作り出した型の上に立脚する個人になる 型から自由になり、 型から「 離れ」 て自在になることができる => 新たな知識( 技術) を開発できる(
創造者)
守破離 守:rubocop 先生に教えを請う 破:rubocop のルー ルを自分に合わせて改善する 離: 自分なりのコー ディングスタイルを確立する 自分のレベルに合わせたrubocop
の活用をしていく 画像引用: http://www.motivation‑up.com/motivation/shuhari.html
rubucop.yml rubocop 用の設定ファイル。rubucop の警告の挙動を変更する デフォルトでイケてないなと思う挙動を変更する( 結構ある) 不要なルー ルは無効化する 好きな方を選べるルー ルも多い(
インデントスタイルなど) ‑> 自分なりのrubocop.yml を育てていくことで「 離」 につながる
よりrubocop を活かすために
rubocop を入れただけでは平和にならない
rubocop を入れただけでは平和にならない 入れただけでは守らない そのうち警告がうるさくなってきて無視 そして戦場へ...
CI、 自動チェック git hook pre‑commit, pre‑push チー ム全体でhook を共有しておくのがおすすめ github
連携 houndci, sideci など
設定相談 rubocop の設定を議論することで共通認識ができる 気に入らないルー ルはissue などで相談する ‑> rubocop の設定を チー
ムの合意 にする
ロー カルでの自動チェック エディタ連携 guard‑rubocop
rubocop の導入 既存プロジェクトに入れるのはコストがかかるのでtodo を活かす プロジェクトに入れるなら最初から入れる 個人プロジェクトにデフォルト設定で入れるのが一番おすすめ 自分のコー ディングの弱点を知る そのうち「 これは本質的な警告じゃないな」
と思うようになる rubocop の教えを理解した上で無効化するようにしていく
まとめ 自動化できるチェックはrubocop で自動化する rubocop は自分やチー ムの段階に応じて調教していく rubocop と一緒に成長し自分なりのコー ディングスタイルの確立へ
ご静聴ありがとうございました
最後に一つ宣伝を
None
rails developer meetup 第一線で活躍する開発者や企業から知見を学び現場で活かせる考え 方やテクニックを得る非営利勉強会 所属企業と地域の枠を超えた技術コミュニティ なんのコネもない開発者・ 企業に唐突に登壇依頼をする運営スタイ ル
次回 日時: 8/24( 木) の19 30~ connpass の募集は8/1 から ハッシュタグ:
#railsdm keynote: pocke さん、 伊藤淳一さん 興味のある方は是非ご参加ください