1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[初心者🔰]gem ransack日付範囲指定のログ確認方法と注意[Ruby on Rails]

Posted at

この記事について

ruby on railsを学んでいるプログラミング初心者の記事です。
ransackの日付範囲指定検索を導入している最中、SQLログを確認している時に現在の時刻とログの時刻が違い混乱したため備忘録として残しておきます。

環境

mac OS
ruby 3.1.4
Rails 7.0.3.1
gem ransack インストール済み

Docker環境で行っています。

ransackの日付範囲指定

ここで紹介されている[実装]日付選択検索を実装しました。導入方法や詳しいコードの説明は上記の記事をご覧ください。

config/initializers/ransack.rb
Ransack.configure do |config|
  config.add_predicate 'lteq_end_of_day',
                  arel_predicate: 'lteq',
                  formatter: proc { |v| v.end_of_day }
end
_search_form.html.erb
      <div class="d-inline me-1">
        <%= f.date_field :created_at_gteq, class: 'form-control' %>
      </div>
      <div class="d-inline me-1">
        <span>~</span>
      </div>
      <div class="d-inline me-3">
        <%= f.date_field :created_at_lteq_end_of_day, class: 'form-control' %>
      </div>

ログ確認方法とSQLクエリの日時が違う理由

実際にどういうSQLクエリが行われているかログを見て確認します。
開発環境でリアルタイムにログを見るコマンドは以下になります。

tail -f log/development.log

テスト環境であればtest.log
本番環境であればproduction.log

スクリーンショット 2025-09-12 14.08.51.png
このように選択して検索をかけました。
リアルタイムに出力されたログの中身をみると、

SELECT DISTINCT `boards`.* FROM `boards` WHERE (`boards`.`created_at` >= '2025-08-26 15:00:00' AND `boards`.`created_at` <= '2025-08-28 14:59:59.999999') LIMIT 20 OFFSET 0

(ログ一部抜粋)
created_at >= '2025-08-26 15:00:00' AND created_at <= '2025-08-28 14:59:59.999999'
となっており、27日から28日で検索をかけたのにも関わらず、WHERE句の日時が26日15時00分00秒から28日14時59分59.999999秒で検索されています。

これはタイムゾーンの影響によるもので、表示されている時刻はUTC時間になります。
UTCはUniversal time coordinatedの略であり、世界の時計の基準です。
日本時間はそこから+9時間とされており、この世界基準から9時間早いため、
2025-08-27 00:00:00から9時間早い2025-08-26 15:00:00で検索されているのです。

ついでにDBのタイムスタンプもコンソール内で見てみましょう。
9月12日にBoardを新規作成後、Board.lastで最新のBoardを取得しています。

irb(main):001:0> Board.last
  Board Load (10.4ms)  SELECT `boards`.* FROM `boards` ORDER BY `boards`.`id` DESC LIMIT 1
=>                                                               
#<Board:0x0000ffffb1b4dfc8                                       
 id: 33,                                                         
 title: "a",                                                     
 body: "a",                                                      
 user_id: 19,                                                    
 created_at: Thu, 11 Sep 2025 14:30:53.987588000 JST +09:00,     
 updated_at: Thu, 11 Sep 2025 14:30:53.987588000 JST +09:00,   

9月11日と記録されていますが、JST +09:00と記載することで標準時間から日本時間を表しています。

つまり、システムが自動的に検索または登録された日時から世界基準の地域ごとの時刻を逆算して世界の標準時間として登録しているのです。

時刻関連のログをみるときは混乱しないよう注意しましょう。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?