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
スペースマーケットとタイムゾーン
Search
Hiroaki Ninomiya
June 24, 2015
Technology
0
1.4k
スペースマーケットとタイムゾーン
Shinjuku.rb #26
Hiroaki Ninomiya
June 24, 2015
Tweet
Share
More Decks by Hiroaki Ninomiya
See All by Hiroaki Ninomiya
久々にコードを書いてOmniauthでハマった話
treby
0
850
IM@Study活動紹介
treby
1
440
全ての雑用を、生まれる前に消し去りたい
treby
0
420
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
320
Rails 6.0の気になった新機能 #shuuumai
treby
1
610
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
130
EMの悩みにフォーカスする #em_izakaya
treby
0
500
この先生きのこるためのエンジニアキャリア戦略パターン #em_meetup
treby
5
2.4k
失敗から学ぶEM方法論 #em_meetup
treby
0
1.4k
Other Decks in Technology
See All in Technology
**強い**エンジニアのなり方 - フィードバックサイクルを勝ち取る / grow one day each day
soudai
64
19k
Databricks における 『MLOps』
databricksjapan
2
160
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
230
JSON攻略法.pdf
miyakemito
8
4.4k
JAWS-UG Bedrock Claude Night
yamahiro
3
440
Postman v10リリース後を振り返る
nagix
0
170
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
170
Discord とビルダー&チャットボットの使い方 / How to use Discord and Builder & Chatbots
ks91
PRO
0
160
テストプロセスで大事にしていること #jasstnano
makky_tyuyan
0
150
Tableau事例紹介 / Tableau Case Study of Eureka
kazuya_araki_tokyo
1
180
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
2
980
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
120
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
647
58k
In The Pink: A Labor of Love
frogandcode
138
21k
Building Your Own Lightsaber
phodgson
98
5.7k
Agile that works and the tools we love
rasmusluckow
324
20k
Unsuck your backbone
ammeep
662
57k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
BBQ
matthewcrist
80
8.8k
Designing Experiences People Love
moore
136
23k
The Cost Of JavaScript in 2023
addyosmani
15
3.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
220
21k
Producing Creativity
orderedlist
PRO
336
39k
RailsConf 2023
tenderlove
2
530
Transcript
スペースマーケットと タイムゾーン 2015/6/24 Shinjuku.rb #26 二宮啓聡
自己紹介 • 二宮啓聡(にのみやひろあき) ◦ 株式会社スペースマーケット UXデザイン部 EN ▪ 開発基盤周り(CI/自動テストなど) ▪
Railsのアップデート ▪ (bot作成:Hubot楽しい) ◦ ブログ:http://blog.spacemarket.com/author/treby/ • 最近やったタイムゾーン周りの改修についてお 話しします
None
スペースマーケットについて • 「ユニークなスペースを簡単にネットで1時間単 位から貸し借り出来るサービス」 ◦ https://spacemarket.com/ ▪ 古民家で開発合宿 ▪ 三軒茶屋のカフェで定例ミーティング
▪ キッチン付きのスペースで手作りパーティ ◦ スペース・事例紹介:http://beyond.spacemarket.com/ ◦ エンジニア採用やってます
スペースマーケットとタイムゾーン • 場所探しから予約・やりとり、決済まで ◦ スペースの予約情報 ▪ 利用開始時間 ▪ 利用終了時間 ◦
料金支払い情報 ▪ 支払い期限 • ビジネスの肝となる部分に時間情報が存在して いる状態
タイムゾーンを取り巻く問題 • システムのタイムゾーン:未設定(UTC) • フロントエンドからのリクエスト →datetime_selectと同様の仕組み ◦ 1i、2iといった情報を元に組み立てる。 ◦ →
Railsのタイムゾーンの時間として解釈 • 結果、2015年6月24日19時30分というパラメー タ ◦ DB上では”2015-06-24 19:30:00 UTC”という表現に
何が問題か→DB上でUTCとJSTが混在 • バッチ処理など ◦ DB上の時間を扱うデータ ▪ 実際にはJSTを表しているのに、UTCとして入ってい る。。。 ◦ この結果、ところどころの処理に±9.hoursといったハック
が散見される状態に…… ▪ つらい • 将来的なグローバル展開時 ◦ 明らかに応用が利かない。つらい。
理想とする状態 • DB上では全ての時間情報をUTCで持つ • 指定される時間は適切なタイムゾーンで表示さ れる ◦ 更新時間など、表示される時間 ▪ ユーザーのタイムゾーン
◦ スペースの予約情報 ▪ スペースのタイムゾーン
解決への取り組み • 適切なタイムゾーンを利用するような修正 • 既存データに整合性を持たせる ◦ 一括更新の必要→メンテナンス
適切なタイムゾーンを利用 • https://www.reinteractive.net/posts/168- dealing-with-timezones-effectively-in-rails ◦ around_actionにて class ApplicationController < ActionController::Base
around_filter :set_time_zone def set_time_zone(&block) time_zone = current_user.try(:time_zone) || 'UTC' Time.use_zone(time_zone, &block) end end
既存データに整合性を持たせる • 手順書・巻き戻し手順書の作成 ◦ どのような手順で行うのかをドキュメント化 ◦ 巻き戻しの手順をドキュメント化 ◦ エンジニアでレビュー •
アクセスの少ない時間にメンテ実施 ◦ 月曜日朝2:00から5:00 ▪ スペースマーケット初のメンテナンス ▪ 自分にとっても入社後初めての深夜作業 ◦ 実施時間の調整や告知、全社への周知など
手順書の作成 • スペースマーケットCTOの鈴木作のドキュメント共有サービスを利用 ◦ https://teamdocs.io/
メンテナンスの実施
メンテナンスの実施
メンテナンスの実施
メンテナンスの実施 • 裏側 ◦ ひたすら該当部分から9時間引く ◦ タイムゾーン対応コードの配布 ◦ 本当に大丈夫なのかの確認 ▪
一連のフローをStaging環境にて確認
メンテナンス後の反響 • サービス側においては概ねクリティカルな問題 はなかった • 一部でタイムゾーン対応修正漏れ ◦ 営業側で使うツール(Salesforce)に投入する日にちが1 日ずれていたり •
潜在的なバグの発覚
タイムゾーン修正対応漏れ • ラベルをつけて管理
潜在的なバグの発覚 • メンテ後に飛び始めたMackerelアラート(CPU使用率) ◦ ログ調べたところ特定のデータを扱うあるアクションが重いのが判明
潜在的なバグの発覚 •
潜在的なバグの発覚 • ユーザー入力データによってループの回数が爆 発的に増える箇所がCPUリソースの枯渇という 形で露見 ◦ ループの中でTime.zone.atが使われており、これが Time.atよりコストのかかる処理だったことから障害レベ ルまで処理に時間がかかるようになり、判明 •
そもそもそこの処理改善できるよね、とリファク タリングのきっかけに。
まとめ • Railsとタイムゾーンの話について弊社のケース を紹介しました。 ◦ すでにサービス入っていると調整や告知などの作業も 入ってくるので大変になってきます。 ◦ でも今回作業を行ったことでなんとか弊社では幸せにな れました。
◦ みなさまのところでは、複数タイムゾーン対応、どうされ ていますか? • ありがとうございました!