Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ordinary Practices

088b1b43ff5dd64aa0f000da9e9da777?s=47 wtnabe
October 19, 2013

Ordinary Practices

Kanazawa.rb meetup #14 で話したいつものプラクティスです。分かってる人にとっては当たり前のことだらけです。これと言って何か新しい発見はないと思います。

088b1b43ff5dd64aa0f000da9e9da777?s=128

wtnabe

October 19, 2013
Tweet

Transcript

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

    Labo Kanazawa
  2. お品書き

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

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

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

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

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

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

  9. Web開発のプラクティス

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

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

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

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

  14. Test-Driven Development

  15. の前に

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

  17. どちらも本当

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

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

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

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

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

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

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

  25. 使ってるツール

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  48. 継続は⼒なり

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

  50. さらに⾔えば

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

  52. 昔から⾔われていること

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

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

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

  56. ツールは変わる

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

  58. より深く 継続的に学ぼう

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

  60. やってみよう

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

  62. ありがとうございました

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