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
12
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
91
オンラインゲームのRails複数db戦略
wakaba260
PRO
0
37
Active job meets kubernetes
wakaba260
PRO
0
14
Ruby/Rails Benchmarking and Profiling with TDD
wakaba260
PRO
0
18
GCP・GKEで作るスケーラブルなゲーム開発環境
wakaba260
PRO
0
27
サービスクラス、その前に
wakaba260
PRO
0
18
Rails on Dockerとの戦い
wakaba260
PRO
0
10
Rails api way in aiming
wakaba260
PRO
0
13
ゲーム会社でのRuby : rails活用事例
wakaba260
PRO
0
25
Other Decks in Programming
See All in Programming
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.4k
rails new flags - `rails new` のフラグから Rails を構成するコンポーネントの変遷をザックリ眺める
snaka
0
1.8k
Click-free releases & the making of a CLI app
oheyadam
2
120
Jakarta EE meets AI
ivargrimstad
0
380
デザインパターンで理解するLLMエージェントの作り方 / How to develop an LLM agent using agentic design patterns
rkaga
9
1.5k
Quine, Polyglot, 良いコード
qnighy
4
650
subpath importsで始めるモック生活
10tera
0
340
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
1.1k
Remix on Hono on Cloudflare Workers
yusukebe
1
320
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
C++でシェーダを書く
fadis
6
4.2k
Jakarta EE meets AI
ivargrimstad
0
290
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
297
20k
We Have a Design System, Now What?
morganepeng
50
7.2k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Documentation Writing (for coders)
carmenintech
65
4.4k
How to train your dragon (web standard)
notwaldorf
88
5.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Faster Mobile Websites
deanohume
305
30k
Building Adaptive Systems
keathley
38
2.3k
Agile that works and the tools we love
rasmusluckow
327
21k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
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 さん、 伊藤淳一さん 興味のある方は是非ご参加ください