Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
これから始める"Ruby on Rails"2013年秋版
Search
longicorn
October 11, 2013
Programming
3
580
これから始める"Ruby on Rails"2013年秋版
http://atnd.org/events/44191
のスライドです
longicorn
October 11, 2013
Tweet
Share
Other Decks in Programming
See All in Programming
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
190
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
850
Result型で“失敗”を型にするPHPコードの書き方
kajitack
4
420
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
230
XP, Testing and ninja testing
m_seki
3
200
A2A プロトコルを試してみる
azukiazusa1
2
1.2k
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
190
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
490
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.4k
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
430
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
430
Featured
See All Featured
Balancing Empowerment & Direction
lara
1
370
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Become a Pro
speakerdeck
PRO
28
5.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Agile that works and the tools we love
rasmusluckow
329
21k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Building Adaptive Systems
keathley
43
2.6k
Faster Mobile Websites
deanohume
307
31k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Transcript
+ これから始める"Ruby on Rails”2013年秋版 株式会社じげん 津村 泰史
+ 自己紹介 n 始めは組み込み屋。 7、8年ほど色々やっていました n 下位層はbootloader、linux driverからファーム等 n 組み込みに飽きたので、ソーシャルゲーム業界に
n アプリ開発から解析システム開発等 n 現在は株式会社じげんで主にサイト作成を担当。 n 最近は、テストにも力を入れています。 n Twitter @prioniae
+ アジェンダ n 最近の開発環境 n テスト周り n 便利な機能/gem
+ テーマ n Rails4のリリースから時間も経過しました n 勉強会、Blogを始めとして色々情報は出ています n しかし、実際の開発環境、現場はどうなのか? n ということで、普通のエンジニア向けの、普通の現場の状況で
す n テストが多め
+ 最近の開発環境
+ Ruby + Rails n rbenv n Ruby : 1.8、1.9、2.0
n Rails : 2,3,4 n サービス毎によって、Ruby + Railsのバージョンが色々 n アップデートが課題 n ビジネスロジックが多く、場合によっては作り直しの方が早 かったり
+ RailsとDjangoの比較 n 前職ではDjangoを触っていましたので比較 Rails Django 環境(人、物…) ◎ △ 開発速度
◎ ◯ バージョン問題 △ ◯
+ MySQL n サービスによって複数のバージョンを使用 n 5.1、5.5、5.6 n 複数バージョンのインストールをどうするか? n MySQL::Sandboxで複数インストール
n ただし、gemのmysql、mysql2のインストールは少し難しい n コンパイルが必要なのでパスを通す必要が有り
+ テスト周り n ユニットテストを始めとするテストコードの必要性は一般的に なっています n 実際の所はどうか? n テストコードを書いているエンジニア、組織はまだまだ少ない 印象
n 社内ではDevOpsの影響もあり、テストコードを書くことが進 み始めている。が、まだまだこれからです
+ テストを書き始めるおすすめの手順 n 時間の合間に書けるもの徐々にテストを始め、テストに慣れる n import周辺、helperなどのmodel/DBが関わらない部分 n Requestテスト(後述) n model周辺(validationなど)
n 統合テスト n ユーザー登録 n Post
+ Rspec n Railsのテストフレームワークのデファクトスタンダード n Controller, Model/DB, Helperを中心に「本来あるべき挙動」 を記述していく この「あるべき挙動」のことを「Spec(ス
ペック)」と呼び、rubyで書いていく n expect( <調べたいもの> ).to eq(期待する値)
+ Rspec再入門
+ Rspec再入門
+ Rspec再入門
+ Request spec n RoutingをトレースしたControllerのテスト n つまり、特定のURLにアクセスして、エラーチェックを行う n テストが行き届いておらず、リリース後にバグでアクセスエ ラーという自体を防ぐ
n これがあるだけで安心感が全然違います
+ Request spec
+ View側のテスト n Rspecだけでは出来る事が限られている n ボタンの動作 n ページ遷移 n Javascript、…
n 結局、人間が手動でテストをせざるを得ず、時間の無駄が多い → 自動化をしたい n 回答 : Rspec + Capybara + Poltergeist
+ Capybara n 受け入れテスト、統合テスト用のフレーム n イメージとしては、Webアクセスの自動化 + テスト n Rspecと組み合わせることで、spec内でDOM(フォーム要素な
ど)のテストが行える。
+ 例えばこんなフォームの場合 ↓
+ Capybaraのテスト
+ Poltergeist (phantomjs)とは n Phantomjsはseleniumの軽量版 n Poltergeistはphantomjsのruby用ドライバです。 Capybaraの pluginとして動作します。 n
機能 n ブラウザテスト n スクリーンキャプチャ n Bot n Networkモニタリング
+ インストール n phantomjs n Macはbrew、portsでインストール n 最近のLinuxだと本家からダウンロード n 少し古いLinuxだとソースからコンパイルが必要
n Poltergeist n gemでインストール n Ruby 1.9移行
+ こんな動きをテスト出来る
+ Rspec+Capybara+Poltergeist
+ そしてCIへ n テストコードができれば、CIの準備完了 n Jenkinsで自動テスト n gitでpush時に自動的にテストを実行 結果はメールで送信 n
DevOps、テストコード作成の影響もあり徐々に導入を進めて います n まだ、始めたばかりなので、利用しているプロジェクトは2,3 程度
+ 便利な機能/gem
+ Railsの高速化 n Spring n Railsは各種コマンドの起動が遅い n Railsの実行ファイルを予めキャッシュし、デーモンとして別 プロセスで生かしておく n
spork、zeus、commands n 注意 n Ruby 1.9.3,Rails3.2以降が対象 n gitでのブランチ移動の場合は再起動が必要
+ Rubocop n Rubocop : 静的コードチェッカ n Ruby 1.9以上 n
インストールはgemで n コーディングルールのチェックツール n 設定ファイルでルールを変更することが可能! n 言語を問わず昔からあるツールの類 n Jenkinsを利用することにより、コーディングルールの形骸化 を防ぐ
+ このようなコードをチェック
+ 結果は…
+ TDD n CIは通常git + Jenkinsで行われるが、 TDDはコーディングとセットで行うもの n gem :
guard、watchrが便利 Ruby製ですが、他言語でも使用できます n ファイルの変更をトリガーにテストを実行 n Growlを使用することにより、テスト結果を分かりやすく表示
+ TDD + Growl
+ Growlの問題点 n 現在は有料なのが難点かも n ただし、古いバージョンのソースコードが公開されている n ダウンロードしてコンパイルすれば使える n ただし、コンパイルエラーが出て修正が必要かも
n Webで情報が少しはあるのでなんとかなる! n Linuxだとgrowl4linuxで代替できるようです
+ TDDの感想 n TDDは今までのプログラミングのリズムから大きな変化がある ため最初は大変 n TDDを始めた場合、始めは開発時間が1.5〜2倍は覚悟が必要 n しかし、テストと同時に開発を行うので信頼性はUP n
慣れるまでは、すごく疲れます 残業する元気はなくなります
+ 今回紹介したツール n gem n Spring n Guard / Watchr
n Rubocop n Rspec、Capybara、Poltergeist n phantomjs n Growl n 購入 / コンパイル n Linux growl4linux / Notify-OSD
+ 今後の課題 n テスト導入による効果を数値化 n 別プロジェクトへの展開 n テストコードの量を増やす
+ 有り難うございました!