ruby:urlのクエリパラメータ

uriのクエリパラメータを見やすくしたいときなど

require 'uri'

 URI.decode_www_form("?q=ruby+uri+decode_www_form&sca_esv=717f11d1955b1b6b&sca_upv=1&sxsrf=ADLYWIIP0X3gIeEhSe4IYlXHhXTthW6LHQ%3A1717626943986&ei=P-hgZqH1O7PAvr0Po5COoA8&ved=0ahUKEwjhkOn-wsWGAxUzoK8BHSOIA_QQ4dUDCBA&uact=5&oq=ruby+uri+decode_www_form&gs_lp=Egxnd3Mtd2l6LXNlcnAiGHJ1YnkgdXJpIGRlY29kZV93d3dfZm9ybTIHECMYsAIYJzIIEAAYExgNGB4yBhAAGBMYHjIIEAAYgAQYogQyCBAAGIAEGKIESIsiUN8VWPoXcAF4AJABAJgB3QGgAbkDqgEFMS4xLjG4AQPIAQD4AQGYAgOgAuMCwgIKEAAYsAMY1gQYR5gDAIgGAZAGCpIHBTEuMS4xoAekDg&sclient=gws-wiz-serp")
=>
[["?q", "ruby uri decode_www_form"],
 ["sca_esv", "717f11d1955b1b6b"],
 ["sca_upv", "1"],
 ["sxsrf", "ADLYWIIP0X3gIeEhSe4IYlXHhXTthW6LHQ:1717626943986"],
 ["ei", "P-hgZqH1O7PAvr0Po5COoA8"],
 ["ved", "0ahUKEwjhkOn-wsWGAxUzoK8BHSOIA_QQ4dUDCBA"],
 ["uact", "5"],
 ["oq", "ruby uri decode_www_form"],
 ["gs_lp",
  "Egxnd3Mtd2l6LXNlcnAiGHJ1YnkgdXJpIGRlY29kZV93d3dfZm9ybTIHECMYsAIYJzIIEAAYExgNGB4yBhAAGBMYHjIIEAAYgAQYogQyCBAAGIAEGKIESIsiUN8VWPoXcAF4AJABAJgB3QGgAbkDqgEFMS4xLjG4AQPIAQD4AQGYAgOgAuMCwgIKEAAYsAMY1gQYR5gDAIgGAZAGCpIHBTEuMS4xoAekDg"],
 ["sclient", "gws-wiz-serp"]]

Tips: RubyでURLのクエリパラメータをいい感じに書き換える #Ruby - Qiita
Ruby の URI.encode_www_form - chatwork-mobile

unix:curl

# GET (googleのtoppageが返却)
curl "https://www.google.com"
# ファイル出力時の進捗状況を非表示
curl -s "https://www.google.com"

# ステータスコードを最後に出力:-w '%{http_code}\n'
curl -s "https://www.google.com" -w '%{http_code}\n'
# curl実行結果の出力先を指定:-o
curl -o ./hoge.txt -s  "https://www.google.com"
# /dev/null はデータ全捨て、以下curlはステータスコード表示のみ
curl -o /dev/null -w '%{http_code}\n' -s "https://www.google.com"

# GET以外のリクエスト:-X [http method]
# 以下URLだとエラー、status405(Method Not Allowed)返却
curl -X POST  -o /dev/null -w '%{http_code}\n' -s "https://www.google.com"

# その他
# -H カスタムヘッダー
# -d リクエストパラメータ(GET以外)、別ファイルからの指定も可能

参考にさせていただいたサイト
curlコマンド入門 #初心者向け - Qiita
よく使うcurlコマンドのオプション #Linux - Qiita
curlコマンドでデータを送るときに、ファイルに保存されたデータを使う #Linuxコマンド - Qiita

ruby:日付と時間

日時のクラスはTimeを使用
(Datetimeは非推奨になっている)

> Time.zone.now
=> Tue, 21 May 2024 08:09:26 JST +09:00
> Time.now
=> 2024-05-21 08:09:29 +0900
> Time.now.utc
=> 2024-05-20 23:09:41 UTC
> Time.zone.now.utc
=> 2024-05-20 23:09:49 UTC

どのタイムゾーンを適用するかによる点に注意。

> Time.now - 3.days
=> 2024-05-18 08:16:55 +0900
> Time.now - 1.day
=> 2024-05-20 08:17:07 +0900
> Time.now - 30.days
=> 2024-04-21 08:17:17 +0900
> Time.now - 6.months
=> 2023-11-21 08:17:27 +0900
> Time.now - 2.years
=> 2022-05-21 08:17:35 +0900
> Time.now + 10.years
=> 2034-05-21 08:17:57 +0900

Time.now.beginning_of_day
=> 2024-05-21 00:00:00 +0900
Time.now.beginning_of_month
=> 2024-05-01 00:00:00 +0900
Time.now.beginning_of_year
=> 2024-01-01 00:00:00 +0900

> Time.now.end_of_day
=> 2024-05-21 23:59:59 +0900
> Time.now.end_of_month
=> 2024-05-31 23:59:59 +0900

ruby:table(model)のcsv出力(console)

consoleよりtable内容をcsv出力

require 'csv'

file_path = Rails.root + "/****/****.csv"
daily_log = DailyLog.where(updated_at: Time.zone.today.beginning_of_day..Time.zone.today.end_of_day).order(id: :desc).to_a
CSV.open(file_path, 'w') do |data|
  daily_log.each do |row|
    data << row.attributes.values_at("id", "logdata", "updated_at")
  end
end

git:rebase

派生ブランチを使用した開発
master
  └pr1
    └pr2 (pr作成時点でのmerge先はpr1)

pr1がmasterにマージされると、pr2のマージ先は自動でpr1に変更される
ただし、pr1のcommitがpr2にも表示されてしまう

rebaseし、push -f することによりcommitがpr2分のみに戻る
(注意:途中のブランチもすべて指定する)

git rebase --onto master pr1 pr2

フォースプッシュ(push -f)が必要な点も注意

rebaseとは別だが、
pr1がmasterマージされる前に、pr1のみに実施した修正commitについて、
pr2にも反映させたければ、都度git mergeしておくとよい
(そのあと、pr1マージ後にrebaseしても問題なし)

pr2にて

git merge pr1

rails:N+1問題

後々整理したい。

参考になるサイト

ログで区別する方法など

【Ruby on Rails】N+1問題ってなんだ? #Rails - Qiita

preload, includes, eager_load

ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い #Rails - Qiita

【Rails】 N+1問題の解消 & tips #Ruby - Qiita