SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
[Confidential] © 2013 Actcat, Inc. 1
Ruby用の静的コード解析ツール
ざくっと紹介
[Confidential] © 2013 Actcat, Inc.
はじめに 自己紹介
n プログラマ向けサービス「SideCI」を	
  
開発している角(スミ) です	
  
n エンジニアとしては	
  
Ruby,	
  Obj-­‐C,	
  Android	
  Javaなどが長いです	
  
n 毎月第四水曜日に「新宿.rb」を開催して
ます	
  
2
[Confidential] © 2013 Actcat, Inc.
コードレビュー	
  
してますか?
3
[Confidential] © 2013 Actcat, Inc. 4
PullRequestが届いたよ!	
  
[Confidential] © 2013 Actcat, Inc.
	
  なんでインデントが	
  
タブなんだろう(	
  ・ω・)
5
[Confidential] © 2013 Actcat, Inc.
tmp1,	
  tmp2,	
  v1,	
  v2…	
  
何の変数か分からない(	
  ・ω・)	
  
6
[Confidential] © 2013 Actcat, Inc.
$global1,	
  $global2,	
  @@global3…	
  
(	
  ・ω・)	
  
7
[Confidential] © 2013 Actcat, Inc.
こんな時こそ	
  
8
[Confidential] © 2013 Actcat, Inc.
コードレビューの自動化	
  
9
[Confidential] © 2013 Actcat, Inc. 10
引用	
  
https://houndci.com/
[Confidential] © 2013 Actcat, Inc.
HoundCIの裏側は?
OSSのLintツール・Styleチェックツール	
  
n RuboCop	
  
n CoffeeLint	
  
n JSHint	
  
n SCSS-­‐Lint	
  
n haml-­‐lint	
  
11
[Confidential] © 2013 Actcat, Inc. 12
引用	
  
https://www.sideci.com/
[Confidential] © 2013 Actcat, Inc.
SideCIの裏側は?
n RuboCop	
  
n CoffeeLint	
  
n JSHint	
  
n SCSS-­‐Lint	
  
n haml-­‐lint	
  
n Brakeman	
  
n RailsBestPractices	
  
n Reek	
  
n PHP_CodeSniffer	
  
n PHPMD	
  
13
[Confidential] © 2013 Actcat, Inc.
SideCIを	
  
HoundCIを知っている方に	
  
ざっくり説明すると	
  
14
[Confidential] © 2013 Actcat, Inc.
HoundCI	
  
-­‐	
  haml-­‐lint,	
  SCSS-­‐Lint	
  
+	
  Brakeman,	
  RailsBestPractices,	
  Reek	
  
−	
  $12	
  /month	
  
=	
  SideCI	
  
15
[Confidential] © 2013 Actcat, Inc.
今日紹介したい3つの静的解析ツール
1.  Brakeman	
  
2.  Reek	
  
3.  RailsBestPractices	
  
16
[Confidential] © 2013 Actcat, Inc.
Brakeman
n 個人的に一押しのGem	
  
n Rails用セキュリティスキャナ	
  
n 初心者から、普段Rails使いの方まで
17
[Confidential] © 2013 Actcat, Inc.
コード例	
  
18
[Confidential] © 2013 Actcat, Inc.
Rails	
  Beginnerさんのコードに	
  
たまにあるある	
  
19
[Confidential] © 2013 Actcat, Inc.
Possible SQL injection
Problem	
  Code	
  
	
  User.first(:conditions	
  =>	
  "username	
  =	
  
'#{params[:username]}'")	
  
	
  
Brakeman	
  Scan	
  Result	
  
	
  Possible	
  SQL	
  injection
20
[Confidential] © 2013 Actcat, Inc.
SideCIのコードでも問題	
  
見つかった(´・ω・`)	
  
21
[Confidential] © 2013 Actcat, Inc.
XSS Vulnerability in
ActiveSupport::JSON.encode
There	
  is	
  an	
  XSS	
  vulnerability	
  in	
  the	
  
ActiveSupport::JSON.encode	
  method	
  in	
  Ruby	
  
on	
  Rails.	
  	
  
This	
  vulnerability	
  has	
  been	
  assigned	
  the	
  CVE	
  
identifier	
  CVE-­‐2015-­‐3226.	
  	
  
	
  
Versions	
  Affected:	
  	
  3.0.x,	
  3.1.x,	
  3.2.x,	
  4.1.x,	
  4.2.x.	
  	
  
Not	
  affected:	
  	
  	
  	
  	
  	
  	
  4.0.x.	
  	
  
Fixed	
  Versions:	
  	
  	
  	
  	
  4.2.2,	
  4.1.11	
  	
  
22
Found	
  in	
  Gemfile.lock
[Confidential] © 2013 Actcat, Inc.
JSON.encode	
  使ってる人は	
  
4.2.2以降、4.1.11以降に	
  
アプデしよう!	
  
23
[Confidential] © 2013 Actcat, Inc.
Reek
n コードのSmellを見つけるGem	
  
n Smellは「コードが読みにくい、または保
守しづらい場所を示唆するもの(indicators	
  
of	
  where	
  your	
  code	
  might	
  be	
  hard	
  to	
  read,	
  
maintain	
  or	
  evolve)」	
  
24
[Confidential] © 2013 Actcat, Inc.
コード例	
  
25
[Confidential] © 2013 Actcat, Inc.
ちょっと冗長な感じしない?
26
[Confidential] © 2013 Actcat, Inc.
ちょっと(?)読みづらくない?
27
[Confidential] © 2013 Actcat, Inc.
ネストが深い
1つのメソッドに命令文が多い
28
[Confidential] © 2013 Actcat, Inc.
ちなみに修正後コード
29
[Confidential] © 2013 Actcat, Inc.
Reekの詳細記事と	
  
設定のカスタマイズ	
  
ブログ書いたよ	
  
	
  
Rubyのコードスメルチェックツールreekで
「こんなコードは嫌!」っていうのを防ごう	
  
http://sideci.hatenablog.com/entry/
2015/05/19/161330	
  
30
[Confidential] © 2013 Actcat, Inc.
RailsBestPractices
n コミュニティサイトの投票結果を元
に作られたGem	
  
n Railsのコードのベスト・プラクティスを使
うべきところを見つけてくれる	
  
n わりと面白い。色々出る	
  
31
[Confidential] © 2013 Actcat, Inc.
コード例	
  
32
[Confidential] © 2013 Actcat, Inc.
Always add DB index
*_id系は常にdb index貼ろうよ警告
ActiveRecord::Schema.define(version:	
  
20131103153637)	
  do	
  
	
  	
  create_table	
  "book_authors",	
  force:	
  true	
  do	
  |t|	
  
	
  	
  	
  	
  t.integer	
  	
  "book_id"	
  
	
  	
  	
  	
  t.integer	
  	
  "author_id"	
  
	
  	
  	
  	
  t.datetime	
  "created_at"	
  
	
  	
  	
  	
  t.datetime	
  "updated_at"	
  
	
  	
  end	
  
33
[Confidential] © 2013 Actcat, Inc.
remove empty helpers
空っぽだから消そうね、はい
module	
  ItemsHelper	
  
end	
  
34
[Confidential] © 2013 Actcat, Inc.
3つの静的解析ツール まとめ
1.  Brakeman	
  
l  セキュリティのアップデート情報と
初歩的ミスに役立つ	
  
2.  Reek	
  
l  コードの悪い傾向を検知、予防でき
る	
  
3.  RailsBestPractices	
  
l  Rails特有のbetterな方法について
チェックできる	
  
35
[Confidential] © 2013 Actcat, Inc. 36
紹介した全てのツールで自動的にプルリクを解析、
プルリクに結果をコメントします。	
  
設定の所要時間は30秒,	
  利用料無料。今すぐ!	
  
SideCIをいっしょに作らなイカ?
エンジニア様募集中!	
  

Contenu connexe

Tendances

Angularおじさんの1年
Angularおじさんの1年Angularおじさんの1年
Angularおじさんの1年Hayashi Yuichi
 
Front-end package managers
Front-end package managersFront-end package managers
Front-end package managersHayashi Yuichi
 
#reco_tech Cloud searchでレコチョク検索の実現に向けて
#reco_tech   Cloud searchでレコチョク検索の実現に向けて#reco_tech   Cloud searchでレコチョク検索の実現に向けて
#reco_tech Cloud searchでレコチョク検索の実現に向けてrecotech
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築Hayashi Yuichi
 
Riotjsハンズオン
RiotjsハンズオンRiotjsハンズオン
Riotjsハンズオンomi end
 
hypermicrodata-client
hypermicrodata-clienthypermicrodata-client
hypermicrodata-clientIto Kunihiko
 
JSR353をGroovyで賢く使う
JSR353をGroovyで賢く使うJSR353をGroovyで賢く使う
JSR353をGroovyで賢く使うYasuharu Hayami
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Takashi Sogabe
 
【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開
【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開
【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開Unity Technologies Japan K.K.
 
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_Akito Tsukahara
 
JSオジサン openframeworks emscripten
JSオジサン openframeworks emscriptenJSオジサン openframeworks emscripten
JSオジサン openframeworks emscriptenminoru nakanou
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first timeYusuke Yamada
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)Hiroyuki Ohnaka
 

Tendances (16)

LIGでのDocker活用
LIGでのDocker活用LIGでのDocker活用
LIGでのDocker活用
 
Angularおじさんの1年
Angularおじさんの1年Angularおじさんの1年
Angularおじさんの1年
 
Front-end package managers
Front-end package managersFront-end package managers
Front-end package managers
 
CSS Living StyleGuide
CSS Living StyleGuideCSS Living StyleGuide
CSS Living StyleGuide
 
#reco_tech Cloud searchでレコチョク検索の実現に向けて
#reco_tech   Cloud searchでレコチョク検索の実現に向けて#reco_tech   Cloud searchでレコチョク検索の実現に向けて
#reco_tech Cloud searchでレコチョク検索の実現に向けて
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築
 
いまさら触るAwt
いまさら触るAwtいまさら触るAwt
いまさら触るAwt
 
Riotjsハンズオン
RiotjsハンズオンRiotjsハンズオン
Riotjsハンズオン
 
hypermicrodata-client
hypermicrodata-clienthypermicrodata-client
hypermicrodata-client
 
JSR353をGroovyで賢く使う
JSR353をGroovyで賢く使うJSR353をGroovyで賢く使う
JSR353をGroovyで賢く使う
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)
 
【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開
【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開
【Unity道場 名古屋SP】Unity導入から活用までの開発フローを大公開
 
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
 
JSオジサン openframeworks emscripten
JSオジサン openframeworks emscriptenJSオジサン openframeworks emscripten
JSオジサン openframeworks emscripten
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 

En vedette

はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCIYosuke Mizutani
 
A Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsA Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsChris Parnin
 
When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadCarlos Eduardo
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smellskim.mens
 
Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?Felienne Hermans
 
Code Smell Research: History and Future Directions
Code Smell Research: History and Future DirectionsCode Smell Research: History and Future Directions
Code Smell Research: History and Future DirectionsNikolaos Tsantalis
 
A Textual-based Technique for Smell Detection
A Textual-based Technique for Smell DetectionA Textual-based Technique for Smell Detection
A Textual-based Technique for Smell DetectionFabio Palomba
 
Code Smell, Software Engineering
Code Smell, Software EngineeringCode Smell, Software Engineering
Code Smell, Software EngineeringAnshul Vinayak
 
Detecting Bad Smells in Source Code using Change History Information
Detecting Bad Smells in Source Code using Change History InformationDetecting Bad Smells in Source Code using Change History Information
Detecting Bad Smells in Source Code using Change History InformationFabio Palomba
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?Tushar Sharma
 
Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Anshul Vinayak
 
アイマス駆動開発 #shinjukurb
アイマス駆動開発 #shinjukurbアイマス駆動開発 #shinjukurb
アイマス駆動開発 #shinjukurbtreby
 
Werckerを使ってみた
Werckerを使ってみたWerckerを使ってみた
Werckerを使ってみたYoichi Toyota
 
Xcode 7で始めるCI
Xcode 7で始めるCIXcode 7で始めるCI
Xcode 7で始めるCIyuki0211s
 
無料な継続的出版システム ~ t-ceremony ~
無料な継続的出版システム ~ t-ceremony ~無料な継続的出版システム ~ t-ceremony ~
無料な継続的出版システム ~ t-ceremony ~Takashi Imagire
 
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineerKazuaki Matsuo
 
GitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうGitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうNobuhiro Ueda
 

En vedette (20)

はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCI
 
A Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsA Catalogue of Code Smell Visualizations
A Catalogue of Code Smell Visualizations
 
When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
 
Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?
 
Code Smell Research: History and Future Directions
Code Smell Research: History and Future DirectionsCode Smell Research: History and Future Directions
Code Smell Research: History and Future Directions
 
A Textual-based Technique for Smell Detection
A Textual-based Technique for Smell DetectionA Textual-based Technique for Smell Detection
A Textual-based Technique for Smell Detection
 
PhD Symposium 2014
PhD Symposium 2014PhD Symposium 2014
PhD Symposium 2014
 
Code Smell, Software Engineering
Code Smell, Software EngineeringCode Smell, Software Engineering
Code Smell, Software Engineering
 
Detecting Bad Smells in Source Code using Change History Information
Detecting Bad Smells in Source Code using Change History InformationDetecting Bad Smells in Source Code using Change History Information
Detecting Bad Smells in Source Code using Change History Information
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?
 
Code smells
Code smellsCode smells
Code smells
 
Code Smells and Its type (With Example)
Code Smells and Its type (With Example)Code Smells and Its type (With Example)
Code Smells and Its type (With Example)
 
アイマス駆動開発 #shinjukurb
アイマス駆動開発 #shinjukurbアイマス駆動開発 #shinjukurb
アイマス駆動開発 #shinjukurb
 
Werckerを使ってみた
Werckerを使ってみたWerckerを使ってみた
Werckerを使ってみた
 
Xcode 7で始めるCI
Xcode 7で始めるCIXcode 7で始めるCI
Xcode 7で始めるCI
 
無料な継続的出版システム ~ t-ceremony ~
無料な継続的出版システム ~ t-ceremony ~無料な継続的出版システム ~ t-ceremony ~
無料な継続的出版システム ~ t-ceremony ~
 
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
 
GitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうGitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろう
 

Similaire à Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb

ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurbActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurbKoichiro Sumi
 
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07Koichiro Sumi
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-Saki Homma
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力Kota Mizushima
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2lyrical_logical
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Tsunenori Oohara
 
Kubernetes 初心者の僕からの JKD 参加報告
Kubernetes 初心者の僕からの JKD 参加報告Kubernetes 初心者の僕からの JKD 参加報告
Kubernetes 初心者の僕からの JKD 参加報告Kentaro NOMURA
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~Saki Homma
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムGo Sueyoshi (a.k.a sue445)
 
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェックPHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェックKoichiro Sumi
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbKoichiro Sumi
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応Masaru Horioka
 
Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016Godai Nakamura
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 

Similaire à Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb (20)

ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurbActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~ at #shinjukurb
ActiveResourceモデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~ at #shinjukurb
 
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
Rubyでも今すぐ始められるCI How-to & Tips - SideCI TokyuRuby会議07 LT資料 #tqrk07
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
ドリコムのインフラCI
ドリコムのインフラCIドリコムのインフラCI
ドリコムのインフラCI
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Kubernetes 初心者の僕からの JKD 参加報告
Kubernetes 初心者の僕からの JKD 参加報告Kubernetes 初心者の僕からの JKD 参加報告
Kubernetes 初心者の僕からの JKD 参加報告
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
 
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェックPHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
PHPMD, PHP_CodeSniffer x SideCIによる継続的コードチェック
 
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
 
Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
 

Plus de Koichiro Sumi

Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会Koichiro Sumi
 
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...Koichiro Sumi
 
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話Koichiro Sumi
 
IVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCIIVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCIKoichiro Sumi
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話Koichiro Sumi
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡Koichiro Sumi
 
API通信周りの継続的なテストの仕組み~SideCIでの実践~
API通信周りの継続的なテストの仕組み~SideCIでの実践~API通信周りの継続的なテストの仕組み~SideCIでの実践~
API通信周りの継続的なテストの仕組み~SideCIでの実践~Koichiro Sumi
 
Git plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなすGit plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなすKoichiro Sumi
 
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9Koichiro Sumi
 
スタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERNスタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERNKoichiro Sumi
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIKoichiro Sumi
 
CIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったことCIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったことKoichiro Sumi
 
スタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERNスタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERNKoichiro Sumi
 
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420Koichiro Sumi
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterpriseKoichiro Sumi
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果Koichiro Sumi
 
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜Koichiro Sumi
 
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~Koichiro Sumi
 

Plus de Koichiro Sumi (20)

Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
 
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
エンジニアが作りたいものを本気で作るための起業という選択肢。レビュー支援サービスSiderの着想から現在、未来 | Rails developers me...
 
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話ベトナムのホーチミン・ハノイ・ダナンを1週間見て回った話
ベトナムのホーチミン・ハノイ・ ダナンを1週間見て回った話
 
IVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCIIVS CTO Night 2015 Winter LT資料 / SideCI
IVS CTO Night 2015 Winter LT資料 / SideCI
 
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
 
API通信周りの継続的なテストの仕組み~SideCIでの実践~
API通信周りの継続的なテストの仕組み~SideCIでの実践~API通信周りの継続的なテストの仕組み~SideCIでの実践~
API通信周りの継続的なテストの仕組み~SideCIでの実践~
 
Git plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなすGit plus something / Git+何かで更にGitを使いこなす
Git plus something / Git+何かで更にGitを使いこなす
 
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
ただのSEが初めてArduinoで遊んでみたw(今更 : 品モノラボ #9
 
スタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERNスタートアップの開発体制、流れ POPULAR PATTERN
スタートアップの開発体制、流れ POPULAR PATTERN
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 
CIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったことCIを取り入れ始めて超楽になったこと
CIを取り入れ始めて超楽になったこと
 
スタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERNスタートアップの開発体制、流れのBASIC PATTERN
スタートアップの開発体制、流れのBASIC PATTERN
 
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
Spath Workshop | 世の中をより良くするアイデアを形に出来るようになる会議 β版 20130420
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterprise
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果
 
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
スマートアップ スマートフォンサービス マーケティング手法 〜避けよう!弊社の失敗談編〜
 
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
iOSアプリの広告による収益化 ~各アドネットワークの傾向、SmAddによる収益最大化~
 
Smadd概要資料
Smadd概要資料Smadd概要資料
Smadd概要資料
 

Ruby用の静的コード解析ツールざくっと紹介 by SideCI #omotesandorb

  • 1. [Confidential] © 2013 Actcat, Inc. 1 Ruby用の静的コード解析ツール ざくっと紹介
  • 2. [Confidential] © 2013 Actcat, Inc. はじめに 自己紹介 n プログラマ向けサービス「SideCI」を   開発している角(スミ) です   n エンジニアとしては   Ruby,  Obj-­‐C,  Android  Javaなどが長いです   n 毎月第四水曜日に「新宿.rb」を開催して ます   2
  • 3. [Confidential] © 2013 Actcat, Inc. コードレビュー   してますか? 3
  • 4. [Confidential] © 2013 Actcat, Inc. 4 PullRequestが届いたよ!  
  • 5. [Confidential] © 2013 Actcat, Inc.  なんでインデントが   タブなんだろう(  ・ω・) 5
  • 6. [Confidential] © 2013 Actcat, Inc. tmp1,  tmp2,  v1,  v2…   何の変数か分からない(  ・ω・)   6
  • 7. [Confidential] © 2013 Actcat, Inc. $global1,  $global2,  @@global3…   (  ・ω・)   7
  • 8. [Confidential] © 2013 Actcat, Inc. こんな時こそ   8
  • 9. [Confidential] © 2013 Actcat, Inc. コードレビューの自動化   9
  • 10. [Confidential] © 2013 Actcat, Inc. 10 引用   https://houndci.com/
  • 11. [Confidential] © 2013 Actcat, Inc. HoundCIの裏側は? OSSのLintツール・Styleチェックツール   n RuboCop   n CoffeeLint   n JSHint   n SCSS-­‐Lint   n haml-­‐lint   11
  • 12. [Confidential] © 2013 Actcat, Inc. 12 引用   https://www.sideci.com/
  • 13. [Confidential] © 2013 Actcat, Inc. SideCIの裏側は? n RuboCop   n CoffeeLint   n JSHint   n SCSS-­‐Lint   n haml-­‐lint   n Brakeman   n RailsBestPractices   n Reek   n PHP_CodeSniffer   n PHPMD   13
  • 14. [Confidential] © 2013 Actcat, Inc. SideCIを   HoundCIを知っている方に   ざっくり説明すると   14
  • 15. [Confidential] © 2013 Actcat, Inc. HoundCI   -­‐  haml-­‐lint,  SCSS-­‐Lint   +  Brakeman,  RailsBestPractices,  Reek   −  $12  /month   =  SideCI   15
  • 16. [Confidential] © 2013 Actcat, Inc. 今日紹介したい3つの静的解析ツール 1.  Brakeman   2.  Reek   3.  RailsBestPractices   16
  • 17. [Confidential] © 2013 Actcat, Inc. Brakeman n 個人的に一押しのGem   n Rails用セキュリティスキャナ   n 初心者から、普段Rails使いの方まで 17
  • 18. [Confidential] © 2013 Actcat, Inc. コード例   18
  • 19. [Confidential] © 2013 Actcat, Inc. Rails  Beginnerさんのコードに   たまにあるある   19
  • 20. [Confidential] © 2013 Actcat, Inc. Possible SQL injection Problem  Code    User.first(:conditions  =>  "username  =   '#{params[:username]}'")     Brakeman  Scan  Result    Possible  SQL  injection 20
  • 21. [Confidential] © 2013 Actcat, Inc. SideCIのコードでも問題   見つかった(´・ω・`)   21
  • 22. [Confidential] © 2013 Actcat, Inc. XSS Vulnerability in ActiveSupport::JSON.encode There  is  an  XSS  vulnerability  in  the   ActiveSupport::JSON.encode  method  in  Ruby   on  Rails.     This  vulnerability  has  been  assigned  the  CVE   identifier  CVE-­‐2015-­‐3226.       Versions  Affected:    3.0.x,  3.1.x,  3.2.x,  4.1.x,  4.2.x.     Not  affected:              4.0.x.     Fixed  Versions:          4.2.2,  4.1.11     22 Found  in  Gemfile.lock
  • 23. [Confidential] © 2013 Actcat, Inc. JSON.encode  使ってる人は   4.2.2以降、4.1.11以降に   アプデしよう!   23
  • 24. [Confidential] © 2013 Actcat, Inc. Reek n コードのSmellを見つけるGem   n Smellは「コードが読みにくい、または保 守しづらい場所を示唆するもの(indicators   of  where  your  code  might  be  hard  to  read,   maintain  or  evolve)」   24
  • 25. [Confidential] © 2013 Actcat, Inc. コード例   25
  • 26. [Confidential] © 2013 Actcat, Inc. ちょっと冗長な感じしない? 26
  • 27. [Confidential] © 2013 Actcat, Inc. ちょっと(?)読みづらくない? 27
  • 28. [Confidential] © 2013 Actcat, Inc. ネストが深い 1つのメソッドに命令文が多い 28
  • 29. [Confidential] © 2013 Actcat, Inc. ちなみに修正後コード 29
  • 30. [Confidential] © 2013 Actcat, Inc. Reekの詳細記事と   設定のカスタマイズ   ブログ書いたよ     Rubyのコードスメルチェックツールreekで 「こんなコードは嫌!」っていうのを防ごう   http://sideci.hatenablog.com/entry/ 2015/05/19/161330   30
  • 31. [Confidential] © 2013 Actcat, Inc. RailsBestPractices n コミュニティサイトの投票結果を元 に作られたGem   n Railsのコードのベスト・プラクティスを使 うべきところを見つけてくれる   n わりと面白い。色々出る   31
  • 32. [Confidential] © 2013 Actcat, Inc. コード例   32
  • 33. [Confidential] © 2013 Actcat, Inc. Always add DB index *_id系は常にdb index貼ろうよ警告 ActiveRecord::Schema.define(version:   20131103153637)  do      create_table  "book_authors",  force:  true  do  |t|          t.integer    "book_id"          t.integer    "author_id"          t.datetime  "created_at"          t.datetime  "updated_at"      end   33
  • 34. [Confidential] © 2013 Actcat, Inc. remove empty helpers 空っぽだから消そうね、はい module  ItemsHelper   end   34
  • 35. [Confidential] © 2013 Actcat, Inc. 3つの静的解析ツール まとめ 1.  Brakeman   l  セキュリティのアップデート情報と 初歩的ミスに役立つ   2.  Reek   l  コードの悪い傾向を検知、予防でき る   3.  RailsBestPractices   l  Rails特有のbetterな方法について チェックできる   35
  • 36. [Confidential] © 2013 Actcat, Inc. 36 紹介した全てのツールで自動的にプルリクを解析、 プルリクに結果をコメントします。   設定の所要時間は30秒,  利用料無料。今すぐ!   SideCIをいっしょに作らなイカ? エンジニア様募集中!