はじめに
Railsでのサイトマップ作成と定期実行について説明します。
サイトマップの作成
Gemのインストール
サイトマップを生成するために、sitemap_generator Gemを使用します。まず、Gemfile
に以下を追加しbundle install
を実行します。
Gemfile
gem 'sitemap_generator'
サイトマップの設定ファイルを作成
サイトマップの設定ファイルconfig/sitemap.rb
を作成します。このファイルには、サイトマップに含めるURLを定義します。
config/sitemap.rb
SitemapGenerator::Sitemap.default_host = 'http://www.example.com'
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
SitemapGenerator::Sitemap.create do
add root_path, :changefreq => 'daily', :priority => 1.0
# 静的なページを追加
add about_path, :changefreq => 'monthly'
add contact_path, :changefreq => 'monthly'
# 動的なページを追加 (例: Articleモデル)
Article.find_each do |article|
add article_path(article), :lastmod => article.updated_at, :changefreq => 'weekly', :priority => 0.8
end
end
SitemapGenerator::Sitemap.default_host = 'http://www.example.com'
- サイトマップに含まれるURLのホスト名を設定します。このホスト名は、
add
メソッドで指定するパスと組み合わせて完全なURLを生成するために使用されます。
- サイトマップに含まれるURLのホスト名を設定します。このホスト名は、
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
- サイトマップファイルが保存されるディレクトリを指定します。デフォルトでは、
public/
ディレクトリの下に配置されます。
- サイトマップファイルが保存されるディレクトリを指定します。デフォルトでは、
add article_path(article), :lastmod => article.updated_at, :changefreq => 'weekly', :priority => 0.8
- データベース内の各
Article
モデルのレコードに対してURLを追加します。:lastmod => article.updated_at
- 最終更新日時を指定します。
article.updated_at
は記事が最後に更新された日時です。
- 最終更新日時を指定します。
:changefreq => 'weekly'
- URLの更新頻度を指定します(例:
'daily'
、'monthly'
)。
- URLの更新頻度を指定します(例:
:priority => 0.8
- URLの優先度を指定します(0.0から1.0の間)。
- データベース内の各
サイトマップの生成
以下のコマンドを実行して、サイトマップを生成します。
bundle exec rake sitemap:refresh
このコマンドにより、public/sitemaps/sitemap.xml.gz
というファイルが生成されます。
サーバーにサイトマップを配置
生成されたサイトマップファイルをデプロイプロセスに組み込み、サーバーにアップロードします。今回はデプロイツールとしてCapistranoを使用する方法について説明します。
Capistranoの設定
Capfile
に必要な設定を追加します。これにより、デプロイ時にサイトマップを生成するタスクを実行します。
Capfile
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rvm'
# 以下を追加
require 'capistrano/sitemap_generator'
デプロイタスクの定義
lib/capistrano/tasks/custom.rb
でサイトマップ生成タスクを追加します。
lib/capistrano/tasks/custom.rb
namespace :sitemap do
desc 'Generate sitemap'
task :refresh do
on roles(:app) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :bundle, :exec, :'rake', 'sitemap:refresh'
end
end
end
end
end
after 'deploy:finishing', 'sitemap:refresh'
サイトマップ生成タスクの確認
デプロイ時にサイトマップが正しく生成されるか確認するために、デプロイプロセスを実行します。
bundle exec cap production deploy
robots.txtの更新
検索エンジンにサイトマップの場所を知らせるために、public/robots.txt
ファイルを更新します。
public/robots.txt
User-agent: *
Disallow:
Sitemap: http://www.example.com/sitemaps/sitemap.xml.gz
サイトマップ作成タスクの定期実行
スケジュールの追加
定期的にサイトマップを更新するために、whenever Gemを使用してCronジョブを設定します。wheneverについては以下の記事を参照してください。
wheneverの設定ファイルに以下を追加します。
config/schedule.rb
set :output, 'log/cron.log'
set :environment, 'production'
every :day, at: '12:00 am' do
rake 'sitemap:refresh'
end
Cronジョブの設定を更新
以下のコマンドを実行して、Cronジョブをサーバーに設定します。
bundle exec whenever --update-crontab
まとめ
これらのステップに従って、Railsアプリケーションでサイトマップを作成し、定期的に更新することができます。
sitemap_generator Gemを使用して簡単にサイトマップを生成し、whenever Gemを使用してCronジョブを設定することで、サイトマップを自動的に更新する仕組みを構築できます。