Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
スペースマーケットとタイムゾーン
Search
Hiroaki Ninomiya
June 24, 2015
Technology
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
スペースマーケットとタイムゾーン
Shinjuku.rb #26
Hiroaki Ninomiya
June 24, 2015
More Decks by Hiroaki Ninomiya
See All by Hiroaki Ninomiya
スタートアップとは何か?アジャイル文脈で何が大変なのか? #shibuyagile
treby
0
280
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
1.6k
久々にコードを書いてOmniauthでハマった話
treby
0
1.1k
IM@Study活動紹介
treby
1
650
全ての雑用を、生まれる前に消し去りたい
treby
0
640
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
440
Rails 6.0の気になった新機能 #shuuumai
treby
1
790
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
200
EMの悩みにフォーカスする #em_izakaya
treby
0
630
Other Decks in Technology
See All in Technology
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
320
セキュリティ専任チームなしで攻撃を先回りするSREが実践したSIEM on Amazon OpenSearch Service
cscengineer
PRO
0
570
生成AI時代のIAMのマニアックな話
takuros
6
2.7k
AI Agent 時代のデータ基盤: ClickHouse で実現する 超高速分析とコスト削減の両立
jozono
0
210
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
PostgreSQL オプティマイザ統計の秘密
nori_shinoda
0
370
Shared Signals Framework 仕様解説
oidfj
0
140
攻撃 3 時間 vs 復旧 10 時間。アクセスキー流出の非対称性を体感するために CTF を作った話
kazzpapa3
1
150
増え続けるプロダクトの品質をどう担保するか。ProductSpecとTypeScriptによる取り組み
joere
3
1k
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
840
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
170
自律的なチームを作るためにTechPMがやらないこと
ny7760
1
530
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
320
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
450
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
520
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Done Done
chrislema
187
17k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
60k
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とタイムゾーンの話について弊社のケース を紹介しました。 ◦ すでにサービス入っていると調整や告知などの作業も 入ってくるので大変になってきます。 ◦ でも今回作業を行ったことでなんとか弊社では幸せにな れました。
◦ みなさまのところでは、複数タイムゾーン対応、どうされ ていますか? • ありがとうございました!