SlideShare a Scribd company logo
Ruby/Rails
Benchmarking and Profiling
with TDD
2019/09/14 Osaka Ruby Kaigi02
Yasutomo Uemori (wakaba260)
me.inspect
=> {
“HN”: "wakaba260",
“name”: "Yasutomo Uemori",
“company”: "株式会社Aiming",
“twitter”: "https://twitter.com/wakaba260yen",
“github”: "https://github.com/yuemori",
“skills”: ["rails api", "docker", "kubernetes", "GCP"]
}
突然ですが
Ruby/Railsの
プロファイルや
ベンチマーク
とったことある人?
今日の話はこんな人向けの話
- Ruby/Railsのベンチマークやプロファイリングに興味がある
- パフォーマンス改善にどう手を付けていいかわからない
 ⇛ 主に初心者向けの話
Agenda
話すこと
- Benchmark and Performance Testing
- チューニングを行ったときの取り組み
話さないこと
- Rackサーバのチューニング
- 改善をしたときの実装内容
Benchmark and
Performance Testing
はじめに大事なこと
推測するな
計測せよ
プログラミングで時間がかかっている場所を
推測してはいけない。
どうやって
計測しよう🤔
Testing
そうだ、テストを書こう
なぜTestを書くのか
我々は普段からアプリケーションに対しテストを書いている
- エラーがないこと
- バグが修正されたこと
- 仕様どおりに動くこと
こういったことを再現性高く保証するためにテストがある
 ⇛ パフォーマンスについてもテストを書きたい
Red
GreenRefactor
Standard TDD
Benchmark
ProfileRefactor
Performance TDD
Benchmark
ProfileRefactor
実行速度を計測
Benchmark
ProfileRefactor
原因箇所を特定
Benchmark
ProfileRefactor
コードを改善
Benchmark
ProfileRefactor
改善されたことを確認
Benchmark
ProfileRefactor
Measure Measure
Improve
Benchmark
ProfileRefactor
Measure Measure
Improve
計測、計測、そして改善
💎今回テストを書くのに使ったgemたち
・Testing:RSpec
・Benchmark:module Benchmark
・Profile:https://github.com/tmm1/stackprof
Benchmark
プロファイリングとあわせてベンチマークは必ずとっておこう
- 実際にどのぐらい時間がかかるか?を把握する
- プロファイリングを有効にすると、実行速度自体が下がる
- 一回だけの実行ではばらつきが出やすいのでウォームアップや実
行回数もポイント
Benchmark module
・公式のベンチマークライブラリ
・簡単な計測ならこれだけで十分
Profiling
速度計測後はプロファイリングを行い、ボトルネックを特定する
- 速度を計測したあと、どこが遅いかを推測で直さない
- 利用しているミドルウェアや外部サービスが遅いなどもある程度わ
かる
Stackprof
a sampling call-stack profiler for ruby 2.1+
・mode, interval, outを指定してサンプリング対象のコードを
 ブロックで呼び出すだけ
・CPU Clock Time: CPUの利用時間。
 Wall Clock Time: 開始から終了までの時間。Railsの場合はこれ
 参考:https://scoutapm.com/blog/profiling-rails-with-stackprof
Stackprof
Stackprof
総サンプリング回数
Stackprof
そのメソッドが呼び出しているメソッドの時間も含めた、
TOTALのサンプリング回数
Stackprof
純粋にそのメソッドの
サンプリング回数
Stackprof
処理に時間がかかっている箇所
Stackprof
呼び出している処理のため、
時間がかかっている箇所
Stackprof-webnav
Stackprof-webnav
行単位で時間がかかっている箇所を表示できる
Stackprof-webnav
一番時間がかかっている場所を特定!
Stackprof --flamegraph
・上記のようなflamegraphのhtmlを生成してくれる
・呼び出しのスタックトレースや時間などが可視化されるので便利
実践
https://github.com/yuemori/performance_test_app
demo1
demo2
最低限のテストは
出来るようになった
Problem
?
Problem
めんどくさい
Problem
めんどくさい
・手動実行に頼っている
・目視確認に頼っている
 ⇛ 一度直った問題が再発してないかを確認しにくい
 ⇛ もっと複雑なケースだとテストケースの再現性も問題
Performance Spec
Performance Spec
Performance Spec
詳細
https://github.com/yuemori/performance_test_app
余談
既にそういったgemがあることに後から気づいた
- https://github.com/piotrmurach/rspec-benchmark
- https://github.com/rails/rails-perftest
また必要になったときにはこれらを使うかどうかも検討したい
ここまでのまとめ
手早くパフォーマンス改善を行うためにはどうしたらいいか
- パフォーマンスチューニングにおいては計測が重要
- いろんなgemを使って計測を楽にする
- 計測とチューニングのサイクルを確立する
パフォーマンス
改善時のとりくみ
パフォーマンス改善時の取り組み
- 改善箇所の調査
- パフォーマンステスト
- パフォーマンス改善方法論の共有
社内テスト内容から遅いAPIの調査
- 改善箇所を検討するために遅いAPIはどこかを調査
- アクセスログからレポートを作成
- 指標
- 総リクエスト数
- 平均レスポンス速度
- 最大レスポンス速度
- 50%、90%、99%、99%...のレスポンス速度
社内テスト内容から遅いAPIの調査
・・・どこから手を付けていこう?🤔
社内テスト内容から遅いAPIの調査
社内テスト内容から遅いAPIの調査:チューニングの検討
- サービスとして遅い箇所が問題になるもの
- 例)毎回ログインに時間がかかる
- 共通処理で遅いもの
- 例)毎回呼び出される認証が遅い
- 遅い原因が他の問題を引き起こすもの
- 例)N+1問題が原因なためDBへの負荷が懸念される
呼び出し頻度は少ないが取得系なので、
かなり酷いN+1なことが予想されるので直したい
社内テスト内容から遅いAPIの調査
同じくN+1っぽいが、ほとんど呼ばれないため
優先度を下げる
社内テスト内容から遅いAPIの調査
平均速度は上位に比べると早いが、
速度劣化の仕方が激しいので原因を見ておきたい
社内テスト内容から遅いAPIの調査
気になるほど遅いわけではないが、
呼び出し回数が飛び抜けて高いのでもう少し早くしたい
社内テスト内容から遅いAPIの調査
社内テスト内容から遅いAPIの調査:計測方法
- ログから計測
- 今回はStackdriver + BigQuery + DataPortal
- 構造化ログを出しておくことで集計が容易になる
- サービスの利用
- NewRelicやDatadogなど
- productionではおすすめ
- CIやローカルで実行するのに難がある
パフォーマンステスト
- 紹介した実装をベースにテスト環境を整備
- DBのボトルネック調査にクエリレポートを追加実装
- ActiveSupport::Notificationsを使ってクエリをトレース
パフォーマンステスト:クエリレポート
- railsの提供するイベントから計測、集計
- テスト時に実行されるSQLのレポートを作成して可視化
パフォーマンス改善方法論の共有
チューニングを個人に依存しないようにしたいと考えていた
- 実際にチューニングを行ったときのことをチーム内勉強会で共有
- ドキュメントの作成
 ⇛ 方法論を共有することでチューニングをチームのものにする 💪
パフォーマンス改善方法論の共有:ドキュメントの作成
パフォーマンス改善方法論の共有:ドキュメントの作成
パフォーマンス改善方法論の共有:レビュー
- パフォーマンス改善のPRを出した時はdescriptionに結果を記載
- 改善時にチェックしたポイントをわかりやすくする
- before/afterを掲載して改善されていることを伝える
パフォーマンス改善方法論の共有:レビュー
パフォーマンス改善方法論の共有:レビュー
まとめ
- パフォーマンス改善の心得:推測するな、計測せよ
- パフォーマンスのテストコードを書いて改善を楽にしよう
- パフォーマンス改善は楽しいので是非Tryしてみてください
ご静聴
ありがとうございました

More Related Content

What's hot

StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
Shu Sugimoto
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
torisoup
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
NTT DATA Technology & Innovation
 
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
Akihiro Suda
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
apkiban
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
gree_tech
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ota42y
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Salesforce Developers Japan
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
 
Goの時刻に関するテスト
Goの時刻に関するテストGoの時刻に関するテスト
Goの時刻に関するテスト
Kentaro Kawano
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
日本マイクロソフト株式会社
 
Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理
Sadayuki Furuhashi
 

What's hot (20)

StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
 
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
世の中のPostgreSQLエンジニアのpsql設定(第34回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
Apache Kafka on Herokuを活用したイベント駆動アーキテクチャの設計と実装
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
Goの時刻に関するテスト
Goの時刻に関するテストGoの時刻に関するテスト
Goの時刻に関するテスト
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
 
Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理
 

Similar to Ruby/Rails Benchmarking and Profiling with TDD

Active job meets kubernetes
Active job meets kubernetesActive job meets kubernetes
Active job meets kubernetes
Yasutomo Uemori
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
Takafumi ONAKA
 
PHP Application E2E with Capybara
PHP Application E2E with CapybaraPHP Application E2E with Capybara
PHP Application E2E with Capybara
Yoshiaki Yoshida
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
Takuya Mukohira
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
Kazuya Numata
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
Hirata Tomoko
 
逆引きクイックセミナー
逆引きクイックセミナー逆引きクイックセミナー
逆引きクイックセミナー
Koichiro Ohba
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみたngi group.
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイル
Toru Kawamura
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
豊明 尾古
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
RubyCorporation, Inc
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
Yuichiro Shibata
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
Ryuji Yamashita
 
オブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえりオブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえり
Yasunobu Kawaguchi
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
chibochibo
 
アウトプットはスキルアップもするしトクもする
アウトプットはスキルアップもするしトクもするアウトプットはスキルアップもするしトクもする
アウトプットはスキルアップもするしトクもする
Mitsuhiro Yamashita
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースよしだ あつし
 

Similar to Ruby/Rails Benchmarking and Profiling with TDD (20)

Active job meets kubernetes
Active job meets kubernetesActive job meets kubernetes
Active job meets kubernetes
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
 
PHP Application E2E with Capybara
PHP Application E2E with CapybaraPHP Application E2E with Capybara
PHP Application E2E with Capybara
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 
逆引きクイックセミナー
逆引きクイックセミナー逆引きクイックセミナー
逆引きクイックセミナー
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイル
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
 
オブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえりオブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえり
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
 
アウトプットはスキルアップもするしトクもする
アウトプットはスキルアップもするしトクもするアウトプットはスキルアップもするしトクもする
アウトプットはスキルアップもするしトクもする
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
 

More from Yasutomo Uemori

GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
Yasutomo Uemori
 
サービスクラス、その前に
サービスクラス、その前にサービスクラス、その前に
サービスクラス、その前に
Yasutomo Uemori
 
Rails on Dockerとの戦い
Rails on Dockerとの戦いRails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
 
Rubocopとの付き合い方
Rubocopとの付き合い方Rubocopとの付き合い方
Rubocopとの付き合い方
Yasutomo Uemori
 
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
 
Rails api way in aiming
Rails api way in aimingRails api way in aiming
Rails api way in aiming
Yasutomo Uemori
 
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
 

More from Yasutomo Uemori (7)

GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
 
サービスクラス、その前に
サービスクラス、その前にサービスクラス、その前に
サービスクラス、その前に
 
Rails on Dockerとの戦い
Rails on Dockerとの戦いRails on Dockerとの戦い
Rails on Dockerとの戦い
 
Rubocopとの付き合い方
Rubocopとの付き合い方Rubocopとの付き合い方
Rubocopとの付き合い方
 
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
 
Rails api way in aiming
Rails api way in aimingRails api way in aiming
Rails api way in aiming
 
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
 

Ruby/Rails Benchmarking and Profiling with TDD