💭

【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. まとめ

  1. tick() は時差でズレる&将来消えるかも。
  2. 同期したいなら workspace:GetServerTimeNow()、保存だけなら os.time()

これで “540 分の謎” とはお別れ。ぜひ安全な時間 API を使って快適な開発ライフを!

Discussion