Skip to content

Commit 16458fa

Browse files
committed
refactor: LOG と YAML ファイルの定数化 (more DRY-ish)
- それぞれのパスを定数化(NEWS_YAML_PATH, NEWS_LOG_PATH) - fetch と upsert 両タスクで同じ定数を使用 (less hard codes) - Single Source of Truth の原則を徹底
1 parent 7d71463 commit 16458fa

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

lib/tasks/news.rake

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
require 'rss'
22

3+
NEWS_YAML_PATH = 'db/news.yml'.freeze
4+
NEWS_LOG_PATH = 'log/news.log'.freeze
5+
36
namespace :news do
4-
desc 'RSS フィードを取得し、db/news.yml に保存'
7+
desc "RSS フィードを取得し、#{NEWS_YAML_PATH} に保存"
58
task fetch: :environment do
69
# ロガー設定(ファイル+コンソール出力)
710
console = ActiveSupport::Logger.new(STDOUT)
8-
logger_file = ActiveSupport::Logger.new('log/news.log')
11+
logger_file = ActiveSupport::Logger.new(NEWS_LOG_PATH)
912
logger = ActiveSupport::BroadcastLogger.new(logger_file, console)
1013

1114
logger.info('==== START news:fetch ====')
@@ -30,8 +33,7 @@ namespace :news do
3033
end
3134

3235
# 取得済みニュース (YAML) を読み込み、URL をキーとしたハッシュに変換
33-
news_yaml_file = File.read Rails.root.join('db', 'news.yml')
34-
existing_items = YAML.safe_load(news_yaml_file).index_by { it['url'] }
36+
existing_items = YAML.safe_load(File.read NEWS_YAML_PATH).index_by { it['url'] }
3537
existing_max_id = existing_items.flat_map { |url, item| item['id'].to_i }.max || 0
3638

3739
# 新規記事と既存記事を分離
@@ -66,7 +68,7 @@ namespace :news do
6668
}.reverse
6769

6870
# YAML ファイルに書き出し
69-
File.open('db/news.yml', 'w') do |f|
71+
File.open(NEWS_YAML_PATH, 'w') do |f|
7072
formatted_items = merged_items.map do |item|
7173
{
7274
'id' => item['id'],
@@ -79,20 +81,19 @@ namespace :news do
7981
f.write(formatted_items.to_yaml)
8082
end
8183

82-
logger.info("✅ Wrote #{merged_items.size} items to db/news.yml (#{created_items.size} new, #{updated_items.size} updated)")
84+
logger.info("✅ Wrote #{merged_items.size} items to #{NEWS_YAML_PATH} (#{created_items.size} new, #{updated_items.size} updated)")
8385
logger.info('==== END news:fetch ====')
8486
end
8587

86-
desc 'db/news.yml からデータベースに upsert'
88+
desc "#{NEWS_YAML_PATH} からデータベースに upsert"
8789
task upsert: :environment do
8890
console = ActiveSupport::Logger.new(STDOUT)
89-
logger_file = ActiveSupport::Logger.new('log/news.log')
91+
logger_file = ActiveSupport::Logger.new(NEWS_LOG_PATH)
9092
logger = ActiveSupport::BroadcastLogger.new(logger_file, console)
9193

9294
logger.info "==== START news:upsert ===="
9395

94-
yaml_path = Rails.root.join('db', 'news.yml')
95-
entries = YAML.safe_load File.read(yaml_path)
96+
entries = YAML.safe_load File.read(NEWS_YAML_PATH)
9697
new_count = 0
9798
updated_count = 0
9899

0 commit comments

Comments
 (0)