Markwhenはマークダウン形式で手軽にタイムラインやカレンダーを作成できる便利なツールです。
あわせて読みたい


プロジェクトスケジュール管理にMarkwhenが最高だった
はじめに 私はとある分野でエンジニアをしています。私の会社ではプロジェクトスケジュール管理にエクセルを使用していますが、Excelだと以下のような点で不便があり、…
私も業務でのスケジュール管理に使用していますが、日本の祝日も表示できればより良いな〜と考えていました。
そこで今回はPythonを使って、Markwhen形式の祝日リストを自動生成して、スケジュールに組み込む方法を紹介します。
PythonでMarkwhen形式の祝日リストを自動生成する
こちらが今回作成したPythonコードです。
import csv
import datetime as dt
import requests
CSV_URL = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
def fetch_holidays(url: str) -> list[tuple[str, str]]:
"""内閣府のサイトから祝日データを取得する"""
resp = requests.get(url, timeout=30)
resp.raise_for_status()
# 内閣府csvデータはShift‑JISエンコードされている
csv_content = resp.content.decode("shift_jis").splitlines()
reader = csv.reader(csv_content)
holidays_list = [(d, n) for d, n in reader
if d and d[0].isdigit()]
return holidays_list
def to_markwhen(holidays: list[tuple[str, str]], y_from: int, y_to: int) -> str:
"""祝日リストをmarkwhen形式の文字列に変換する"""
header = f"title: Japanese Holidays {y_from}-{y_to}\n\n"
start_section = "section holidays #holidays\n"
end_section = "end section\n"
body = [
f"{dt.datetime.strptime(date_str, '%Y/%m/%d').strftime('%Y-%m-%d')}: {name}"
for date_str, name in holidays
if y_from <= int(date_str[:4]) <= y_to
]
return header + start_section + "\n".join(body) + "\n" + end_section
def main() -> None:
#実行時点での年+1年分の祝日データを取得する
year_from = dt.date.today().year
year_to = year_from + 1
holidays = fetch_holidays(CSV_URL)
mw_text = to_markwhen(holidays, year_from, year_to)
filepath = f"holidays_{year_from}-{year_to}.mw"
with open(filepath, mode = 'w') as f:
f.write(mw_text)
if __name__ == "__main__":
main()
コードの流れは以下の通りです。
- 内閣府のサイトから日本の祝日データを取得する。(次の年の祝日まで掲載されています)
https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv - 実行時点での年〜+1年分の祝日データをlist型(holidays_list)に格納
- 祝日リストをMarkwhen形式(「YYYY-MM-DD: 祝日名」)に変換
- .mwファイルとして保存
これを実行すると、holidays_YYYY-YYYY.mw(例: holidays_2025-2026.mw)という名前のファイルが作成されます。
内容は以下のようなMarkwhen形式の祝日リストです。
title: Japanese Holidays 2025-2026
section holidays #holidays
2025-01-01: 元日
2025-01-13: 成人の日
2025-02-11: 建国記念の日
2025-02-23: 天皇誕生日
2025-02-24: 休日
2025-03-20: 春分の日
2025-04-29: 昭和の日
2025-05-03: 憲法記念日
2025-05-04: みどりの日
2025-05-05: こどもの日
2025-05-06: 休日
2025-07-21: 海の日
2025-08-11: 山の日
2025-09-15: 敬老の日
2025-09-23: 秋分の日
2025-10-13: スポーツの日
2025-11-03: 文化の日
2025-11-23: 勤労感謝の日
2025-11-24: 休日
2026-01-01: 元日
2026-01-12: 成人の日
2026-02-11: 建国記念の日
2026-02-23: 天皇誕生日
2026-03-20: 春分の日
2026-04-29: 昭和の日
2026-05-03: 憲法記念日
2026-05-04: みどりの日
2026-05-05: こどもの日
2026-05-06: 休日
2026-07-20: 海の日
2026-08-11: 山の日
2026-09-21: 敬老の日
2026-09-22: 休日
2026-09-23: 秋分の日
2026-10-12: スポーツの日
2026-11-03: 文化の日
2026-11-23: 勤労感謝の日
end sectionタイムライン表示はこんな感じです。

祝日リストを既存のスケジュールファイルに組み込む
古典的ですが、holidays_YYYY-YYYY.mwの中身をコピーして、既存のスケジュールファイルに貼り付けます。

そのままだと見づらいので、エディタ、タイムラインともに祝日セクションを折りたたんでいます。
タイムライン上の”holidays” セクションを見ればどこに祝日があるか分かるので、結構見やすいのではないでしょうか。
カレンダー表示でも祝日がしっかりと表示されています。


まとめ
このPythonスクリプトを使えば、手軽に日本の祝日情報をmarkwhenカレンダーに統合できます。
改善点があるとすれば、可能ならimport機能を使ってみたいですね。
例えば、Markwhenにサインインして祝日ファイルを共有ファイルとして保存するか、もしくはGithub上に公開すれば、いけそうな気がします。
コメント