Skip to content

Instantly share code, notes, and snippets.

@amay077
Created October 26, 2025 07:38
Show Gist options
  • Select an option

  • Save amay077/6aa6b444ee2a2ae5c20c4bc981f4b1f9 to your computer and use it in GitHub Desktop.

Select an option

Save amay077/6aa6b444ee2a2ae5c20c4bc981f4b1f9 to your computer and use it in GitHub Desktop.
Claude Skills:日本の祝日を取得するスキルです。内閣府が提供する祝日データを取得します。
#!/usr/bin/env bash
# Get Japan's national holidays from the Cabinet Office
# Supports year specification (default is current year)
# デフォルト値: 今年
DEFAULT_YEAR=$(date '+%Y')
# 引数の取得
YEAR="${1:-$DEFAULT_YEAR}"
# 年の形式チェック(4桁の数値)
if ! [[ "$YEAR" =~ ^[0-9]{4}$ ]]; then
echo "エラー: 年は 4 桁の数値で指定してください(例: 2025)" >&2
exit 1
fi
# 祝日 CSV の URL
CSV_URL="https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
# CSV を取得
CSV_DATA=$(curl -sS "$CSV_URL")
# curl の終了ステータスをチェック
if [ $? -ne 0 ] || [ -z "$CSV_DATA" ]; then
echo "エラー: 祝日データの取得に失敗しました" >&2
echo "URL: $CSV_URL" >&2
exit 1
fi
# プラットフォームの検出
detect_platform() {
case "$(uname -s)" in
Darwin*)
echo "macos"
;;
Linux*)
echo "linux"
;;
CYGWIN*|MINGW*|MSYS*)
echo "windows"
;;
*)
echo "unknown"
;;
esac
}
PLATFORM=$(detect_platform)
# CSV を UTF-8 に変換(元データは Shift_JIS)
case "$PLATFORM" in
macos)
# macOS の iconv
CSV_UTF8=$(echo "$CSV_DATA" | iconv -f SHIFT_JIS -t UTF-8 2>/dev/null)
;;
linux|windows)
# Linux/Windows の iconv
CSV_UTF8=$(echo "$CSV_DATA" | iconv -f SHIFT_JIS -t UTF-8 2>/dev/null)
;;
*)
# iconv が使えない場合はそのまま使用
CSV_UTF8="$CSV_DATA"
;;
esac
# 変換に失敗した場合は元データを使用
if [ -z "$CSV_UTF8" ]; then
CSV_UTF8="$CSV_DATA"
fi
# 指定された年の祝日をフィルタリング
# CSV フォーマット: 日付(YYYY/MM/DD),祝日名
# 1行目はヘッダーなのでスキップ
HOLIDAYS=$(echo "$CSV_UTF8" | awk -F',' -v year="$YEAR" '
NR > 1 {
# 日付を取得
date = $1
# 祝日名を取得(先頭の空白を削除)
gsub(/^[ \t]+/, "", $2)
name = $2
# 年でフィルタリング
if (date ~ "^" year "/") {
# 日付を YYYY/MM/DD から年月日に分割
split(date, parts, "/")
y = parts[1]
m = parts[2]
d = parts[3]
# 月と日を0埋め(2桁)
if (length(m) == 1) m = "0" m
if (length(d) == 1) d = "0" d
# YYYY-MM-DD 形式に再構築
formatted_date = y "-" m "-" d
print formatted_date "|" name
}
}
')
# 祝日が見つからなかった場合
if [ -z "$HOLIDAYS" ]; then
echo "# 日本の祝日 (${YEAR}年)"
echo ""
echo "指定された年の祝日データが見つかりませんでした。"
exit 0
fi
# Markdown テーブル形式で出力
echo "# 日本の祝日 (${YEAR}年)"
echo ""
echo "| 日付 | 祝日名 |"
echo "|------|--------|"
# 祝日を1行ずつ出力
echo "$HOLIDAYS" | while IFS='|' read -r date name; do
echo "| $date | $name |"
done
exit 0
name description
jp-holidays
Get Japan's national holidays from the Cabinet Office. Use this skill when you need to retrieve Japanese holiday information. Supports year specification (default is current year). Outputs in Markdown table format.

Japan Holidays Skill

日本の祝日を取得するスキルです。内閣府が提供する祝日データを取得します。

このスキルは、日本の祝日情報が必要な場合に使用します。

サポートプラットフォーム

  • macOS: curl コマンド
  • Linux: curl コマンド
  • Windows: Git Bash/MSYS2/Cygwin の curl コマンド

使用方法

bash ~/.claude/skills/jp-holidays/get-holidays.sh [年]

パラメータ

  • (省略可): 取得する年を指定(省略時は今年)

使用例

今年の祝日を取得

bash ~/.claude/skills/jp-holidays/get-holidays.sh

特定の年の祝日を取得

bash ~/.claude/skills/jp-holidays/get-holidays.sh 2026

出力フォーマット

Markdown テーブル形式で出力されます:

# 日本の祝日 (2025年)

| 日付 | 祝日名 |
|------|--------|
| 2025-01-01 | 元日 |
| 2025-01-13 | 成人の日 |
| 2025-02-11 | 建国記念の日 |
...

AI エージェントからの使用方法

AI エージェント(Claude Code など)がこのスキルを使用する場合、以下のように実行します:

基本的な使用

  1. 今年の祝日が必要な場合
  2. Bash ツールでスクリプトを実行:
    bash ~/.claude/skills/jp-holidays/get-holidays.sh

特定の年の祝日を取得

  1. 過去または未来の祝日が必要な場合
  2. Bash ツールでスクリプトを実行:
    bash ~/.claude/skills/jp-holidays/get-holidays.sh 2026

使用場面

  • スケジュール管理: カレンダーアプリケーションの祝日表示
  • 日付計算: 営業日計算や納期計算
  • イベント計画: 祝日を考慮したイベント日程の提案
  • 情報提供: ユーザーへの祝日情報の提示
  • ドキュメント生成: 年間カレンダーやスケジュール表の作成

データソース

エラーハンドリング

ネットワークエラー

エラー: 祝日データの取得に失敗しました

→ ネットワーク接続を確認してください。

無効な年の指定

エラー: 年は 4 桁の数値で指定してください

→ 正しい年(例: 2025)を指定してください。

技術詳細

  • 実装言語: Bash スクリプト
  • 依存ツール: curl, awk, date
  • データ形式: CSV(Shift_JIS エンコード)
  • 出力形式: Markdown テーブル

注意事項

  • このスキルはネットワーク接続が必要です
  • データは毎回取得されます(キャッシュなし)
  • 内閣府のサーバーがダウンしている場合は取得できません
  • CSV データは Shift_JIS でエンコードされています

参考リンク

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment