Upload
koichiro-sumi
View
492
Download
0
Embed Size (px)
Citation preview
[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をいっしょに作らなイカ? エンジニア様募集中!