-
-
Notifications
You must be signed in to change notification settings - Fork 109
トップページの 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
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+絵文字 |
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文は三項演算子にしても良さそう
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.
一旦実装コード側についてコメントしています!
テストとタスクについては別途共有・相談させてください🙏
2025/07/16 朝会後に共有したこと
|
@nanophate actionsのワークフローについて、お手隙の際にコメントいただけると嬉しいです🙏 やりたいこと当PR内で以下の動きを確認できると嬉しいなと考えています。 ワークフローは main ブランチに存在しないと実行できないようなので、以下の方法を考えていますが認識良さそうでしょうか?
|
f577bcb でブランチでもワークフローが認識されました! |
上記の方法で、コミットした際にトリガーするように対応。一応、GitHub CLI を活用することで、手元からのトリガーが行えることも可能と確認 |
Claude finished @nacchan99's task —— View job Code Review CompleteReviewing this PR for code quality, potential bugs, performance considerations, security concerns, and test coverage. Review Checklist:
🔍 Detailed Code Review✅ Strengths
|
763dc0c
to
e221bbd
Compare
Claude finished @nacchan99's task —— View job Code Review CompleteReviewing this PR for code quality, potential bugs, performance considerations, security concerns, and test coverage. Review Checklist:
🔍 Detailed Code Review✅ Strengths
|
e221bbd
to
a607102
Compare
Claude finished @nacchan99's task —— View job Reviewing this PR for code quality, potential bugs, performance considerations, security concerns, and test coverage. Review Checklist:
🔍 Detailed Code Review✅ Strengths
|
CIテストのエラー解消のため、mainブランチをリベースして最新を取り込みました🙌 |
- に タスクを実装 - 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 を空の配列形式()で初期化
- home_controller.rb: - ニュースデータをDBから取得し、@news_itemsに格納するロジックを追加。 - 最新7件を公開日降順で表示する。 - show.html.erb: - ニュース表示部分をハードコードから@news_itemsを使った動的表示に変更。 - タイトルに既存の絵文字がない場合は「📰」を自動付与するロジックを実装。 - 各ニュースのリンク先をDBから取得したnews.urlに設定。 - news.yml: - fetchタスクによって更新された最新のニュースデータを含む。
レビューに対応: - 全置換方式→追記・更新方式に変更 - IDを古い順に連番で一意性確保 - published_at順ソートの実装 - IDをYAML出力の1行目に配置 主な変更点: • 既存記事のID保持: 新規追加時も既存IDは変更されない • 効率的な分類処理: 新規・更新・変更なしの3分類で最適化 • 詳細ログ出力: 新規X件、更新Y件を明確に表示 • 既存記事更新対応: タイトル・公開日変更の自動反映 • 安全性向上: Time.parseのrequire追加、エラーハンドリング強化 技術的改善: > 既存データをハッシュ化してO(1)検索に最適化 > 3つのアイテム分類(unchanged/updated/truly_new) > BroadcastLoggerでコンソール+ファイル出力 > formatted_itemsでYAML構造を整理
バリデーション内容: ✅ title: 必須項目 ✅ url: 必須項目 + 重複禁止 + HTTP/HTTPS形式チェック ✅ published_at: 必須項目 目的: - データの整合性を保証 - 重複URLの防止
- URLベースIDから整数IDに統一 - 連番管理で保守性向上 - 時系列順序での整理
- format_news_title メソッドのテストを実装 - 先頭文字が絵文字なら保持、そうでなければ📰を付与
- 無効なURLを有効なURL形式に修正 - sequence でユニークなタイトル・URL生成 - バリデーション要件を満たすように改善 - 動的な published_at に変更
- 特定記事に依存しないテストに変更 - /#news での表示機能をテスト - ファクトリーを使用してメンテナンス性向上
0bf9ad4
to
e297078
Compare
@claude Can you convert this issue's description into Japanese? |
Claude finished @nacchan99's task —— View job コードレビュー完了 ✅Todo List:
🔍 詳細コードレビュー評価✅ 大幅な改善点
|
- SSRF対策として Net::HTTP + URL検証を導入 - open-uri の利用を廃止し safe_open メソッドを追加
- YAML.load_file から YAML.safe_load へ置き換え
@claude Can you convert this issue's description into Japanese? |
Claude finished @nacchan99's task —— View job コードレビューの日本語翻訳Todo List:
🔍 詳細コードレビュー評価✅ 大幅な改善点
|
@claude Can you review the two most recent commits and provide your feedback in Japanese? |
Claude finished @nacchan99's task —— View job 最新2つのコミットレビュー 🔍Todo List:
📝 レビュー対象コミット1.
|
@claude 今回のPRでカバーできていないテストについて、追加で作成すべきものがあれば教えてください! |
Claude finished @nacchan99's task —— View job I'll analyze this and get back to you. |
@claude Can you suggest additional tests we should add for this PR, in Japanese? |
Claude finished @nacchan99's task —— View job 追加テストの提案分析Todo List:
📋 現在のテストカバレッジ状況✅ 実装済みのテスト
❌ 未実装のテスト
🧪 追加すべきテスト一覧1. モデルテスト強化 (
|
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.
細かい調整をいくつかお願いしていますが、基本的な動作は良さそうです🙆♀️
Rakeタスクのリファクタリング、テストの追加については、別途issueにまとめて対応いただけると🙏
(必要なテストについて、専用issueで整理すると良さそうです)
pull_request: | ||
branches: | ||
- "*" |
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内で実行を確認できたので、マージ前にカットして良さそうです✂️
pull_request:
branches:
- "*"
メモ:
この定義は今後もPR作成時などに毎回実行される認識です。
実際の運用は定期実行と手動実行ができれば良さそう🙆♀️
class News < ApplicationRecord | ||
scope :recent, -> { order(published_at: :desc) } | ||
|
||
validates :title, presence: true | ||
validates :url, presence: true, | ||
uniqueness: true, | ||
format: { with: /\Ahttps?:\/\/.*\z/i } | ||
validates :published_at, presence: true | ||
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.
細かいのですが、インデントは2文字で揃えると良さそうです
また、値部分はタブやスペースの数に厳密にこだわらず、縦に揃えると🙆♀️
class News < ApplicationRecord
scope :recent, -> { order(published_at: :desc) }
validates :title, presence: true
validates :url, presence: true,
uniqueness: true,
format: { with: %r{\Ahttps?://.*\z}i }
validates :published_at, presence: true
end
existing_news = if File.exist?(yaml_path) | ||
YAML.safe_load(File.read(yaml_path), permitted_classes: [Time], aliases: true)['news'] || [] | ||
else | ||
[] | ||
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.
細かいですが、if
に揃えると読みやすくて良さそうです👀✨
existing_news = if File.exist?(yaml_path)
YAML.safe_load(File.read(yaml_path), permitted_classes: [Time], aliases: true)['news'] || []
else
[]
end
feed_urls = if Rails.env.test? || Rails.env.staging? | ||
[Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s] | ||
else | ||
[ | ||
'https://news.coderdojo.jp/feed/', | ||
# 必要に応じて他 Dojo の RSS もここに追加可能 | ||
# 'https://coderdojotokyo.org/feed', | ||
] | ||
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.
ここも if
に揃えると良さそうです!
また、今後の追加を考えて「あえてコンマを付ける」の方針もあるかと思うのですが、
'https://news.coderdojo.jp/feed/',
の最後のコンマは不要かなと思います👀💭
uri = URI.parse(url) | ||
unless uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS) | ||
raise "不正なURLです: #{url}" | ||
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.
後置unless にするとスッキリしそうです!
- unless uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS)
- raise "不正なURLです: #{url}"
- end
+ raise "不正なURLです: #{url}" unless uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS)
メモ:
絶対ではないですが、1行のときは後置iunless文(後置if文)とすると良さそうです📝
end | ||
end | ||
|
||
# 既存データをハッシュに変換(URL をキーに) |
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 をキーに)
+ # 既存データをハッシュに変換(URL をキーに)
updated_item = existing_item.merge(new_item) # 新しい情報で更新 | ||
updated_items << updated_item |
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.
別タスクで対応いただけたらと思うのですが、
現状だと常に全て更新されているようなので、「更新があったら上書き」が良さそうです👀
メモ:
上で、中身が1文の時は「後置if」にすると〜とコメントしているのですが、
ここでは、後置ifで1行にすると長すぎて読みにくいと感じたので分けて書いています🙏
- updated_item = existing_item.merge(new_item) # 新しい情報で更新
- updated_items << updated_item
+ # 更新があった場合に上書きの例
+ if existing_item['title'] != new_item['title'] || existing_item['published_at'] != new_item['published_at']
+ updated_items << existing_item.merge(new_item)
+ end
require 'yaml' | ||
|
||
namespace :news do | ||
desc "db/news.yml を読み込んで News テーブルを upsert する" |
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.
シングルクォートが良さそうです👍
news = News.find_or_initialize_by(url: attrs['url']) | ||
news.assign_attributes( | ||
title: attrs['title'], | ||
published_at: attrs['published_at'] | ||
) | ||
news.save! | ||
puts "[news] #{news.published_at.to_date} #{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.
こちらも別タスクでOKですが、
現状だと常に全て更新されているようなので、更新があった場合のみ保存が良さそうです👀💭
# 更新があった場合に上書きの例
entries.each do |attrs|
news = News.find_or_initialize_by(url: attrs['url'])
+ is_new = news.new_record?
news.assign_attributes(
title: attrs['title'],
published_at: attrs['published_at']
)
- news.save!
- puts "[news] #{news.published_at.to_date} #{news.title}"
+ if news.changed?
+ news.save!
+ status = is_new ? 'new' : 'updated'
+ puts "[news] #{news.published_at.to_date} #{news.title} (#{status})"
+ end
end
puts "Imported #{entries.size} items."
も調整いただけると🙏
require 'rails_helper' | ||
|
||
RSpec.describe News, type: :model do | ||
pending "add some examples to (or delete) #{__FILE__}" | ||
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.
別タスクでテストの整備をしましょう〜とお話ししているので、今回はこのままでOkですが
pending だけでテストを追加していないなら、コミットに含めなくて良いのかなと思います👀
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. ニュースYAMLを空にリセット
➡︎
db/news.yml
が空の配列になります(必要ならDBのニュースも削除)
➡︎この時点で
http://localhost:3000/#news
を開くと何も表示されません2. RSSを取得してYAMLを更新
bundle exec rails news:fetch
➡︎
db/news.yml
に最新のニュースデータが書き込まれます3. YAMLをデータベースに取り込む
bundle exec rails news:import_from_yaml
➡︎DB にニュースレコードが登録されます
4. ブラウザで動作確認
http://localhost:3000/#news
を開くテスト環境でのRSS取得確認(←この確認作業が必要かどうか検討中です🙌)
期待する結果:サンプルRSSから3件のニュースが取得される
なお、GitHub Actions や Heroku でのログ確認については、まだ十分に理解できていないため、今回の動作確認手順には含めておりません🙏
この PR でやらないこと
/blogs
で表示(拡張案)