#tech
{
url: `${domain}`,
lastModified: new Date(),
changeFrequency: 'daily',
priority: 1,
},目標はこのjsonの形にできたらいい
sitemapとは
静的なページは手書きするのはしんどいので、pathベースでファイルやディレクトリを切っているので、shellスクリプトとかで自動的にしたい
- 動的なページはAPIを叩いて、パスを取得してくるしかない
できた
// src/tools/generateSitemapUrl.sh
#!/bin/bash
# 環境によってドメインを変更
if [ "$1" = "production" ]; then
domain="https://example.com" # 本番環境のドメインに置き換えてください
else
domain="https://staging.example.com" # ステージング環境のドメインに置き換えてください
fi
# Next.jsのページディレクトリ(ルートディレクトリからの相対パス)
pages_dir="./src/pages"
# 出力ファイルのパス(toolsディレクトリ内に保存)
output_dir="./src/tools"
output_file="$output_dir/sitemap.json"
# 出力ディレクトリが存在しない場合は作成
mkdir -p "$output_dir"
# URLリストを格納する配列
urls=()
# ファイルを再帰的に探索してURLを生成
generate_urls() {
local dir=$1
local base_url=$2
for entry in "$dir"/*; do
if [ -d "$entry" ]; then
# ディレクトリの場合、再帰的に呼び出す
generate_urls "$entry" "$base_url$(basename "$entry")/"
elif [ -f "$entry" ]; then
# ファイルの場合、URLを生成
filename=$(basename -- "$entry")
extension="${filename##*.}"
name="${filename%.*}"
if [[ ("$extension" = "js" || "$extension" = "tsx") && ("$name" != "_app" && "$name" != "_document") ]]; then
# indexファイルの場合、ディレクトリ名のみを使用
if [ "$name" = "index" ]; then
urls+=("${base_url}")
else
urls+=("${base_url}${name}/")
fi
fi
fi
done
}
# URL生成を開始
generate_urls "$pages_dir" "$domain/"
# 出力ファイルを初期化
echo "[" > "$output_file"
# 結果を出力ファイルに書き込む
for url in "${urls[@]}"; do
echo "{
\"url\": \"${url}\",
\"lastModified\": \"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\",
\"changeFrequency\": \"daily\",
\"priority\": 1
}," >> "$output_file"
done
# 最後のカンマを削除して閉じる
truncate -s-2 "$output_file"
echo "]" >> "$output_file"
echo "Sitemap has been generated and saved to $output_file."
"generate-sitemap:staging": "sh ./src/tools/generateSitemapUrl.sh staging",
"generate-sitemap:production": "sh ./src/tools/generateSitemapUrl.sh production"