Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

カレンダーアプリ上で定期イベントの開始・終了時間が UTC 基準になる問題を修正 #8288

Merged
merged 2 commits into from
Jan 27, 2025

Conversation

ymmtd0x0b
Copy link
Contributor

@ymmtd0x0b ymmtd0x0b commented Jan 26, 2025

Issue

概要

イベント購読機能を利用してカレンダーアプリに FBC のイベント予定を取り込んだ際、定期イベントの開始時間がユーザーのタイムゾーン(日本)と異なっている問題を修正しました。

原因

定期イベントは特別イベントと異なり、開催する"時間"の情報しか持っていないため購読される際に"年/月/日"も加えた完全な日付を作成する必要があります。

以下のコードで完全な日付の作成を行ってますが、local_to_utc メソッドにより時刻の基準が UTC へ変更されているため、該当箇所を削除しました。

def parse_event_time(event_date, event_time)
tz = ActiveSupport::TimeZone['Asia/Tokyo']
time = event_time ? event_time.strftime('%H:%M') : '00:00'
date_time = DateTime.parse("#{event_date} #{time}")
tz.local_to_utc(date_time)
end

また、上記のメソッドはイベント購読処理でのみ利用されているため他のコードへの影響は無いと思われます。

変更確認方法

  1. bug/start_time_of_regular_event_is_shifted をローカルに取り込む

  2. foreman start -f Procfile.dev を実行し、任意のユーザーでログインする

  3. 定期イベントページ にアクセスする

  4. 任意の定期イベントに参加する

  5. 画面右上にある イベント購読ボタン をクリックし、カレンダーアプリへ取り込む
    イベント購読ボタン

  6. カレンダー上で表示される定期イベントの時間が FBC 上の定期イベントの時間と同じになっている

Screenshot

以下は、定期イベントである「Everyday Rails輪読会 ( 17:00 ~ 18:00 ) 」に参加した場合のカレンダーアプリ上の表示になります。

修正前

予定に表示されている時間が 8:00 になっている。( UTC 基準での時刻 )

定期イベントの開始時間_修正前

修正後

予定に表示されている時間が 17:00 になっている。( 東京での時刻 )

定期イベントの開始時間_修正後

@ymmtd0x0b ymmtd0x0b self-assigned this Jan 26, 2025
Comment on lines 169 to -172
def parse_event_time(event_date, event_time)
tz = ActiveSupport::TimeZone['Asia/Tokyo']

time = event_time ? event_time.strftime('%H:%M') : '00:00'
Copy link
Contributor Author

@ymmtd0x0b ymmtd0x0b Jan 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 上記コードの170・172行目は、以下の理由により削除しました。

  • タイムゾーンは Rails 側の設定 ( config/application.rb ) で東京を指定している。
  • 引数で受け取る event_time ( 実体は定期イベントの start_at 、end_at ) が nil になることは考えにくい。( バリデーションも設定されている )

@ymmtd0x0b ymmtd0x0b marked this pull request as ready for review January 26, 2025 05:31
@ymmtd0x0b ymmtd0x0b requested a review from komagata January 26, 2025 05:40
@ymmtd0x0b
Copy link
Contributor Author

@komagata
#8287 で報告されている「カレンダーアプリで購読した定期イベントの開始・終了時間が UTC 基準になる問題」の修正PRを作成しましたので、確認をお願いします🙏

Copy link
Contributor

@JunichiIto JunichiIto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRどうもありがとうございます!!
もし以前の実装が不具合だったのであれば、「修正前は失敗するが、修正後はパスするテストコード」も追加してもらえるとありがたいです〜 (model testでOK)

test '#format_event_date' do
test '#transform_for_subscription' do
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 format_event_date メソッドが命名変更されて transform_for_subscription メソッドになったようなので、テスト名も合わせるように変更しました ( 命名変更時のコミット )

@ymmtd0x0b
Copy link
Contributor Author

@JunichiIto
コメントありがとうございます!
修正したメソッドの既存テストをタイムゾーンも含めて検証するように変更し「修正前は失敗するが、修正後はパスするテストコード」にしました〜

Copy link
Contributor

@JunichiIto JunichiIto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

修正ありがとうございます!よさそうですー 🙆‍♂️

@komagata
駒形さんもレビューお願いします 🙏

Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRしてくださってありがとうございます!!

@komagata komagata merged commit 0ffe595 into main Jan 27, 2025
5 checks passed
@komagata komagata deleted the bug/start_time_of_regular_event_is_shifted branch January 27, 2025 03:09
@github-actions github-actions bot mentioned this pull request Jan 27, 2025
30 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants