Slide 1

Slide 1 text

ぼくのやってる ふつうのこと @wtnabe Kanazawa.rb meetup #14 2013-10-19 (Sat) at DMM.com Labo Kanazawa

Slide 2

Slide 2 text

お品書き

Slide 3

Slide 3 text

ざっくり Web開発のプラクティス 使ってるツール 本当に⼤切なプラクティス

Slide 4

Slide 4 text

ざっくり TDDとend-to-endテストの話多め 最後の話だけ覚えて、あとは適当に

Slide 5

Slide 5 text

Web開発のプラクティス1 バージョン管理 Tickets & Milestones deployの⾃動化

Slide 6

Slide 6 text

Web開発のプラクティス2 開発環境の仮想化と⾃動構築 Test-Driven Development Continuous Integration

Slide 7

Slide 7 text

使ってるツール1 Subversion ( Mercurial, Git ) Trac Capistrano Vagrant, Chef

Slide 8

Slide 8 text

使ってるツール2 Jenkins RSpec, SimpleTest, Jasmine, PhantomJS SimpleCov(RCov), PHPCPD, JSHint

Slide 9

Slide 9 text

Web開発のプラクティス

Slide 10

Slide 10 text

バージョン管理 全部⼊れる ログがあるので安⼼して忘れられる うまく⾏くかどうか分からない場合も元 に戻せるので安⼼ いわゆる共通ライブラリは別リポジトリ

Slide 11

Slide 11 text

Tickets & Milestones 〆切をMilestoneの締め⽇にしてタスクを その中に落とし込む 基本的に⼀つのタスク : ⼀つのチケット みんなが分かるようにする 「完了」可能なタスクにする

Slide 12

Slide 12 text

deployの⾃動化 ⼿作業はミスやブレに繋がる 「fiddlingを避けよ」『Release It !』p112 変なコツをなくす 誰がやっても同じになる

Slide 13

Slide 13 text

開発環境の仮想化と ⾃動構築 VMのセットアップから⾃動化 デザイナもLinux環境使ってます Win/Macの違いはもうありません

Slide 14

Slide 14 text

Test-Driven Development

Slide 15

Slide 15 text

の前に

Slide 16

Slide 16 text

どちらが本当? コードは触り続けると汚くなる コードは触り続けるときれいになる

Slide 17

Slide 17 text

どちらも本当

Slide 18

Slide 18 text

リファクタリング してますか?

Slide 19

Slide 19 text

リファクタリング “外から⾒えるふるまいを変えずに、ソフトウェ アをわかりやすくし、安いコストで変更できる ようにするために、ソフトウェアの内部構造に 加えられる変更。” 『リファクタリング: Rubyエディション』p76

Slide 20

Slide 20 text

あなたのコードは安⼼して 変更できますか?

Slide 21

Slide 21 text

TDD ⻑く使うコード、変更し続けるアプリは リファクタリングが重要 TDDはリファクタリングを最も効率よく ⾏う⽅法の⼀つ

Slide 22

Slide 22 text

TDD 完璧な⾃動化は⽬指さない カバレッジは場所によって0〜100% 機能の⼀部だけをテストできると捗る テストデータの⾃動⽣成やダブルの活⽤

Slide 23

Slide 23 text

Continuous Integration うっかりテスト実⾏漏れ防⽌ うっかり環境依存テスト防⽌ 静的解析便利

Slide 24

Slide 24 text

オススメ導⼊⼿順(案) バージョン管理 / deployの⾃動化 CI end-to-endテスト ユニットテスト

Slide 25

Slide 25 text

使ってるツール

Slide 26

Slide 26 text

Subversion 2006年くらいから(それ以前はCVS) Mercurial, Gitも⼀部併⽤ そのうちGitへ⼀本化するつもり

Slide 27

Slide 27 text

選択基準 当時は各種ツールのサポートがよかった GitのGUIは⻑らく貧弱だった コードホスティング、クラウド側の対応 はGitがイチバン

Slide 28

Slide 28 text

Trac Python製Issue Tracking System むしろSubversionはTracを使う理由 (CVSでは使えない)

Slide 29

Slide 29 text

Capistrano Ruby製deployツール 個⼈では2008年〜、組織では2011年〜 これを理由に関係者はRuby必須に 必須に RailsもPHPも

Slide 30

Slide 30 text

Vagrant, Chef Ruby製VM管理ツール + サーバ設定⾃動 化 開発環境構築の⾃動化と開発環境の統⼀ 「適当にVM作って設定漏れ」をなくす 昔からの⾃前ツールも組み合わせて テストにも絡んできます

Slide 31

Slide 31 text

Jenkins Continuous Integrationのスタンダード Java trunkを⾃動でテスト/静的解析 deployの記録も取るようにした

Slide 32

Slide 32 text

RSpec Ruby製テスティングフレームワーク BDDスタイル Ruby 1.8でも動く Railsと合わせて使うノウハウが多い けど、Rubyのコードならなんでもよい

Slide 33

Slide 33 text

SimpleTest PHP 4/5 両対応のフレームワーク ⾃前pear packaging 最新版はPHP 5⽤ ユニットテストとカバレッジ測定 レガシーなコードにはオススメ

Slide 34

Slide 34 text

RSpec + Capybara (end-to-end) with rspec-rails for PHP

Slide 35

Slide 35 text

Vagrant / RSpec + Capybara for PHP 開発環境の統⼀、URL完全⼀致 誰の環境でend-to-endテストを動かし ても同じように動作する Railsでのノウハウを流⽤

Slide 36

Slide 36 text

Vagrant / RSpec + Capybara for PHP PHPのバージョンに依らない 「ど真ん中」なのでメンテナンスが放棄 される不安がほぼない

Slide 37

Slide 37 text

Jasmine JavaScript⽤BDDフレームワーク gemで⼊れられる spec書きやすさのためにCoffeeScriptも テストはブラウザで実⾏ 最近はPhantomJSと組み合わせて

Slide 38

Slide 38 text

PhantomJS Headless Webkit Browser 2012年からインストールが超簡単に Jasmineと組み合わせてCIに Capybara + Poltergeistでend-to-endに

Slide 39

Slide 39 text

SimpleCov(RCov) Rubyのカバレッジ測定 ⾃動化はしてません あくまで⽬安の把握にしか使ってません

Slide 40

Slide 40 text

PHPCPD PHPのコピペチェッカ CIで記録取り

Slide 41

Slide 41 text

JSHint JavaScriptの静的スタイルチェッカ 設定項⽬ありすぎてうざい ruby wrapper⾃作してrakeで呼んでる wtnabe/jshint4r Node.js不要 対応バージョンが古い><

Slide 42

Slide 42 text

静的解析や計測 特にいじりにくいコードはコピペ率が⾼ くてカバレッジが低いといった特徴が⾒ えてくる 数値で分かるので⽬標を決めやすい

Slide 43

Slide 43 text

本当に⼤切なプラクティス

Slide 44

Slide 44 text

覚えて帰ってください 不易と流⾏ 継続は⼒なり

Slide 45

Slide 45 text

不易と流⾏ もともと蕉⾵俳諧の理念の⼀つ 変化しない本質的なものの中にも新しい 変化を取り⼊れること。また変化を取り ⼊れ続けることこそが不易の本質。

Slide 46

Slide 46 text

不易と流⾏ 転じて教育の世界では「変わらないことも変わ ることもどちらも学ぶべき」と語られることが 多い。

Slide 47

Slide 47 text

例 流⾏ Node.js, Chef, PhantomJS 不易 イベントドリブン、⾮同期、⾃動化

Slide 48

Slide 48 text

継続は⼒なり

Slide 49

Slide 49 text

今⽇の話 急にできるようになった ものなどありません

Slide 50

Slide 50 text

さらに⾔えば

Slide 51

Slide 51 text

今回の話に新しいものは 特にありません

Slide 52

Slide 52 text

昔から⾔われていること

Slide 53

Slide 53 text

昔から やってる⼈はやってること

Slide 54

Slide 54 text

Travis CI登場から2年 github登場から5年 Rails / Selenium登場から来年で10年 CIのプラクティス登場から15年くらい "Refactoring"から来年で15年 SUnit登場から来年で20年

Slide 55

Slide 55 text

Ruby誕⽣から20年 WWW誕⽣から23年 DBMS登場から30年以上 オブジェクト指向誕⽣から35年以上

Slide 56

Slide 56 text

ツールは変わる

Slide 57

Slide 57 text

背景や⽂化は そう変わらない

Slide 58

Slide 58 text

より深く 継続的に学ぼう

Slide 59

Slide 59 text

ツールも知ろう ⽂化も知ろう

Slide 60

Slide 60 text

やってみよう

Slide 61

Slide 61 text

それこそを Kanazawa.rbの ⽂化にしよう

Slide 62

Slide 62 text

ありがとうございました

Slide 63

Slide 63 text

参考 Release It! 本番⽤ソフトウェア製品の設計とデプロ イのために リファクタリング: Rubyエディション