💭
【Roblox開発】tick()の落とし穴
初心者向け・Roblox で安全に時間を扱う最短ルート
この記事は 2025‑07‑20 時点の情報です。
1. そもそも tick() って?
- 1970‑01‑01 00:00:00 からの経過秒数(小数点付き)を返す昔ながらの関数。
- 開発フォーラムでは 「いずれ非推奨になるので置き換えを」 とたびたび話題に上がっている模様。(Developer Forum | Roblox)
2. なぜ落とし穴なのか?
| 落とし穴 | 何が起こる? |
|---|---|
| PC とサーバで値が違う |
tick() は 実行した端末のタイムゾーンを使う。日本の PC で取得→JST、サーバで取得→UTC なので 9 時間(540 分)ズレ が発生。(Developer Forum | Roblox) |
| 将来サポート終了の可能性 | ドキュメントでも「非推奨予定」と言及。(Developer Forum | Roblox) |
◆ 私がハマった実例
スタート地点で startTime = tick()、すぐに elapsed = tick() - startTime を計算したところ 540 分経過 と判定。
原因は クライアント(JST)とサーバ(UTC)で tick() の基準が違った(?)
3. これだけ覚えれば OK!安全な代替 API
| やりたいこと | おすすめ API | ポイント |
|---|---|---|
| サーバとクライアントで同じ時計を使いたい | workspace:GetServerTimeNow() |
サーバ時刻を NTP 風に補正して返す。レースのラップ計測やクールダウンに最適。(ロブロックスクリエイター ダッシュボード) |
| シンプルに「今」を保存したい | os.time() |
常に UTC の整数秒。データストア保存向き。(Developer Forum | Roblox) |
| (おまけ)見やすく表示したい |
DateTime.now() → .FormatLocalTime()
|
ローカル表⽰が簡単。(ロブロックスクリエイター ダッシュボード) |
覚え方
-
同期が必要 →
GetServerTimeNow() -
保存するだけ →
os.time() -
見やすく表示 →
DateTime
5. どれを使えばいい? (使い分けの目安)
「現実世界で24時間経ったらもらえるログインボーナスを作りたい!」
➡️ os.time()
誰がいつアクセスしても、世界共通のUTC時刻を基準にできます。
「この処理ってどれくらい速いのかな?」
➡️ os.clock() または time()
高精度なタイマーとして、プログラムのパフォーマンスを測るのに最適です。
「tick() は?」
➡️ 使わない。
古い関数で、タイムゾーンの問題などを引き起こす可能性があるため、新しいコードで使う理由はありません。
6. まとめ
tick()は時差でズレる&将来消えるかも。- 同期したいなら
workspace:GetServerTimeNow()、保存だけならos.time()。
これで “540 分の謎” とはお別れ。ぜひ安全な時間 API を使って快適な開発ライフを!
Discussion