Article:

[CLI] today.md

2022/06/25

today.mdは日報ベースのTODO管理CLIアプリケーションです。
TODO管理アプリって、わざわざアプリを立ち上げる面倒くささから使わなくなってしまうのですが、
コマンドラインなら常に触ってるし、心理的ギャップがほぼ0じゃん!ってことで作りました。

Github

また、日報ベースにしているのは「えっもう今週おわり!?」となりがちな心をなんとか時間に追いつかせるためです。
markdown形式にすることで、タスクに親子管理をつけたり、今年の抱負をメモっておくなり、自由な使い方ができます。
gitで管理するようにしていて過去の記録が残るため、「これ一応メモっておきたい気もするけどメモ場所も特にない…」ってものも遠慮なくメモれるし、消せます。

テンプレートシステム

today.mdは「今日の日報」ファイルを、「昨日の日報」と「テンプレート」を合成することで作ります。 要するに、昨日「明日やる」って言ってたことが、今日のファイルを作成すると自動的に「今日やる」にコピペされている感じですね。

仕組みはめちゃ簡単で、二重の二重括弧の中に引き継ぎたいセクション名を入れるだけです。

作るなら、こんな感じです。

1
2
3
4
5
6
7
# やりたいこと
{{やりたいこと}}
# 今日やること
{{明日やる}}
# やったこと

# 明日やる

やりたいことを忘れないようにメモって、毎日それを引き継ぎつつ、「明日やると決めたことを今日やる」スタイルのテンプレートです。

詳しい例はGithubレポジトリのreadmeに書いてあります。

メモ機能

それはそれとして、「今すぐパパっとちょっとメモりたい!」ってシーンありますよね。 電話対応とか、Youtubeみてるときとか。

today.mdは古い日報を日付名のフォルダにいい感じにアーカイブしてくれるのですが、today memoコマンドでそのフォルダに日付名のパスを渡してエディタで開いてくれます。

これでPCをシャットダウンしたいときに、未保存の無題(8).txtを保存しますか?というダイアログに苦しまされずにすみます。

プロジェクト機能

少なくとも仕事用とプライベート用で分けたいなーって思ったので、プロジェクトとして日報を保存するフォルダのパスをコンフィグに配列で書いておくと、 today switch機能で使うフォルダを切り替えられるようにしています。

その他

日報を誰かと共有したいってこともありますよね。友達とか、上長とか。 で、この日報はgitで管理することを推奨していて、さらにgithubにpushするなら、actionsで自動的にslackとかに通知するってできるんですよね~。

で(2回目)、日報にも「これは共有したい」「これは別にみられたくない」という部分がセクションによってあるかと思うので、 特定セクションだけをくり抜いてslackのworkflowに投げるactionsがこちらになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
name: report2slack
on:
  push:
    branches: [ "master" ]
  workflow_dispatch:
  
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - uses: actions/checkout@master
        with:
          repository: totegamma/today.md
          submodules: true
          path: 'build/'

      - name: install today.md
        run: |
          cd build
          make
          sudo make install          

      - name: create body
        run: |
          today init $GITHUB_WORKSPACE
          SECTIONS="やった 次やる ひとこと"
          for ELEM in $SECTIONS; do
            today reflect --sections $ELEM
            echo -e "# "$ELEM"\n" >> tmp.txt
            cat .$ELEM".md" >> tmp.txt
          done          
      
      - name: post to slack
        run: jq --null-input '.Body = $body' --rawfile body tmp.txt | curl ${{secrets.SLACK_WEBHOOK_URL}} -X POST -H 'Content-Type:application/json' -d @-

個人的にも結構気に入ってるので、テキストファイルベースのタスク管理が好みな人は是非お試しあれです。

Github