memo CLI作成のためにClaude Codeに与えた指示書(抜粋)
2025-06-10
memo CLIプロジェクトの指示です。
memo CLIはmemo.hyuki.comのマークダウンファイルを管理するCLIです。
MEMO_DIRという環境変数に
~/memo.hyuki.com
のようなディレクトリが入っているとします。
以下ではこのディレクトリそのものを MEMO_DIR と呼びます。
MEMO_DIR/md のことを MD_DIR といいます。
MD_DIRにはMarkdownファイルがたくさんあります。
すべてid14-*.md という形をしています。
id14の部分は数字14個です。
memo CLIのコマンドはmemoです。
Rubyで作ります。
パス上のどこかに置いた memo を入力すると実行されます。
memo [subcommand] [options]
memoと入力すると、MD_DIRで最近編集した(タイムスタンプが更新された)
*.mdファイルが7個表示されます。
次のように番号が付きます。
1) 20250607000247-portal.private.md
2) 20250608000109-claude-md.md
3) 20250608000143-top--esa-journal.md
4) 20250608000251-actual-session.md
5) 20250610000135-minicat.md
6) 20250610070000-top--mm-portrait-video.md
7) 20250610102534-minicat.md
memo>
memo> というのはプロンプトです。
ここで番号を入れるとそのファイルが対象になります
(これは相談なのですが、
こういうのをVimのjkでファイル選択をインタラクティブにできますか)。
ファイルが選ばれると
20250608000109-claude-md.md
のようにファイル名を表示し、
memo (e for edit, t for top, q for quit, Enter to local build) >
とプロンプトを表示します。
e を入力すると、./edit-it id14でファイルを編集します。
t を入力すると、./top-switch ファイル名 というコマンドを実行。
q を入力すると CLI終了
Enterを入力すると make local-CLI を実行した上で
https://localhost/memo.hyuki.com/#{id14}/ をopenします。
言い忘れましたけど、
memo CLIを実行すると、自動的に MEMO_DIR にcwdは移動します。
2025-06-11
cli/memo を次のように機能拡張・変更してください。
(1)
memoを起動したらカレントディレクトリを
~/memo.hyuki.com に移動します。
これは pushd に相当する機能です。
つまり ~/memo.hyuki.com での作業が終わったら
popd で起動した場所に戻れるようにします。
この機能が難しいときには alias や
bash function の作成を提案してください。
(2)
起動時に、memo https://memo.hyuki.com/20250610102534/
のようにURLを引数として実行すると、
その対象となるメモを編集してビルドして表示します。
URLか否かの判断は、https で始まっており、id14 を含んでいるものとします。
もしその id14による md/20250610102534.md
が存在しない場合にはエラーとして起動を終了します。
ただしディレクトリは MD_DIR に移動したままです。
(3)
起動時に、memo 0 や memo 1 のように数字一桁で実行すると、
最近編集したMarkdownファイルを対象として編集してビルドして表示します。
memo 0 は最新のもの、memo 1は最新の一つ前(一つ古い)ものです。
(4)
起動時に、URLでも数字一桁でもなく文字列が一つあったなら、
それをタイトルとして ./new-memo を起動します。
./new-memo が終了したら、
そのファイルを対象として編集してビルドして表示します。
2025-06-11
ここまでの機能は正しく動きました。
ありがとうございます。
次の機能として、小さなRubyツールcli/update-recentを新たに作ってください。
これはcli/memoとは独立に動作するプログラムです。
cli/update-recentを起動すると、
ENV['MEMO_DIR']/md/id14-*.md を名前順ではなく時間順にならべて、
次のような形式で10個並べます。
新しいものが下です。
結果はENV['MEMO_DIR']/cli/recent.mkに書き込みます。
上書きしてかまいません。
このファイルはmakefileからincludeされる予定です。
recent.mkを作ったら終了してかまいません。
mdfile = "md/20250608000143-top--esa-journal.md"
mdfile = "md/20250608000251-actual-session.md"
mdfile = "md/20250610070000-top--mm-portrait-video.md"
mdfile = "md/20250610000135-minicat.md"
mdfile = "md/20250610102534-minicat.md"
mdfile = "md/20250610132746-memo-cli-report.md"
mdfile = "md/20250610150503-top--banner-design.md"
mdfile = "md/20250610162239-git-repository-branch-name.md"
mdfile = "md/20250610204223-top--MCP体験記_by_Claude_Code.md"
mdfile = "md/20250611112643-top--穏やかなシンギュラリティ.md"
update-recentは一発で動作しました。
すばらしい。
もう一つ、cli/cleanup-empty-mdfiles
というRubyツールを作ってください。
これは ENV['MEMO_DIR']/md/id14-*.md のうち、
ファイルサイズが 0 のもののみを削除するものです。
削除したファイルは標準出力に表示してください。
また、サイズが0でも、ファイル名のパターンが異なるもの
(たとえば ENV['MEMO_DIR']/md/123-ABC.md )に対してはは何もしません。
cleanup-empty-mdfilesはうまく動きました。
ありがとうございます。
update-recent と cleanup-empty-mdfiles
が表示するメッセージの前には、ツール名自身を入れてください。
例:
update-recent: Generated cli/recent.mk with 10 files
例:
cleanup-emty-mdfiles: No empty files found.
edit-memoはうまく動作しました。
次に cli/new-memo を置きました。
これも先ほどと同様に環境変数 ENV['MEMO_DIR']
を活かした処理にしてください。
ENV['MEMO_DIR']/erbにテンプレートファイル群があり、
ENV['MEMO_DIR']/md にMarkdownファイル群がある想定です。
cli/fetch-gist と cli/fetched-ids.txt を置きました。
これも fetch-gist も環境変数 ENV['MEMO_DIR'] を基準に
ENV['MEMO_DIR']/md, ENV['MEMO_DIR']/img, ENV['MEMO_DIR']/cli
を参照するようにしてください。
cli/fetched-ids.txt
は重要なファイルなので特に注意して扱います
(場所を間違えないようにという意味です)。
cli/fetch-gistはうまく動作しました。
すばらしいですね。
cli/fetch-imagesを置きました。
これも同じようにENV['MEMO_DIR']
をベースに処理するようにしてください。
今回は変更が少し多いです。
cli/fetch-imagesは directory output_dir
という二つの引数を取るようにしていますが、
directory -> ENV['MEMO_DIR']/md
output_dir -> ENV['MEMO_DIR']/img
を使うので引数は不要になります。
そのように修正してください。
しかし、cli/fetch-imagesは重い処理なので、
明示的な処理開始のサブコマンドがあるときだけ実行するようにしたいですが、
何か提案はありますか。
--dry-run じゃないという意味で cli/fetch-images go や run みたいな?
cli/top-switch を置きました。
これもこれまでと同様の修正をお願いします。
cli/memo-cli も合わせて修正。
2025-06-12
日本語でやりとりします。
次のようにmemo-cliを修正してください。
現在、memo-cliでファイル一覧表示し、
Enterキーを押すとファイル選択が終わり、
そこからファイル処理のキー入力になります。
それを、ファイル選択中にキーを押すとすぐにファイル処理を行います。
-----
q キー: 終了(これはすでに実装されています)
e またはEnterキー: edit-memoによる修正開始→終了
t キー: top-switchによる処理→終了
? または h キー: ヘルプ(q, e, t, ? などの説明を表示して
いったんキー待ちに入り、任意のキーでファイル一覧表示に戻る)
-----
うまくいきました。
cli/edit-memo, cli/new-memo を終了するとき、
cli/update-recentを呼ぶようにしてください
。これはmakefileでincludeしいている
recent.mkを更新するためです。
2025-06-13
日本語でやりとりします。
memo-cliが充実してきたので、
以下のコマンドの内容を memo-cli 内部に取り込もうと思います。
edit-memo
=> ENV['EDITOR'] で編集
new-memo
=> ファイルを新規作成してENV['EDITOR'] で編集
top-switch
=> ファイル名の "id14"の後の '-top-' <=> '-'の付け外しを行う
目標は 上記の3コマンドの機能を
memo-cli 内部に取り込み、
3コマンドのファイルを削除することです。
(2025年6月10日)