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

Ordinary Practices

wtnabe
October 19, 2013

Ordinary Practices

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

wtnabe

October 19, 2013
Tweet

More Decks by wtnabe

Other Decks in Programming

Transcript

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

    View Slide

  2. お品書き

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. Test-Driven Development

    View Slide

  15. の前に

    View Slide

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

    View Slide

  17. どちらも本当

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. 使ってるツール

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. Vagrant, Chef
    Ruby製VM管理ツール + サーバ設定⾃動

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


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

    View Slide

  48. 継続は⼒なり

    View Slide

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

    View Slide

  50. さらに⾔えば

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  56. ツールは変わる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  60. やってみよう

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide