🧠

ObsidianでMarkdownカレンダーを自動生成する

2021/02/27に公開

ねらい

こんな感じで、Obsidianで日記を管理するためにマークダウンリンクのついたカレンダーを作成したい。しかし手動で一年分のカレンダーを作成するのは流石に骨が折れます。Obsidianの公式フォーラムでマークダウンカレンダーを自動生成する便利なシェルスクリプトを見つけたので紹介したいと思います。

スクリプトを書き換える

こちらのスクリプトをダウンロードして、エディタで開きます。

*僕はこのスクリプトの作者ではありません。

期間を指定する

コードの始めあたりにカレンダーで生成したい期間を指定できる項目があるので、それを書き換えましょう。

title=md-cal.sh
startdate=2021-01-01
enddate=2021-12-31

今回は一年分作成します。

フォーマットを指定する

僕はObsidianコアプラグインの一つである"Daily notes"を使って毎日のノートを作成しています。そのプラグインが作成するファイル名のフォーマットと一致するように、シェルスクリプトを書き換えます。

このシェルスクリプトのデフォルトのフォーマットは%Y-%b-%d-%aですので、2021-02-26というファイルが作成されす。もしその通りのフォーマットでdaily noteを管理しているのなら良いのですが、僕はファイル名をYYYYMMDD(例:20210226)となるように設定していますので、この項目を以下のように編集しました。

title=md-cal.sh
linkformat="%Y%b%d%a"
displayformat="%d"

他にもカレンダーの空白の日付をどのように埋めるかなど、細かい部分を設定できます。

スクリプトを走らせる

設定が完了したらスクリプトを走らせます。

bash md-cal.sh

md-cal.shと同じディレクトリにcalendar.mdファイルが生成されます。

calendar.md
#  January, 2021
| Week | Mon | Tue | Wed | Thu| Fri | Sat | Sun |
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| [[week-52-2020 \| 52]]||||| [[ 20210101 \|  01 ]]| [[ 20210102 \|  02 ]]| [[ 20210103 \|  03 ]]|
| [[week-01-2021 \| 01]]| [[ 20210104 \|  04 ]]| [[ 20210105 \|  05 ]]| [[ 20210106 \|  06 ]]| [[ 20210107 \|  07 ]]| [[ 20210108 \|  08 ]]| [[ 20210109 \|  09 ]]| [[ 20210110 \|  10 ]]|
| [[week-02-2021 \| 02]]| [[ 20210111 \|  11 ]]| [[ 20210112 \|  12 ]]| [[ 20210113 \|  13 ]]| [[ 20210114 \|  14 ]]| [[ 20210115 \|  15 ]]| [[ 20210116 \|  16 ]]| [[ 20210117 \|  17 ]]|
| [[week-03-2021 \| 03]]| [[ 20210118 \|  18 ]]| [[ 20210119 \|  19 ]]| [[ 20210120 \|  20 ]]| [[ 20210121 \|  21 ]]| [[ 20210122 \|  22 ]]| [[ 20210123 \|  23 ]]| [[ 20210124 \|  24 ]]|
| [[week-04-2021 \| 04]]| [[ 20210125 \|  25 ]]| [[ 20210126 \|  26 ]]| [[ 20210127 \|  27 ]]| [[ 20210128 \|  28 ]]| [[ 20210129 \|  29 ]]| [[ 20210130 \|  30 ]]| [[ 20210131 \|  31 ]]|

あとは、これをObsidianのvaultにコピペするだけです。

僕は月ごとにノートを作成して、それらをひっくるめて年ごとのノートにつなげています。このカレンダーのおかげで日記の読み返しが楽しくなりました。

まとめ

他にもコミュニティプラグインのカレンダーを使うという手もあると思います。Obisdianは開発チーム・コミュニティ共に最高ですね。

参考

How To Format Date For Display or Use In a Shell Script

Discussion