-
-
Notifications
You must be signed in to change notification settings - Fork 108
トップページの news セクションを RSS から自動生成 #1704
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
base: main
Are you sure you want to change the base?
Conversation
- に タスクを実装 - CoderDojo.jp の RSS フィードから記事タイトル、公開日、URL を取得して出力 - URL を ID として重複排除を実装 - をテスト用フィクスチャとして追加
- .github/workflows/fetch_news.yml を作成 - cron('0 0 * * *') で毎朝 9:00 JST に自動実行を設定 - workflow_dispatch による手動トリガーを有効化 - ruby/setup-ruby で から Ruby をセットアップ+bundler-cache を有効化 - news:fetch タスク実行後に db/news.yml の差分をコミット&プッシュする処理を追加
- title:string、url:string、published_at:datetime の Newsモデルを生成 - url カラムにユニークインデックスを追加し重複登録を防止 - spec/models/news_spec.rb にモデルスペック用ファイルを作成 - spec/factories/news.rb に FactoryBot ファクトリを追加
- lib/tasks/import_news.rake を作成し、db/news.yml の内容を News テーブルに upsert するタスクを実装 - db/news.yml を空の配列形式()で初期化
lib/tasks/fetch_news.rake
Outdated
[ Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s ] | ||
else | ||
[ | ||
'https://coderdojo.jp/feed', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
早速の PR ありがとうございます!! 🙏✨
ココの URL が気になっているのですが、この URL を自分でアクセスして間違っていないかどうか確認してみましたか...? 🤔💭 (AI が出力したコードを確認せず、鵜呑みにしていたりしていませんか...? 😭💦)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
重要な部分の確認が抜けておりました😵💫すみません!🙇♀️
こちらは単純に私の勘違いです🙌💦
再度見直して修正します🙇♀️
先ほどrakudaさんからzoomでアドバイスをいただいたので、そちらを参考にしながら進める予定です!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
共有したことメモ
- このURLは「とってきたい情報(表示させたい情報)」のある場所を定義する
- どんな情報を表示させたいか
- リンク先を確認
- https://news.coderdojo.jp/feed/
bundle exec rails news:import_from_yaml
はローカルで実行される- 追記: 環境を指定していないので開発環境で実行される
- 追記 : 本番環境に対して実行したいときは、本番環境を指定するフラグが必要
bundle exec rails news:import_from_yaml
を実行して、/#news
の表示が更新されるのを目標にすると良さそう- 現在は
app/views/home/show.html.erb
に直接書かれている - DBから呼び出せると良さそう
- 現在は
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
丁寧にありがとうございます😭✨
自分でもよく分からないまま進めてしまっていたので、仕組みを理解した上で実装に移りたいと思います🙌
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
自分でもよく分からないまま進めてしまっていたので、仕組みを理解した上で実装に移りたいと思います🙌
ですね!😆👌 少なくとも PR として出すコードについては、変更したコードを他人に説明できるレベルまで理解してからレビュー依頼する という流れだと助かります! 🙏💦
具体的には、
- レビューする側の負担がなるべく小さくなるように心がける (≒ レビューする側の時間をなるべく奪わない)
- PR に含まれるコード・説明文・コミットメッセージなどは、他人に説明できるレベルまで理解し、なるべく簡潔にまとめる(長ければ長いほどレビューする側の負担になるため)
- PR 内にもし理解できない部分があれば、その都度 AI に質問したり Google で検索などをし、他人に説明できるレベルの理解に至るまで繰り返す
といった考え方で進めていただけると、他のチームメンバーの方々に不要な負担を強いることも少なくなって良いかな思います! (๑˃̵ᴗ˂̵)b✨
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ご指摘ありがとうございます!🙌
もう少し自分の中で噛み砕いて、解像度を上げていきたいと思います!🙇♀️
@yasulab 現状、RSSフィードから取得したニュースタイトルには、絵文字が含まれるもの(例: 「🎲 ダイス〜」)と含まれないもの(例: 「DojoLetter〜」)が混在しています。 以下の2点の方針とその実装方法について、意見を伺いたいです🙌
![]() この方針で進めて問題ないでしょうか?🙌
この正規表現を使った判定方法で問題ないでしょうか? お忙しいところ恐縮ですが、お時間がある際にご確認をお願いいたします! 🙏 |
@nacchan99 ご提案ありがとうございます!以下の方針がよさそうですね!(๑˃̵ᴗ˂̵)b✨
@nacchan99 質問する前にまずは "Ruby 絵文字" で検索 して、よりシンプルな方法がないか調べてみましょう! 🔍 💨 https://www.google.com/search?q=Ruby+絵文字 |
- home_controller.rb: - ニュースデータをDBから取得し、@news_itemsに格納するロジックを追加。 - 最新7件を公開日降順で表示する。 - show.html.erb: - ニュース表示部分をハードコードから@news_itemsを使った動的表示に変更。 - タイトルに既存の絵文字がない場合は「📰」を自動付与するロジックを実装。 - 各ニュースのリンク先をDBから取得したnews.urlに設定。 - news.yml: - fetchタスクによって更新された最新のニュースデータを含む。
app/views/home/show.html.erb
Outdated
</li> | ||
<% @news_items.each do |news| %> | ||
<li> | ||
<% has_emoji = news.title.chars.any? { |char| char.match?(/[\p{Emoji}&&[^0-9#*]]/) } %> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rakuda-san-desu
急ぎではないので、お時間がある際にご一読いただければと思います🙇♀️
【ご相談】
元の記事タイトルに絵文字が含まれている場合は、その絵文字をそのまま使用して表示する。
元の記事タイトルに絵文字が含まれていない場合は、タイトルの前に「📰」の絵文字を自動的に付与して表示する。
上記を実現するため、ビュー(app/views/home/show.html.erb
)での絵文字の有無判定ロジックについて、複数のパターンを試しました。
- 試行パターン1:
\p{Emoji}
のみによる判定- コード:
has_emoji = news.title.chars.any? { |char| char.match?(/\p{Emoji}/) }
- 結果: 元の記事に絵文字(例:
🎲
)がある場合は正しくその絵文字が表示されましたが、絵文字がない記事(DojoLetter系や米国系IT企業)には「📰」がまったく付与されませんでした。 (「絵文字がない場合に付与する」というロジックが機能しなかった)
- コード:

- 試行パターン2: Unicode範囲による判定
- コード:
has_emoji = news.title.chars.any? { |char| char.match?(/[\u{1F000}-\u{1F9FF}\u{2600}-\u{27BF}\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}]/) }
- 結果: 期待通りの挙動が得られました。
- コード:

-
試行パターン3:
\p{Emoji}
と\p{Emoji_Component}
を組み合わせた判定- コード:
has_emoji = news.title.chars.any? { |char| char.match?(/([\p{Emoji}]|\p{Emoji_Component})&&[^\p{Ascii}]]/) }
- 経緯: 試行パターン2で一旦解決しましたが、Rubyで文字列に絵文字が含まれるかどうかを判定する方法という記事(安川さんのアドバイスで発見)で、より堅牢な判定方法としてこの正規表現が紹介されていたため、こちらも試してみました。
- 結果: こちらも、期待通りの挙動が得られることを確認しました。(パターン2と同様の表示であるため、スクショは割愛します🙌)
- コード:
-
試行パターン4:
\p{Emoji}
と特定の除外条件を組み合わせた判定- コード:
has_emoji = news.title.chars.any? { |char| char.match?(/[\p{Emoji}&&[^0-9#*]]/) }
- 経緯: 上記の記事内によりシンプルなコードがあったので、試行しました。(コードはなるべくシンプルに。必要になった時に随時追加していく。という方針を先日教えていただいたため)
- 結果: ローカル環境では期待通りの挙動(テストも全てクリア)だったので、コミット&プッシュしたところ、GitHub Actions (CI) の自動テストで失敗しました。⬅️今ココです🙌
失敗ログの該当部分は以下の通りです。
(今回のニュース表示機能の変更home_controller.rb
,show.html.erb
とは直接関係しない問題のようです🧐)
- コード:
# CIのテスト失敗ログより抜粋
Failures:
1) Stats GET /english/stats 都道府県名が英語で表示される
Failure/Error: Prefecture.find_or_create_by!(name: "東京", region: "関東")
ActiveRecord::RecordNotFound:
Couldn't find Prefecture with [WHERE "prefectures"."name" = $1 AND "prefectures"."region" = $2 AND "prefectures"."name" = $3 AND "prefectures"."region" = $4]
# ./spec/requests/stats_spec.rb:27:in 'block (3 levels) in <main>'
# ------------------
# --- Caused by: ---
# PG::UniqueViolation:
# ERROR: duplicate key value violates unique constraint "prefectures_pkey"
# DETAIL: Key (id)=(1) already exists.
# ./spec/requests/stats_spec.rb:27:in 'block (3 levels) in <main>'
最終的なコードの選択について
この状況を踏まえ、どの絵文字判定ロジックを最終的に採用すべきか、迷っております。
-
パターン2 (
[\u{1F000}-\u{1F9FF}...]
):- 利点: 直接的な範囲指定で、私の開発環境では安定して動作することを確認済み。
- 懸念点: 新しい絵文字や複雑な絵文字のパターン(肌色修飾子など)には対応しきれない可能性がある。
-
パターン3 (
(/[\p{Emoji}]|\p{Emoji_Component})&&[^\p{Ascii}]]/)
):- 利点: Unicodeプロパティを使用しており、概念的にはより正確で将来的な絵文字の追加にも対応しやすい。
- 懸念点: パターン2よりは短いが、正規表現の構文が複雑である。
個人的には、パターン3の採用が良いのではないかと考えていますが、最終的な判断ができない状況です🙌
お忙しいところ恐縮ですが、お手隙の際にご確認をお願いします! 🙏
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
共有したこと
- テストについて
- mainを取り込んでテスト(プッシュ)を試してみると良さそうに感じます
- 当PRとは関係なさそうな部分で落ちている
- main が当PRより進んでいる
- Actions のログで、似た部分で落ちていた記録がある(後に解消している)
- 絵文字の有無の判定について
- 思った結果と何が違うのか、コンソールでコードを実行し試してみると良さそう
coderdojo-jp(dev)> news.title => "米国系 IT 企業から CoderDojo へ、55 台のノート PC 寄贈" coderdojo-jp(dev)> news.title.chars.any? { |char| char.match?(/\p{Emoji}/) } => true # 「上記で、なぜtrueになるのか確認したい」とAIに質問したコード coderdojo-jp(dev)> news.title.chars.select { |char| char.match?(/\p{Emoji}/) } coderdojo-jp(dev)> # 数字の5が絵文字認定されている => ["5", "5"]
- 上記の結果から4.の
news.title.chars.any? { |char| char.match?(/[\p{Emoji}&&[^0-9#*]]/) }
が良さそう - 疑問: 含まれるテキスト全てを判定している
- 先頭に絵文字がなくても文中に絵文字が含まれると?
- 文頭だけ評価すれば良さそう?
- 思った結果と何が違うのか、コンソールでコードを実行し試してみると良さそう
- リファクタリング案(もしよかったらのご提案です)
- 絵文字の有無の判定はヘルパーに移しても良さそう
- 絵文字を追加するかのif文は三項演算子にしても良さそう
- 絵文字判定を全文字チェックから先頭文字のみに変更 - if文を三項演算子でシンプル化 - ロジックをヘルパーメソッド format_news_title に分離
- 🎉 テスト記事③ を追加し、絵文字判定の両パターンをテスト可能に
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
一旦実装コード側についてコメントしています!
テストとタスクについては別途共有・相談させてください🙏
- name: Set up Ruby | ||
uses: ruby/setup-ruby@v1 | ||
with: | ||
ruby-version-file: .ruby-version |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
以下が良さそうです👀
- ruby-version-file: .ruby-version
+ ruby-version: .ruby-version
app/controllers/home_controller.rb
Outdated
@@ -3,5 +3,6 @@ def show | |||
@dojo_count = Dojo.active_dojos_count | |||
@regions_and_dojos = Dojo.group_by_region_on_active | |||
@prefectures_and_dojos = Dojo.group_by_prefecture_on_active | |||
@news_items = News.all.order(published_at: :desc).limit(7) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これはリファクタ案なのですが、データの並び順はモデルで指定するのも良さそうです💭
#app/controllers/home_controller.rb
- @news_items = News.all.order(published_at: :desc).limit(7)
+ @news_items = News.recent.limit(7)
# app/models/news.rb
class News < ApplicationRecord
+ scope :recent, -> { order(published_at: :desc) }
end
app/helpers/application_helper.rb
Outdated
has_emoji = news.title[0]&.match?(/[\p{Emoji}&&[^0-9#*]]/) | ||
has_emoji ? news.title : "📰 #{news.title}" | ||
end | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この改行は不要そうです✂️
db/news.yml
Outdated
--- | ||
news: | ||
- url: https://news.coderdojo.jp/2024/12/25/box-japan-to-coderdojo/ | ||
title: "\U0001F384128台のノート PC 寄贈、Box Japan から CoderDojo へ \U0001F381" | ||
published_at: Wed, 25 Dec 2024 11:00:40 +0000 | ||
id: https://news.coderdojo.jp/2024/12/25/box-japan-to-coderdojo/ | ||
- url: https://news.coderdojo.jp/2025/01/14/dojoletter-vol-79-2024%e5%b9%b411%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.79 2024年11月号 | ||
published_at: Tue, 14 Jan 2025 03:30:45 +0000 | ||
id: https://news.coderdojo.jp/2025/01/14/dojoletter-vol-79-2024%e5%b9%b411%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2025/06/10/dojoletter-vol-85-2025%e5%b9%b404%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.85 2025年04月号 | ||
published_at: Tue, 10 Jun 2025 03:30:18 +0000 | ||
id: https://news.coderdojo.jp/2025/06/10/dojoletter-vol-85-2025%e5%b9%b404%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2024/12/10/dojoletter-vol-78-2024%e5%b9%b410%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.78 2024年10月号 | ||
published_at: Tue, 10 Dec 2024 04:00:06 +0000 | ||
id: https://news.coderdojo.jp/2024/12/10/dojoletter-vol-78-2024%e5%b9%b410%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2025/04/10/dojoletter-vol-83-2025%e5%b9%b402%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.83 2025年02月号 | ||
published_at: Thu, 10 Apr 2025 03:45:27 +0000 | ||
id: https://news.coderdojo.jp/2025/04/10/dojoletter-vol-83-2025%e5%b9%b402%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2025/05/12/dojoletter-vol-84-2025%e5%b9%b403%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.84 2025年03月号 | ||
published_at: Mon, 12 May 2025 04:00:33 +0000 | ||
id: https://news.coderdojo.jp/2025/05/12/dojoletter-vol-84-2025%e5%b9%b403%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2025/03/10/dojoletter-vol-82-2025%e5%b9%b401%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.82 2025年01月号 | ||
published_at: Mon, 10 Mar 2025 04:00:33 +0000 | ||
id: https://news.coderdojo.jp/2025/03/10/dojoletter-vol-82-2025%e5%b9%b401%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2025/02/10/dojoletter-vol-80-2024%e5%b9%b412%e6%9c%88%e5%8f%b7/ | ||
title: DojoLetter Vol.80 2024年12月号 | ||
published_at: Mon, 10 Feb 2025 04:00:55 +0000 | ||
id: https://news.coderdojo.jp/2025/02/10/dojoletter-vol-80-2024%e5%b9%b412%e6%9c%88%e5%8f%b7/ | ||
- url: https://news.coderdojo.jp/2025/02/14/coderdojo-de-nyaicecode/ | ||
title: "\U0001F3B2 ダイス×プログラミング『ニャイス!コード』を、CoderDojo に75台寄贈" | ||
published_at: Fri, 14 Feb 2025 08:24:07 +0000 | ||
id: https://news.coderdojo.jp/2025/02/14/coderdojo-de-nyaicecode/ | ||
- url: https://news.coderdojo.jp/2025/04/04/55-laptops-to-coderdojo/ | ||
title: 米国系 IT 企業から CoderDojo へ、55 台のノート PC 寄贈 | ||
published_at: Fri, 04 Apr 2025 10:00:32 +0000 | ||
id: https://news.coderdojo.jp/2025/04/04/55-laptops-to-coderdojo/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
現状最新の10件のデータと思うので、初めからこの状態の news.yml
を用意しておくと、取得タスクを実行した時に更新できたかわからなくなりそうです👀
例えば以下で bundle exec rails news:import_from_yaml
を実行すると、本番環境で表示されている news と同じ内容で表示され、
bundle exec rails news:fetch
で、news.yml
が更新されることを確認できます👍
また、id行について以下のことを考えています💭
- 記述するなら1行目かなと思いました
- URLと同じ内容なので、必要かな?と悩んでいます
- データベースのidは自動連番として入っていました
- URLは一意の設定になっていて、重複はしなそうです🙆♀️
---
news:
- url: https://news.coderdojo.jp/2025/04/04/55-laptops-to-coderdojo/
title: 米国系 IT 企業から CoderDojo へ、55 台のノート PC 寄贈
published_at: Fri, 04 Apr 2025 10:00:32 +0000
id: https://news.coderdojo.jp/2025/04/04/55-laptops-to-coderdojo/
- url: https://news.coderdojo.jp/2025/03/10/dojoletter-vol-82-2025%e5%b9%b401%e6%9c%88%e5%8f%b7/
title: DojoLetter Vol.82 2025年01月号
published_at: Mon, 10 Mar 2025 04:00:33 +0000
id: https://news.coderdojo.jp/2025/03/10/dojoletter-vol-82-2025%e5%b9%b401%e6%9c%88%e5%8f%b7/
- url: https://news.coderdojo.jp/2025/02/14/coderdojo-de-nyaicecode/
title: "\U0001F3B2 ダイス×プログラミング『ニャイス!コード』を、CoderDojo に75台寄贈"
published_at: Fri, 14 Feb 2025 08:24:07 +0000
id: https://news.coderdojo.jp/2025/02/14/coderdojo-de-nyaicecode/
- url: https://news.coderdojo.jp/2025/02/10/dojoletter-vol-80-2024%e5%b9%b412%e6%9c%88%e5%8f%b7/
title: DojoLetter Vol.80 2024年12月号
published_at: Mon, 10 Feb 2025 04:00:55 +0000
id: https://news.coderdojo.jp/2025/02/10/dojoletter-vol-80-2024%e5%b9%b412%e6%9c%88%e5%8f%b7/
- url: https://news.coderdojo.jp/2025/01/14/dojoletter-vol-79-2024%e5%b9%b411%e6%9c%88%e5%8f%b7/
title: DojoLetter Vol.79 2024年11月号
published_at: Tue, 14 Jan 2025 03:30:45 +0000
id: https://news.coderdojo.jp/2025/01/14/dojoletter-vol-79-2024%e5%b9%b411%e6%9c%88%e5%8f%b7/
- url: https://news.coderdojo.jp/2024/12/25/box-japan-to-coderdojo/
title: "\U0001F384128台のノート PC 寄贈、Box Japan から CoderDojo へ \U0001F381"
published_at: Wed, 25 Dec 2024 11:00:40 +0000
id: https://news.coderdojo.jp/2024/12/25/box-japan-to-coderdojo/
- url: https://news.coderdojo.jp/2024/12/10/dojoletter-vol-78-2024%E5%B9%B410%E6%9C%88%E5%8F%B7/
title: DojoLetter Vol.82 2024年10月号
published_at: Tue, 10 Dec 2024 00:00:00 +0000
id: https://news.coderdojo.jp/2024/12/10/dojoletter-vol-78-2024%E5%B9%B410%E6%9C%88%E5%8F%B7/
lib/tasks/fetch_news.rake
Outdated
|
||
# テスト/ステージング環境ではサンプルファイル、本番は実サイトのフィード | ||
feed_urls = if Rails.env.test? || Rails.env.staging? | ||
[ Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
最初と最後のスペースは不要そうです✂️
- [ Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s ]
+ [Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s]
2025/07/16 朝会後に共有したこと
|
@nanophate actionsのワークフローについて、お手隙の際にコメントいただけると嬉しいです🙏 やりたいこと当PR内で以下の動きを確認できると嬉しいなと考えています。 ワークフローは main ブランチに存在しないと実行できないようなので、以下の方法を考えていますが認識良さそうでしょうか?
|
f577bcb でブランチでもワークフローが認識されました! |
上記の方法で、コミットした際にトリガーするように対応。一応、GitHub CLI を活用することで、手元からのトリガーが行えることも可能と確認 |
Fixes #1577
この PR でやりたいこと
手作業で更新しているニュース一覧を 、RSS から自動取得して YAML 化し、CI/Actions で定期更新できるようにする
この PR でやること
1. 以下の RSS フィードをチェックするタスクを lib/tasks/fetch_news.rake に実装
https://coderdojo.jp/#news
(実際にはhttps://coderdojo.jp/feed
など)lib/tasks
配下に新規ファイルを作成2. RSS から記事タイトル/公開日/URL を抽出し YAML に追記・更新
db/news.yml
uniq
3. 上記タスクを GitHub Actions で毎朝 9:00 JST に実行
cron: '0 0 * * *'
(UTC0 = JST9:00)db/news.yml
を自動コミット4. 別途、CI(例: Heroku リリーススクリプト)で YAML から DB に保存
script/release.sh
にbundle exec rails news:import_from_yaml
を追記動作確認手順
1. ニュースデータを更新
2. ローカルでサーバーを起動して、トップページにアクセス
3. 「最近の CoderDojo」セクションを確認
4. テスト環境でのRSS取得確認(←この確認作業が必要かどうか検討中です🙌)
期待する結果:サンプルRSSから3件のニュースが取得される
なお、GitHub Actions や Heroku でのログ確認については、まだ十分に理解できていないため、今回の動作確認手順には含めておりません🙏
この PR でやらないこと
/blogs
で表示(拡張案)