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.5k
スペースマーケットとタイムゾーン
Shinjuku.rb #26
Hiroaki Ninomiya
June 24, 2015
Tweet
Share
More Decks by Hiroaki Ninomiya
See All by Hiroaki Ninomiya
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
410
久々にコードを書いてOmniauthでハマった話
treby
0
960
IM@Study活動紹介
treby
1
510
全ての雑用を、生まれる前に消し去りたい
treby
0
470
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
360
Rails 6.0の気になった新機能 #shuuumai
treby
1
680
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
150
EMの悩みにフォーカスする #em_izakaya
treby
0
530
この先生きのこるためのエンジニアキャリア戦略パターン #em_meetup
treby
5
2.5k
Other Decks in Technology
See All in Technology
アプリエンジニアのためのGraphQL入門.pdf
spycwolf
0
100
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
Taming you application's environments
salaboy
0
190
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.5k
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.2k
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
230
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
120
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
170
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
760
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
480
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Embracing the Ebb and Flow
colly
84
4.5k
What's in a price? How to price your products and services
michaelherold
243
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Rails Girls Zürich Keynote
gr2m
94
13k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Practical Orchestrator
shlominoach
186
10k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
100
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とタイムゾーンの話について弊社のケース を紹介しました。 ◦ すでにサービス入っていると調整や告知などの作業も 入ってくるので大変になってきます。 ◦ でも今回作業を行ったことでなんとか弊社では幸せにな れました。
◦ みなさまのところでは、複数タイムゾーン対応、どうされ ていますか? • ありがとうございました!