要約

git で日記をいい感じに管理したいという思いを込めて日記管理用の cli ツールを作成いたしました。 https://github.com/komem3/go-diary

背景

バージョン管理やリモートリポジトリを使って日記・日報を管理したいという思いが有りましたが、いかんせんディレクトリが汚くなってしまうのが問題でした。定期的にディレクトリを綺麗に整理する根気があれば良いのですが、三日坊主になりやすい私なんかはそれだけで日記を書くのが嫌になってしまいます。 そこで、日記のファイルをいい感じのディレクトリ構造で管理するツールを作成することに。

インストール

go で作成したツールのため、以下のようにダウンロードします。

$ go get github.com/komem3/go-diary/cmd/diary

使い方

$ diary -h
Diary is a CLI libray for managing your diary.
This application can format your diary directory, and make index file.

Usage:
  diary [command]

Available Commands:
  format      Format directory
  help        Help about any command
  init        Initialize directory
  new         Generate new diary

Flags:
  -h, --help      help for diary
  -v, --version   version for diary

  Use "diary [command] --help" for more information about a command.

今回の作成したツールには以下の3つのコマンドがあるため、それぞれ解説していきます。

init

ツールをインストールした後、日記を管理したいディレクトリで最初に実行するコマンドです。 このコマンドを実行することで、他コマンドで使われるテンプレートファイルが生成されます。

$ ls
$ diary init
$ tree
tree
.
└── template
    ├── diary.template.md
    └── top.template.md

このコマンドで生成したテンプレートファイルを編集することで後程紹介するコマンドの出力を変更することができます。

new

本日の日記を生成するコマンドです。デフォルトでは本日の日付が先頭に書かれたファイルが生成されます。この時生成されるファイル名の日付情報を元にformatコマンドはフォーマットしていきます。 (記事作成日 2020 年 5 月 31 日)

$ diary new
$ cat 20200531.md
2020/05/31 (Sunday)

また、先程のinitコマンドで生成したテンプレートファイルを編集することで、生成されるファイルの出力内容を変更出来ます。

echo "今日やること" >> template/diary.template.md
$ diary new
$ cat 20200531.md
2020/05/31 (Sunday)
今日やること

format

日記ファイルをそのファイル名に基づいてフォルダに格納します。格納後、それぞれのファイルがどこにあるか分かりやすいようにREADME.mdファイルにリンクを書き込みます。

$ ls
20021201.md  20200101.md  20200102.txt template
$ diary format
.
├── 2002
│   └── 12
│       └── 20021201.md
├── 2020
│   ├── 01
│   │   ├── 20200101.md
│   │   └── 20200102.txt
│   └── 02
│       └── 20200202.org
├── README.md
└── template
    ├── diary.template.md
    └── top.template.md

github.com_komem3_go-diary_tree_master_sample.png

出力状態としては、実際のリポジトリを見てみるのが分かりやすいと思います。 https://github.com/komem3/go-diary/tree/master/sample

こちらも先程同様、テンプレートのファイルを変更することで好きな主力内容に変更することができます。

まとめ

git を使った日記管理を行うために、「日記の作成」「日記の整理」「日記の索引」の3つを行えるコマンドを作成いたしました。 go 言語は cli ツールを作り易かったのですが、日付のフォーマット指定が特殊なのがいまいちでした。そこら辺の go 特有のものや、設定の変更しやすくすることが今後の課題に思っています。