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.6k
スペースマーケットとタイムゾーン
Shinjuku.rb #26
Hiroaki Ninomiya
June 24, 2015
Tweet
Share
More Decks by Hiroaki Ninomiya
See All by Hiroaki Ninomiya
スタートアップとは何か?アジャイル文脈で何が大変なのか? #shibuyagile
treby
0
93
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
950
久々にコードを書いてOmniauthでハマった話
treby
0
1k
IM@Study活動紹介
treby
1
560
全ての雑用を、生まれる前に消し去りたい
treby
0
510
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
380
Rails 6.0の気になった新機能 #shuuumai
treby
1
720
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
160
EMの悩みにフォーカスする #em_izakaya
treby
0
550
Other Decks in Technology
See All in Technology
"発信文化"をどうやって計測する?技術広報のKPI探索記/How do we measure communication culture?
bitkey
3
310
事業と組織から目を逸らずに技術でリードする
ogugu9
8
1.6k
Ruby on Rails の楽しみ方
morihirok
5
2.2k
Docker Compose で手軽に手元環境を実現する / Simplifying Local Environments with Docker Compose #CinemaDeLT
nabeo
0
180
Simplify! 10 ways to reduce complexity in software development
ufried
2
260
Previewでもここまで追える! Azure AI Foundryで始めるLLMトレース
tomodo_ysys
2
700
さくらのクラウド開発の裏側
metakoma
PRO
15
4.8k
newmo の創業を支える Software Architecture と Platform Engineering
110y
5
530
Cursorをチョッパヤインタビューライターにチューニングする方法 / how to tuning cursor for interview write
shuzon
2
240
使えるデータ基盤を作る技術選定の秘訣 / selecting-the-right-data-technology
pei0804
8
1.4k
テストコードにはテストの意図を込めよう(2025年版) #retechtalk / Put the intent of the test 2025
nihonbuson
PRO
8
1.7k
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
nkzn
2
410
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How STYLIGHT went responsive
nonsquared
100
5.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
700
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
RailsConf 2023
tenderlove
30
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.7k
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とタイムゾーンの話について弊社のケース を紹介しました。 ◦ すでにサービス入っていると調整や告知などの作業も 入ってくるので大変になってきます。 ◦ でも今回作業を行ったことでなんとか弊社では幸せにな れました。
◦ みなさまのところでは、複数タイムゾーン対応、どうされ ていますか? • ありがとうございました!