Kanazawa.rb meetup #14 で話したいつものプラクティスです。分かってる人にとっては当たり前のことだらけです。これと言って何か新しい発見はないと思います。
ぼくのやってるふつうのこと@wtnabeKanazawa.rb meetup #142013-10-19 (Sat) at DMM.com Labo Kanazawa
View Slide
お品書き
ざっくりWeb開発のプラクティス使ってるツール本当に⼤切なプラクティス
ざっくりTDDとend-to-endテストの話多め最後の話だけ覚えて、あとは適当に
Web開発のプラクティス1バージョン管理Tickets & Milestonesdeployの⾃動化
Web開発のプラクティス2開発環境の仮想化と⾃動構築Test-Driven DevelopmentContinuous Integration
使ってるツール1Subversion ( Mercurial, Git )TracCapistranoVagrant, Chef
使ってるツール2JenkinsRSpec, SimpleTest, Jasmine, PhantomJSSimpleCov(RCov), PHPCPD, JSHint
Web開発のプラクティス
バージョン管理全部⼊れるログがあるので安⼼して忘れられるうまく⾏くかどうか分からない場合も元に戻せるので安⼼いわゆる共通ライブラリは別リポジトリ
Tickets & Milestones〆切をMilestoneの締め⽇にしてタスクをその中に落とし込む基本的に⼀つのタスク : ⼀つのチケットみんなが分かるようにする「完了」可能なタスクにする
deployの⾃動化⼿作業はミスやブレに繋がる「fiddlingを避けよ」『Release It !』p112変なコツをなくす誰がやっても同じになる
開発環境の仮想化と⾃動構築VMのセットアップから⾃動化デザイナもLinux環境使ってますWin/Macの違いはもうありません
Test-Driven Development
の前に
どちらが本当?コードは触り続けると汚くなるコードは触り続けるときれいになる
どちらも本当
リファクタリングしてますか?
リファクタリング“外から⾒えるふるまいを変えずに、ソフトウェアをわかりやすくし、安いコストで変更できるようにするために、ソフトウェアの内部構造に加えられる変更。”『リファクタリング: Rubyエディション』p76
あなたのコードは安⼼して変更できますか?
TDD⻑く使うコード、変更し続けるアプリはリファクタリングが重要TDDはリファクタリングを最も効率よく⾏う⽅法の⼀つ
TDD完璧な⾃動化は⽬指さないカバレッジは場所によって0〜100%機能の⼀部だけをテストできると捗るテストデータの⾃動⽣成やダブルの活⽤
Continuous Integrationうっかりテスト実⾏漏れ防⽌うっかり環境依存テスト防⽌静的解析便利
オススメ導⼊⼿順(案)バージョン管理 / deployの⾃動化CIend-to-endテストユニットテスト
使ってるツール
Subversion2006年くらいから(それ以前はCVS)Mercurial, Gitも⼀部併⽤そのうちGitへ⼀本化するつもり
選択基準当時は各種ツールのサポートがよかったGitのGUIは⻑らく貧弱だったコードホスティング、クラウド側の対応はGitがイチバン
TracPython製Issue Tracking SystemむしろSubversionはTracを使う理由(CVSでは使えない)
CapistranoRuby製deployツール個⼈では2008年〜、組織では2011年〜これを理由に関係者はRuby必須に必須にRailsもPHPも
Vagrant, ChefRuby製VM管理ツール + サーバ設定⾃動化開発環境構築の⾃動化と開発環境の統⼀「適当にVM作って設定漏れ」をなくす昔からの⾃前ツールも組み合わせてテストにも絡んできます
JenkinsContinuous IntegrationのスタンダードJavatrunkを⾃動でテスト/静的解析deployの記録も取るようにした
RSpecRuby製テスティングフレームワークBDDスタイルRuby 1.8でも動くRailsと合わせて使うノウハウが多いけど、Rubyのコードならなんでもよい
SimpleTestPHP 4/5 両対応のフレームワーク⾃前pear packaging最新版はPHP 5⽤ユニットテストとカバレッジ測定レガシーなコードにはオススメ
RSpec + Capybara(end-to-end)with rspec-railsfor PHP
Vagrant / RSpec + Capybarafor PHP開発環境の統⼀、URL完全⼀致誰の環境でend-to-endテストを動かしても同じように動作するRailsでのノウハウを流⽤
Vagrant / RSpec + Capybarafor PHPPHPのバージョンに依らない「ど真ん中」なのでメンテナンスが放棄される不安がほぼない
JasmineJavaScript⽤BDDフレームワークgemで⼊れられるspec書きやすさのためにCoffeeScriptもテストはブラウザで実⾏最近はPhantomJSと組み合わせて
PhantomJSHeadless Webkit Browser2012年からインストールが超簡単にJasmineと組み合わせてCIにCapybara + Poltergeistでend-to-endに
SimpleCov(RCov)Rubyのカバレッジ測定⾃動化はしてませんあくまで⽬安の把握にしか使ってません
PHPCPDPHPのコピペチェッカCIで記録取り
JSHintJavaScriptの静的スタイルチェッカ設定項⽬ありすぎてうざいruby wrapper⾃作してrakeで呼んでるwtnabe/jshint4rNode.js不要対応バージョンが古い><
静的解析や計測特にいじりにくいコードはコピペ率が⾼くてカバレッジが低いといった特徴が⾒えてくる数値で分かるので⽬標を決めやすい
本当に⼤切なプラクティス
覚えて帰ってください不易と流⾏継続は⼒なり
不易と流⾏もともと蕉⾵俳諧の理念の⼀つ変化しない本質的なものの中にも新しい変化を取り⼊れること。また変化を取り⼊れ続けることこそが不易の本質。
不易と流⾏転じて教育の世界では「変わらないことも変わることもどちらも学ぶべき」と語られることが多い。
例流⾏Node.js, Chef, PhantomJS不易イベントドリブン、⾮同期、⾃動化
継続は⼒なり
今⽇の話急にできるようになったものなどありません
さらに⾔えば
今回の話に新しいものは特にありません
昔から⾔われていること
昔からやってる⼈はやってること
Travis CI登場から2年github登場から5年Rails / Selenium登場から来年で10年CIのプラクティス登場から15年くらい"Refactoring"から来年で15年SUnit登場から来年で20年
Ruby誕⽣から20年WWW誕⽣から23年DBMS登場から30年以上オブジェクト指向誕⽣から35年以上
ツールは変わる
背景や⽂化はそう変わらない
より深く継続的に学ぼう
ツールも知ろう⽂化も知ろう
やってみよう
それこそをKanazawa.rbの⽂化にしよう
ありがとうございました
参考Release It! 本番⽤ソフトウェア製品の設計とデプロイのためにリファクタリング: Rubyエディション