トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

Ruby 2.5.1からRuby 2.6.3にバージョンアップしてCSV生成が高速化しました

SREチームの中村です。

弊社にはtoreta-railsというトレタ全体の8割ほどのサービスのロジックが書かれているコアAPIがあります。

先日、toreta-railsのRails versionを5.2.3にバージョンアップしました。 それに続き、今週はRuby versionを2.5.1から2.6.3にバージョンアップしたのですが、CSV生成ジョブの性能向上が顕著でした。

その内容について報告します。

処理の内容

toreta-railsはSidekiqを非同期ジョブとして利用しています。以下の2つのCSV出力ジョブもSidekiq Workerとして実装しています。

顧客データCSV出力ジョブ

トレタは様々な規模の飲食店さんに利用されています。

店舗数が多い法人さんは売上を上げるために、自社の店舗に来店した顧客を分析します。そのため、トレタに溜まった顧客データをダウンロードできるようにする必要があります。

顧客データCSV出力ジョブは各法人に溜まった顧客データを各法人ごとに出力するというジョブです。

在庫データCSV出力ジョブ

トレタでは在庫データを永続化しておらず、都度計算しています。

詳細については私がRails Developers Meetup 2019にて発表した資料に載っていますので興味がある方は御覧ください。

Rails Developers Meetup 2019 で飲食店のオンライン予約の仕組みについて発表しました #railsdm - トレタ開発者ブログ

そのため、在庫データを別のサービスに投入する必要があるときは、在庫を計算してそれを様々な形式で渡すというやり方を取っています。 現状在庫データが必要なサービスはCSV形式で渡す必要があったので、そのためのジョブを作成しました。

計測結果

Ruby 2.5.1 (2019-06-04)

worker 実行件数 合計実行時間(sec) 1workerあたりの実行時間(sec)
顧客データCSV出力ジョブ 1424 446685 313.68
在庫データCSV出力ジョブ 198241 611437 3.08

Ruby 2.6.3 (2019-06-11)

worker 件数 合計実行時間(sec) 1workerあたりの実行時間(sec) 1workerあたりの実行時間の性能比(%)
顧客データCSV出力ジョブ 1419 347767 245.07 22%
在庫データCSV出力ジョブ 212244 376997 1.77 43%

顧客データCSV出力ジョブでは22%、在庫データCSV出力ジョブではなんと43%も実行時間が早くなりました! Rubyを最新にバージョンアップすることで、DBやサーバへの負荷の軽減はもちろん、ユーザに高速に価値を提供できるようになりました。

まとめ

Rubyのバージョンアップをちゃんと行うことで、ユーザにとても良い価値を提供できるようになりました。 日頃からサービス開発を通してお世話になっているRuby開発チームの皆さん、本当にありがとうございます。

SeleniumConf Tokyo 2019 に行ってきました!

こんにちは、QAエンジニアの坂田です。

少し前になりますが、4月18〜19日にSeleniumの国際カンファレンス SeleniumConf Tokyo 2019 を聴講してきました。
今回は、2日間の参加を通して感じたことをまとめてみたいと思います!

f:id:asktn:20190426155520j:plain

Seleniumとは

Seleniumはブラウザを自動操作してWebアプリケーションをテストするツールです。
最近は主要コンポーネントであるWebDriverがW3C採択され各ブラウザ内に実装されつつあるなど、UIテストフレームワークとしての標準化が進んでいます。

国際セッションで受けた印象

国際カンファレンスということで、半分以上のセッションが海外の方の講演でした。
海外の方の講演で個人的に感じたのは「とにかくまずやってみることを後押し」「新しい技術に対する説明が具体的かつ丁寧」ということです。

  • 日本人:組織寄り
    • 開発体制や組織の成長、チーム内外のコミュニケーションなどが俯瞰的に語られる傾向
  • 海外:技術・個人の成長寄り
    • 技術的なチャレンジの後押しと、必要なことが具体的に語られる傾向

良し悪しではなく、純粋に国際カンファレンスならでは実感できた違いとして面白かったです。

組織内でのQAの役割

開発現場では、開発とQAの一体化が進んでいる印象でした。
体制的にも職能的にも、現場のQAは実装に携わるエンジニアとアジャイル開発プロセスを共有しつつ、プロダクトの提供スピードや品質向上を相互にサポートし合う関係性が求められているように感じます。

一方、大きな企業になると、現場から離れた専門チームにもQA人材が入り、プロダクト横断で Developer Experience 改善に取り組んでいるケースが多かったです。
講演では以下のような取り組みが紹介されました。

  • CI化支援
  • E2Eテスト支援ツールの提供
  • テストケース最適化によるデプロイ高速化
  • レポーティングツールの内製

テスト自動化のスコープ

QA目線で自動化しようとするとテストコストの削減を第一に考えがちですが、自動化によるメリットはコスト削減よりもむしろ下記の方が大きかった、という話もありました。

  • エンジニアへ即時フィードバックを返せる
    • 頭が温まっているうちに修正でき、スイッチングコストが低減される
  • コード変更への精神的な抵抗感(デグレリスク)が軽減される
    • 積極的な機能拡張・リファクタリングが可能になる
  • テスト自動化の過程でプロダクトの仕様・構造を深く理解できる

何を目指すかで自動化の方針も大きく変わりうるため、重要な学びになりました。

サービス・プロダクトの特性に応じたテストの配分最適化

サービス・プロダクトの特性に応じてテストピラミッド(テストの階層/役割/配分など)を最適化した実例も紹介され、面白かったです。

極力ローレベルのテストに落としていく原則は変わりませんが、単純なピラミッドの形だけが良いのではなく、状況に応じてintegration(APIテストなど)を厚くしたりE2Eを厚くしたりと、思ったより様々な印象でした。

QAにも高品質なコーディングが求められる

テストコードもプロダクト資産である、という点もいくつかのセッションに共通するメッセージでした。
TDDの大家である和田卓人(t_wada)さんがKeynoteに登壇したりと、開発プロセスやコードの保守性が重要なテーマに上がっていました。

さいごに

全体を通して、QAも他のエンジニアと同様に、技術を組み合わせて組織課題を解決したり、開発プロセスを最適化したり、といったアプローチを当然に求められていることを強く感じました。

個人的に、開発プロセスも成熟度も異なる複数のプロダクトに対しQAとしてどう関与・貢献すべきか課題を持っていたこともあり、とても有意義なカンファレンス参加になりました。

次回のSeleniumConfは2019年10月にロンドンで開催予定です。(海外!)
興味ある方がいらっしゃれば、ぜひ参加して感想をお聞かせください!

RubyKaigi 2019に参加してきました

はじめましてこんにちは。サーバサイドエンジニアの川又です。

先日04/18〜04/20に福岡国際会議場で開催された RubyKaigi 2019 に参加してきました。

f:id:rkmathii:20190424150113j:plain

トレタはGold Sponsorとしてスポンサードしていて、自分を含むエンジニア3名で参加しました。

専用のスポンサーブースはありませんが、ノベルティ置き場に置かせていただいた「トレタ手ぬぐい」が多くの人に手にとっていただけたようで嬉しかったです!

自分はRubyKaigiへの参加は今年が初めてだったのですが、参加される方がとても多く、楽しいセッションがいくつもあったため、めちゃめちゃ楽しませていただきました。

特に1日目の「Fibers Are the Right Solution」はスライドが分かりやすく、気になっていたものの使ったことがなかったFiber機能についての紹介があったので、個人的にとても興味深いものでした。

また、ランチタイムになると会場すぐ横に屋台が設営されていたり、

f:id:rkmathii:20190424150150j:plain

1日目の夜は商店街を借りて(!)のオフィシャルパーティーがありと、そんなことができるのかと正直びっくりしました。 運営に携わってくださった皆さまに、感謝しています。

f:id:rkmathii:20190424150201j:plain

今回のRubyKaigiのチケットはスポンサーチケットとして会社で確保していたものをいただいたのですが、それ以外に旅費・宿泊費も福利厚生の一貫として、会社からサポートしてしてもらえました。

自分は今年の4月に入社したばかりですが、面接等で聞いていたよりも会社全体が働きやすさについて考えてくれていると感じることが多く、とても仕事がやりやすいと日々感じています。

もしもご興味がある方がいましたら、最近リニューアルした採用ページを見ていただけますと幸いです!

corp.toreta.in

© Toreta, Inc.

Powered by Hatena Blog