Skip to content

トップページの 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

Open
wants to merge 17 commits into
base: main
Choose a base branch
from

Conversation

nacchan99
Copy link
Contributor

@nacchan99 nacchan99 commented Jun 26, 2025

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
    • 重複排除:URL を ID として uniq
    • 通常 DB ではなく、コミット可能な YAML 経由で参照・更新できる設計
  • 3. 上記タスクを GitHub Actions で毎朝 9:00 JST に実行

    • 定期スケジュール:cron: '0 0 * * *' (UTC0 = JST9:00)
    • db/news.yml を自動コミット
  • 4. 別途、CI(例: Heroku リリーススクリプト)で YAML から DB に保存

    • CI ログは外部に公開されない設計
    • script/release.shbundle exec rails news:import_from_yaml を追記

動作確認手順

1. ニュースデータを更新

bundle exec rails news:import_from_yaml

2. ローカルでサーバーを起動して、トップページにアクセス

bin/rails server

3. 「最近の CoderDojo」セクションを確認

  • 絵文字が含まれるタイトル:そのまま表示
  • 絵文字が含まれないタイトル:先頭に📰が付いて表示

4. テスト環境でのRSS取得確認(←この確認作業が必要かどうか検討中です🙌)

# テスト環境ではサンプルRSSファイルを使用
RAILS_ENV=test bundle exec rails news:fetch
git status  # db/news.yml の更新を確認

期待する結果:サンプルRSSから3件のニュースが取得される

  • 🎉 テスト記事③ → そのまま表示(絵文字あり)
  • 📰 テスト記事② → 📰が追加(絵文字なし)
  • 📰 テスト記事① → 📰が追加(絵文字なし)

なお、GitHub Actions や Heroku でのログ確認については、まだ十分に理解できていないため、今回の動作確認手順には含めておりません🙏

この PR でやらないこと

  • 他 Dojo のブログ RSS をまとめて /blogs で表示(拡張案)

-  に  タスクを実装
- 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 を空の配列形式()で初期化
@nacchan99 nacchan99 changed the title [WIP] トップページの news セクションを RSS から自動生成 トップページの news セクションを RSS から自動生成 Jul 1, 2025
[ Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s ]
else
[
'https://coderdojo.jp/feed',
Copy link
Member

@yasulab yasulab Jul 1, 2025

Choose a reason for hiding this comment

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

早速の PR ありがとうございます!! 🙏✨

ココの URL が気になっているのですが、この URL を自分でアクセスして間違っていないかどうか確認してみましたか...? 🤔💭 (AI が出力したコードを確認せず、鵜呑みにしていたりしていませんか...? 😭💦)

https://coderdojo.jp/feed

Copy link
Contributor Author

@nacchan99 nacchan99 Jul 1, 2025

Choose a reason for hiding this comment

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

重要な部分の確認が抜けておりました😵‍💫すみません!🙇‍♀️
こちらは単純に私の勘違いです🙌💦

再度見直して修正します🙇‍♀️

先ほどrakudaさんからzoomでアドバイスをいただいたので、そちらを参考にしながら進める予定です!

Copy link
Contributor

@rakuda-san-desu rakuda-san-desu Jul 2, 2025

Choose a reason for hiding this comment

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

共有したことメモ

  • このURLは「とってきたい情報(表示させたい情報)」のある場所を定義する
  • bundle exec rails news:import_from_yaml はローカルで実行される
    • 追記: 環境を指定していないので開発環境で実行される
    • 追記 : 本番環境に対して実行したいときは、本番環境を指定するフラグが必要
  • bundle exec rails news:import_from_yaml を実行して、/#news の表示が更新されるのを目標にすると良さそう
    • 現在は app/views/home/show.html.erb に直接書かれている
    • DBから呼び出せると良さそう

Copy link
Contributor Author

Choose a reason for hiding this comment

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

丁寧にありがとうございます😭✨
自分でもよく分からないまま進めてしまっていたので、仕組みを理解した上で実装に移りたいと思います🙌

Copy link
Member

@yasulab yasulab Jul 2, 2025

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✨

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ご指摘ありがとうございます!🙌
もう少し自分の中で噛み砕いて、解像度を上げていきたいと思います!🙇‍♀️

@nacchan99
Copy link
Contributor Author

@yasulab
お忙しいところ、メンション失礼します🙇‍♀️
現在の実装方針とコードに関してご相談させてください🙌

現状、RSSフィードから取得したニュースタイトルには、絵文字が含まれるもの(例: 「🎲 ダイス〜」)と含まれないもの(例: 「DojoLetter〜」)が混在しています。

以下の2点の方針とその実装方法について、意見を伺いたいです🙌

  1. 絵文字の表示について:
    • 現在考案中の表示方針:
      • 元の記事タイトルに絵文字が含まれている場合は、その絵文字をそのまま使用して表示する。
      • 元の記事タイトルに絵文字が含まれていない場合は、タイトルの前に「📰」の絵文字を自動的に付与して表示する。
        採用した場合は、このような見た目になります!
スクリーンショット 2025-07-03 12 25 08

この方針で進めて問題ないでしょうか?🙌
(例えば、全てのニュースに同じ絵文字を付ける、あるいは絵文字は付けない、など他の推奨方針があれば知りたいです!)

  1. 絵文字の有無判定のコードについて:
    • 上記の方針を実現するため、ビュー(show.html.erb)では、以下のコードでタイトルに絵文字が含まれているかを判定する予定です。(例で挙げているスクリーンショットはこのコードを採用しています⇧)
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}]/) }

この正規表現を使った判定方法で問題ないでしょうか?
(よりシンプルな方法や、パフォーマンス面で懸念があればご指摘いただきたいです🙌)

お忙しいところ恐縮ですが、お時間がある際にご確認をお願いいたします! 🙏

@yasulab
Copy link
Member

yasulab commented Jul 3, 2025

@nacchan99 ご提案ありがとうございます!以下の方針がよさそうですね!(๑˃̵ᴗ˂̵)b✨

  • 元の記事タイトルに絵文字が含まれていない場合は、タイトルの前に「📰」の絵文字を自動的に付与して表示する。

この正規表現を使った判定方法で問題ないでしょうか?
(よりシンプルな方法や、パフォーマンス面で懸念があればご指摘いただきたいです🙌)

@nacchan99 質問する前にまずは "Ruby 絵文字" で検索 して、よりシンプルな方法がないか調べてみましょう! 🔍 💨 https://www.google.com/search?q=Ruby+絵文字

nacchan99 added 2 commits July 7, 2025 09:02
- home_controller.rb:
  - ニュースデータをDBから取得し、@news_itemsに格納するロジックを追加。
  - 最新7件を公開日降順で表示する。

- show.html.erb:
  - ニュース表示部分をハードコードから@news_itemsを使った動的表示に変更。
  - タイトルに既存の絵文字がない場合は「📰」を自動付与するロジックを実装。
  - 各ニュースのリンク先をDBから取得したnews.urlに設定。

- news.yml:
  - fetchタスクによって更新された最新のニュースデータを含む。
</li>
<% @news_items.each do |news| %>
<li>
<% has_emoji = news.title.chars.any? { |char| char.match?(/[\p{Emoji}&&[^0-9#*]]/) } %>
Copy link
Contributor Author

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. 試行パターン1: \p{Emoji} のみによる判定
    • コード: has_emoji = news.title.chars.any? { |char| char.match?(/\p{Emoji}/) }
    • 結果: 元の記事に絵文字(例: 🎲)がある場合は正しくその絵文字が表示されましたが、絵文字がない記事(DojoLetter系や米国系IT企業)には「📰」がまったく付与されませんでした。 (「絵文字がない場合に付与する」というロジックが機能しなかった)
スクリーンショット 2025-07-07 8 29 08
  1. 試行パターン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}]/) }
    • 結果: 期待通りの挙動が得られました。
スクリーンショット 2025-07-07 8 39 37
  1. 試行パターン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と同様の表示であるため、スクショは割愛します🙌)
  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の採用が良いのではないかと考えていますが、最終的な判断ができない状況です🙌
お忙しいところ恐縮ですが、お手隙の際にご確認をお願いします! 🙏

Copy link
Contributor

@rakuda-san-desu rakuda-san-desu Jul 7, 2025

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文は三項演算子にしても良さそう

nacchan99 added 3 commits July 8, 2025 15:40
- 絵文字判定を全文字チェックから先頭文字のみに変更
- if文を三項演算子でシンプル化
- ロジックをヘルパーメソッド format_news_title に分離
- 🎉 テスト記事③ を追加し、絵文字判定の両パターンをテスト可能に
@nacchan99 nacchan99 requested review from rakuda-san-desu and removed request for rakuda-san-desu July 10, 2025 06:54
Copy link
Contributor

@rakuda-san-desu rakuda-san-desu left a 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
Copy link
Contributor

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

@@ -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)
Copy link
Contributor

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

has_emoji = news.title[0]&.match?(/[\p{Emoji}&&[^0-9#*]]/)
has_emoji ? news.title : "📰 #{news.title}"
end

Copy link
Contributor

Choose a reason for hiding this comment

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

この改行は不要そうです✂️

db/news.yml Outdated
Comment on lines 1 to 42
---
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/
Copy link
Contributor

@rakuda-san-desu rakuda-san-desu Jul 11, 2025

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/


# テスト/ステージング環境ではサンプルファイル、本番は実サイトのフィード
feed_urls = if Rails.env.test? || Rails.env.staging?
[ Rails.root.join('spec', 'fixtures', 'sample_news.rss').to_s ]
Copy link
Contributor

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]

@rakuda-san-desu
Copy link
Contributor

rakuda-san-desu commented Jul 14, 2025

2025/07/16 朝会後に共有したこと

  • テストについて
    • 絵文字のヘルパーのテストと、/#newsに内容が表示されているかのテストはあると良さそう
    • 他にも必要そう・あると嬉しいテストは考えられるので、一旦別イシューに切り出しておくと良さそう
  • news.yml について
    • 現在は常に、最新10件で上書き
    • 追記・更新していきたい
    • 上から、published_at が新しい順に追加されていくと嬉しい
    • YAML ファイル内の id の扱いについてrakuda もわからないので、別途意見を伺う
  • actionsのワークフローについて
    • GitHubアクションが実行してくれる作業
    • 毎日9時にタスクを実行
    • PRで、手動で試せると嬉しい←rakudaが確認
  • script/release.shについて
    • デプロイ時にHeroku で実行されるコマンドがまとまっている
    • 追加したことでbundle exec rails news:import_from_yaml がデプロイ時に実行される
    • lib/tasks/fetch_news.rake はワークフローで毎日実行されている
    • lib/tasks/import_news.rake も毎日実行したい
      • Heroku で設定できる → 最終的に共有しながらやりましょう🛠️
  • 追記: タスクについて
    • 現在は読み込んだ数が出力されている?
    • 更新した数が出力されると嬉しい
  • 概要の動作確認手順は以下を確認できるとPRに内容と合いそう
    1. /#news に何も表示されていない
    2. bundle exec rails news:fetch を実行するとnews.ymlが更新される
      news.yml が最新の場合、実行前に一旦アイテムを削除しておく)
    3. bundle exec rails news:import_from_yaml を実行するとDBに保存される
    4. /#news に最新7件が表示される

@rakuda-san-desu
Copy link
Contributor

@nanophate actionsのワークフローについて、お手隙の際にコメントいただけると嬉しいです🙏

やりたいこと

当PR内で以下の動きを確認できると嬉しいなと考えています。
ワークフロー(.github/workflows/fetch_news.yml)実行 → RSS取得してymlを更新するタスク(lib/tasks/fetch_news.rake)が実行される→更新されたyml(db/news.yml)の内容確認

ワークフローは main ブランチに存在しないと実行できないようなので、以下の方法を考えていますが認識良さそうでしょうか?

  1. .github/workflows/fetch_news.yml を別PRに切り出す
  2. schedule: 部分はコメントアウトして、手動実行のみにしておく
  3. (レビュー後)main にマージ
  4. 当PRにmainを取り込む
  5. GitHub から当PRで Fetch News ワークフローを実行

@rakuda-san-desu
Copy link
Contributor

f577bcb でブランチでもワークフローが認識されました!
@nanophate さんありがとうございました🙏 ✨

@nanophate
Copy link
Member

ワークフロー(.github/workflows/fetch_news.yml)実行 → RSS取得してymlを更新するタスク

  pull_request:
     branches:
       - "*"

上記の方法で、コミットした際にトリガーするように対応。一応、GitHub CLI を活用することで、手元からのトリガーが行えることも可能と確認 gh workflow run 'Fetch News' --ref feat/1577-auto-news-from-rss

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.

トップページの news セクションを RSS から自動生成したい
4 participants