一言で書いてしまうと、
alias memo vim ~/doc/memos/$(date +'%Y%m%d').txt
というような alias を定義して、日ごとのテキストファイルを開けるようにしておくというだけの話です。ただ、これだけだと閲覧が少々不便なので、実際には以下のようなシェルスクリプトを作っています。
#!/bin/sh
MEMODIR=~/doc/memos
TMPFILE=$(mktemp)
PAGER=${PAGER-less}
function rm_tmpfile {
[[ -f "$TMPFILE" ]] && rm -f "$TMPFILE"
}
trap rm_tmpfile EXIT
trap 'trap - EXIT; rm_tmpfile; exit -1' INT PIPE TERM
function edit_memo {
vi "${MEMODIR}/$(date +'%Y%m%d').txt"
}
function view_memo {
if [ $# -lt 1 ]; then
pattern=`date +%Y%m`
elif [ "$1" = "all" ]; then
pattern=""
else
pattern=$1
fi
memos=`find $MEMODIR -name "${pattern}[0-9]*.txt" | sort`
for memo in $memos; do
echo $memo | awk -F/ '{print "\[\[\[" $NF "\]\]\]\n"}' >> $TMPFILE
cat $memo >> $TMPFILE
perl -le 'print "\n" . "="x80' >> $TMPFILE
done
if [ -p /dev/stdout ]; then
cat $TMPFILE
else
$PAGER $TMPFILE
fi
}
if [ $# -lt 1 ]; then
edit_memo
elif [ "$1" = "edit" ]; then
edit_memo
elif [ "$1" = "view" ]; then
view_memo $2
fi
以下の alias も定義しておきます。
alias memo="~/bin/memo.sh"
alias memoview="~/bin/memo.sh view $@"
これで、
$ memo
とすれば今日の日報ファイルを開いて vim が立ち上がります。
$ memoview
とすれば今月の日報を連結してビューワが立ち上がります。
$ memoview 202001
$ memoview all
というように対象年月を指定したり、全ての日報を連結することもできます。
他の方法と比べて
紙のノートに手書き
私は以前は紙のノートに日報をつけていました。日報と言ってますが実際には上司に提出したりするわけではなく、自分の覚え書きです。その日に実際に作業したこと、調べたこと、考えたことなどを書き記します。特に考え事をする際には紙は最高のデバイスなのですが、記録性や検索性では大きく劣ります。コピペもできませんし。
チャットツールの分報
私は経験がないのですが、チャットツールを使った分報もあります。vim 日報と同じくテキストデータなので、スニペットやコマンド履歴なども残せること、他のメンバーからコメントをもらえること、メッセージごとにタイムスタンプが自動で付くなどは便利です。
一度送信してしまうと編集しにくい。分報はどちらかというとログ的に都度吐き出すような使い方なのでしょう。その点で vim 日報とはちょっと性格が違います。
チャットツールによりますが、過去メッセージの検索が難しい場合があります。1年くらい前にこんなことがあったんだけどなぁといった時に、検索できるとは限りません。
チャットツールの自分宛 DM
他のメンバーに見られないという点以外は分報と同じです。誰も見てないので送信済のメッセージを編集し放題という点は違いますか。
社内ブログ / 社内 SNS などの記事
書き方のスタイルとしては vim 日報とかなり近いです。ただ、日報を書くためにブラウザを立ち上げて編集フォームにアクセスしなければならないのは少々煩雑です。手元のターミナルで vim が立ち上がる方が素早くないでしょうか。
検索機能
(2023/8/14追記)
日報が溜まってくると検索したくなってきたのでスクリプトを修正しました。ほかにもちょこちょこと手を入れています。
#!/usr/bin/env bash
MEMODIR=~/doc/memos
TMPFILE=$(mktemp)
PAGER=${PAGER-less}
function rm_tmpfile {
[[ -f "$TMPFILE" ]] && rm -f "$TMPFILE"
}
trap rm_tmpfile EXIT
trap 'trap - EXIT; rm_tmpfile; exit -1' INT PIPE TERM
function edit_memo {
memofile="${MEMODIR}/$(date +'%Y%m%d').txt"
templatefile="${MEMODIR}/template.txt"
if [ ! -e $memofile ] && [ -e $templatefile ]; then
cp $templatefile $memofile
fi
$EDITOR $memofile
}
function view_memo {
if [ $# -lt 1 ]; then
pattern=`date +%Y%m`
elif [ "$1" = "all" ]; then
pattern=""
else
pattern=$1
fi
memos=`find $MEMODIR -name "${pattern}[0-9]*.txt" | sort`
_view_files "${memos[*]}"
}
function search_memo {
if [ $# -lt 1 ]; then
echo "パターンが指定されていません"
return
else
pattern=$1
fi
memos=`grep -l ${pattern} ${MEMODIR}/[0-9]*.txt | sort`
_view_files "${memos[*]}"
}
function _view_files {
for memo in ${memos[@]}; do
echo "[[[${memo}]]]" >> $TMPFILE
cat $memo >> $TMPFILE
echo "================================================================================" >> $TMPFILE
done
if [ -p /dev/stdout ]; then
cat $TMPFILE
else
$PAGER $TMPFILE
fi
}
if [ $# -lt 1 ]; then
edit_memo
elif [ "$1" = "edit" ]; then
edit_memo
elif [ "$1" = "view" ]; then
view_memo $2
elif [ "$1" = "search" ]; then
search_memo $2
fi
alias memosearch="~/bin/memo.sh search $@"
としておけば
$ memosearch (キーワード)
で、キーワードを含む日報を閲覧できます。
ところで久しぶりにこの記事を更新してて気づきましたが、日報なのに memo
ってのも変ですね。daily
とか diary
とかにすればよかったか。今更ですが。