2026-01-05 bouzuya/fubako 1.0.0 をつくった
bouzuya/fubako 1.0.0 をつくった。
fubako は Markdown 形式のメモを管理するツール。ファイルシステムを前提として、エディタで編集、ブラウザでプレビューする。ブラウザでは編集できない。画像は Google Cloud Storage と同期できる機能を持っている。
きっかけは zenn CLI を使っていて似たような CLI でもつくってみようかという思いつきから。
1.0.0 は機能的に完成したわけではなく、個人的に 2026 からは最大 1 ヶ月で 1.x にして区切りをつける方針を採るため。
現時点での機能は次のようなものになっている。
$ fubako --help
Usage: fubako <COMMAND>
Commands:
edit Edit the page
get Get the page
image Manage images
new Create a new page
serve Start the local server
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
$ fubako image --help
Manage images
Usage: fubako image <COMMAND>
Commands:
add Add new image to local images directory
pull Pull images from remote storage
push Push images to remote storage
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
fubako edit <PAGE_ID>はエディタ (EDITOR環境変数を参照) に指定されたページ ID のファイルパスを渡す (開く)fubako get <PAGE_ID>は指定されたページ ID のファイルを出力するfubako image add <PATH>は${DATA_DIR}/images/に画像ファイルを追加するfubako image pull [NAME]は${DATA_DIR}/images/${NAME}の画像ファイルを Google Cloud Storage から pull するfubako image push [NAME]は${DATA_DIR}/images/${NAME}の画像ファイルを Google Cloud Storage に push するfubako newはページを新規作成するfubako serveはページのプレビューのためのサーバーを起動する。ファイルシステムを監視し、ファイルの追加・更新・削除を追跡する
サーバーのパスは次のようなものになっている。
/…… ページ IDREADMEがあれば表示し、なければ/pagesにリダイレクトする/{PAGE_ID}…… ページ ID のファイルを表示する- そのページにリンクしているページへのバックリンクが表示される
/images/{IMAGE_NAME}…… 指定された名前の画像を表示する/pages…… ページの一覧を表示する?q={QUERY}…… すべてのページから検索する。空白区切り、大文字小文字を無視
/pages/{PAGE_ID}……/{PAGE_ID}にリダイレクトする/scripts/index.js…… (すべてのページで使用されるスクリプト)/styles/index.css…… (すべてのページで使用されるスタイル)/titles…… タイトルの一覧を表示する/titles/{PAGE_TITLE}…… そのタイトルを持つページ ID の/{PAGE_ID}にリダイレクトする
各ページは次のような解釈がされる。
- ファイル名は
YYYYMMDDTHHMMSSZ.mdの形式。作成日時を表す ISO8601 basic format で timezone は Z 固定 - 最初の
# {PAGE_TITLE}はページタイトルとして解釈される [{PAGE_ID}]などの形でページへのリンクを設定できる。壊れているリンクは ページ ID の形式に合致していれば補完される
設定ファイルは ${XDG_CONFIG_HOME}/fubako/config.json に JSON 形式で設定する。
data_dir…… データディレクトリのパスimage_sync.bucket_name…… fubako image pull/push で使用する Google Cloud Storage のバケット名image_sync.google_application_credentials…… fubako image pull/push で使用する Google Cloud のキーのファイルパスimage_sync.object_prefix…… fubako image pull/push で使用する Google Cloud Storage のオブジェクトの prefixport…… サーバーのポート番号
構成技術は次のようなもの。
- プログラミング言語: Rust
- HTTP サーバー: axum
- テンプレートエンジン: askama
- Markdown の解釈: pulldown-cmark
- シンタックスハイライト: syntect
- ファイル監視: notify
今日のコミット。
- tsukota-web 1 commit