Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ordinary Practices
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
wtnabe
October 19, 2013
Programming
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ordinary Practices
Kanazawa.rb meetup #14 で話したいつものプラクティスです。分かってる人にとっては当たり前のことだらけです。これと言って何か新しい発見はないと思います。
wtnabe
October 19, 2013
More Decks by wtnabe
See All by wtnabe
新しいフロントプロセスとドキュメントフォーマットを考えてみた
wtnabe
0
48
Rubyでもモノリポしたい - 調査、おさわり編 -
wtnabe
0
80
Ruby de Railway Oriented Programming
wtnabe
0
130
Bindanのススメ
wtnabe
0
75
そのオブジェクト、何を保証してくれますか? - GuideRailのススメ -
wtnabe
0
84
Effective Jekyll
wtnabe
0
110
5 min Jekyll/Liquid Plugin cooking
wtnabe
0
74
Ruby de Wasm
wtnabe
0
110
Cloud Native Buildpacksって結局どうなの?
wtnabe
0
93
Other Decks in Programming
See All in Programming
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
340
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
460
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
Java 27新機能 / Java 27 new features
kishida
2
200
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
510
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.4k
Jetpack Compose Mechanisms
skydoves
2
310
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
For a Future-Friendly Web
brad_frost
183
10k
BBQ
matthewcrist
89
10k
A Tale of Four Properties
chriscoyier
163
24k
Building AI with AI
inesmontani
PRO
1
1.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
My Coaching Mixtape
mlcsv
0
340
RailsConf 2023
tenderlove
30
1.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.1k
Why Our Code Smells
bkeepers
PRO
340
58k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Marketing to machines
jonoalderson
1
5.8k
Transcript
ぼくのやってる ふつうのこと @wtnabe Kanazawa.rb meetup #14 2013-10-19 (Sat) at DMM.com
Labo Kanazawa
お品書き
ざっくり Web開発のプラクティス 使ってるツール 本当に⼤切なプラクティス
ざっくり TDDとend-to-endテストの話多め 最後の話だけ覚えて、あとは適当に
Web開発のプラクティス1 バージョン管理 Tickets & Milestones deployの⾃動化
Web開発のプラクティス2 開発環境の仮想化と⾃動構築 Test-Driven Development Continuous Integration
使ってるツール1 Subversion ( Mercurial, Git ) Trac Capistrano Vagrant, Chef
使ってるツール2 Jenkins RSpec, SimpleTest, Jasmine, PhantomJS SimpleCov(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の⾃動化 CI end-to-endテスト ユニットテスト
使ってるツール
Subversion 2006年くらいから(それ以前はCVS) Mercurial, Gitも⼀部併⽤ そのうちGitへ⼀本化するつもり
選択基準 当時は各種ツールのサポートがよかった GitのGUIは⻑らく貧弱だった コードホスティング、クラウド側の対応 はGitがイチバン
Trac Python製Issue Tracking System むしろSubversionはTracを使う理由 (CVSでは使えない)
Capistrano Ruby製deployツール 個⼈では2008年〜、組織では2011年〜 これを理由に関係者はRuby必須に 必須に RailsもPHPも
Vagrant, Chef Ruby製VM管理ツール + サーバ設定⾃動 化 開発環境構築の⾃動化と開発環境の統⼀ 「適当にVM作って設定漏れ」をなくす 昔からの⾃前ツールも組み合わせて テストにも絡んできます
Jenkins Continuous Integrationのスタンダード Java trunkを⾃動でテスト/静的解析 deployの記録も取るようにした
RSpec Ruby製テスティングフレームワーク BDDスタイル Ruby 1.8でも動く Railsと合わせて使うノウハウが多い けど、Rubyのコードならなんでもよい
SimpleTest PHP 4/5 両対応のフレームワーク ⾃前pear packaging 最新版はPHP 5⽤ ユニットテストとカバレッジ測定 レガシーなコードにはオススメ
RSpec + Capybara (end-to-end) with rspec-rails for PHP
Vagrant / RSpec + Capybara for PHP 開発環境の統⼀、URL完全⼀致 誰の環境でend-to-endテストを動かし ても同じように動作する
Railsでのノウハウを流⽤
Vagrant / RSpec + Capybara for PHP PHPのバージョンに依らない 「ど真ん中」なのでメンテナンスが放棄 される不安がほぼない
Jasmine JavaScript⽤BDDフレームワーク gemで⼊れられる spec書きやすさのためにCoffeeScriptも テストはブラウザで実⾏ 最近はPhantomJSと組み合わせて
PhantomJS Headless Webkit Browser 2012年からインストールが超簡単に Jasmineと組み合わせてCIに Capybara + Poltergeistでend-to-endに
SimpleCov(RCov) Rubyのカバレッジ測定 ⾃動化はしてません あくまで⽬安の把握にしか使ってません
PHPCPD PHPのコピペチェッカ CIで記録取り
JSHint JavaScriptの静的スタイルチェッカ 設定項⽬ありすぎてうざい ruby wrapper⾃作してrakeで呼んでる wtnabe/jshint4r Node.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エディション