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
36
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
190
オンラインゲームのRails複数db戦略
wakaba260
PRO
0
64
Active job meets kubernetes
wakaba260
PRO
0
32
Ruby/Rails Benchmarking and Profiling with TDD
wakaba260
PRO
0
40
GCP・GKEで作るスケーラブルなゲーム開発環境
wakaba260
PRO
0
48
サービスクラス、その前に
wakaba260
PRO
0
29
Rails on Dockerとの戦い
wakaba260
PRO
0
31
Rails api way in aiming
wakaba260
PRO
0
33
ゲーム会社でのRuby : rails活用事例
wakaba260
PRO
0
47
Other Decks in Programming
See All in Programming
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
230
インプロセスQAにおいて大事にしていること / In-process QA Meetup
medley
0
130
エンジニアが挑む、限界までの越境
nealle
1
310
個人開発の学生アプリが企業譲渡されるまで
akidon0000
2
1.1k
Amazon CloudWatchの地味だけど強力な機能紹介!
itotsum
0
230
Bedrock×MCPで社内ブログ執筆文化を育てたい!
har1101
7
1.4k
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.1k
Thank you <💅>, What's the Next?
ahoxa
1
590
2025-04-25 GitHub Copilot Agent ライブデモ(スクリプト)
goataka
0
100
Ruby on Railroad: The Power of Visualizing CFG
ydah
0
290
音声プラットフォームのアーキテクチャ変遷から学ぶ、クラウドネイティブなバッチ処理 (20250422_CNDS2025_Batch_Architecture)
thousanda
0
380
note の Elasticsearch 更新系を支える技術
tchov
9
3.4k
Featured
See All Featured
Unsuck your backbone
ammeep
671
57k
Building an army of robots
kneath
305
45k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Build your cross-platform service in a week with App Engine
jlugia
230
18k
GraphQLとの向き合い方2022年版
quramy
46
14k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Docker and Python
trallard
44
3.4k
Designing for humans not robots
tammielis
253
25k
Music & Morning Musume
bryan
47
6.5k
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 さん、 伊藤淳一さん 興味のある方は是非ご参加ください