メモを取る環境を整備した

普段何かメモを取るときには Obsidian を使っている。
Obsidianは高機能なMarkdownノートで、個人での情報整理には最高なのだが、諸事情によりこれが使えない環境というのもある。
そのような環境では、ローカルの適当な場所にMarkdownファイルを作ってVSCodeで書いている。
このやり方でも特に困ってはいないが、最近何かとメモを書いて考えることが多く、また複数のデバイス間で同期する必要も出てきたので仕組みを整備することにした。

やりたいことをまとめると以下のような感じ。

  • Markdownで書きたい
  • サッとメモを取り始めたい
    • ターミナルからコマンド一発で起動できるとか、タイトルを決めずに雑に書き始められるとか
  • 複数のデバイス間でデータを同期したい
    • 同期にはクラウドストレージサービスを使いたいので、データがファイルとして保存されていると嬉しい
  • メモはタイトルや本文で検索できればよく、階層管理はいらない
  • 可能であればエディタはVimVSCodeが使いたい
    • ObsidianはVimモードがあって便利

これを満たせそうなツールとして mattn/memo があったので導入することにした。

設定内容

~/.config/memo/config.toml はこんな感じ。

memodir = "~/.config/memo/_posts"
editor = "code -n"
column = 20
width = 0
selectcmd = "fzf"
grepcmd = "grep -nH ${PATTERN} ${FILES}"
memotemplate = ""
assetsdir = "."
pluginsdir = "~/.config/memo/plugins"
templatedirfile = ""
templatebodyfile = ""

editor には code を指定してVSCodeを開くようにしている。
また既存のウィンドウで開くとタブが探しづらくなるので、-n で新しいウィンドウを開くようにしている。

複数デバイス間での同期

作成したメモは memodir にファイルとしてフラットに保存されるので、以下の方法が取れる。

プラグイン

pluginsdir に実行可能ファイルを置くと、memo のサブコマンドとして使えるようになる。

自分はObsidianにあるDaily noteのような機能が欲しかったので、そのための today コマンドを自作した。
1日ごとに固有のタイトルを持つメモをサッと開くことができる。

#!/bin/bash

set -eu

# プラグインは-usageをハンドリングする必要がある
# このコマンドは他に引数を取らないので雑にハンドリングしている
if [ "$*" = -usage ]; then
  echo "open today's daily memo"
  exit
fi

# 「日付-diary」というタイトルにしている
title=diary
filename="$(date +%Y-%m-%d)-${title}.md"

# ファイルが既にあればeditを、なければnewを呼び出す
if memo cat $filename &> /dev/null; then
  memo edit $filename
else
  memo new $title
fi

タイトルを考えずに雑にメモを取れる場所があるのは非常に便利。
これを作ってからメモがかなり捗っている。

テンプレート

memotemplate にファイルを指定すると、それをメモ作成時のテンプレートとして利用できる。
テンプレートにはGoのtext/templateのフォーマットで {{.Title}}{{.Date}} を埋め込むことができる。

これを使うと例えばYAML Frontmatterを簡単に付けることができるが、付けたところで活用できる場面が思い浮かばなかったので使っていない。

---
title: {{.Title}}
date: {{.Date}}
tags: []
---

# {{.Title}}

個人的にはh1タイトルに日付を入れたいのだが、{{.Date}}%Y-%m-%d %H:%M なので使えなかった。
設定で dateformat が指定できると嬉しいかもしれない。

Obsidianとの併用

Obsidianもメモをファイルとしてフラットに保存する (階層管理もできる) ので、ディレクトリを共有することで memo でもObsidianでもメモが取れるようになる。
ObsidianはiPhoneアプリもあり、iCloudを使うとそちらにも同期できるのではないかと思っている。(Obsidianが使えるならの話)

また、ObsidianはFrontmatterのtagsを認識してくれるので、併用する場合はテンプレートにFrontmatterを入れておくと便利かもしれない。
(個人的には #tag 形式で本文中に書くほうが好みだが)

https://help.obsidian.md/Advanced+topics/YAML+front+matter

感想

メモに関してはこれまでいろんなツールを乗り換えてきており、今後もまた変えるかもしれないことを考えると、可能な限りポータビリティが高い状態にしておくのがよいはず。
その点mattn/memoはメモをファイルとしてシンプルに管理することができ、プラグインによる拡張も簡単なので便利に使い続けられそうだと思った。