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
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
110
eBPF 簡介 2026 版
shunghsiyu
0
190
Kiro Crew 入門 (手を離しても進む仕事) | 目指せ Kiro マスター 11
inariku
PRO
4
500
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
120
ライフワーク「猫でもわかるDirectConnect」
kentapapa
0
270
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
110
超⼩型・多⾔語検索モデル Bekko Embedding
hotchpotch
1
120
Lint の層を組み直した話
bengo4com
3
320
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
290
試験勉強はGrokBotでやれ
maigo999
0
110
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
290
Featured
See All Featured
Visualization
eitanlees
153
17k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Agile that works and the tools we love
rasmusluckow
331
22k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
300
Mobile First: as difficult as doing things right
swwweet
225
10k
Unsuck your backbone
ammeep
672
58k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
910
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Embracing the Ebb and Flow
colly
88
5.2k
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とタイムゾーンの話について弊社のケース を紹介しました。 ◦ すでにサービス入っていると調整や告知などの作業も 入ってくるので大変になってきます。 ◦ でも今回作業を行ったことでなんとか弊社では幸せにな れました。
◦ みなさまのところでは、複数タイムゾーン対応、どうされ ていますか? • ありがとうございました!