markdownへの画像貼付を楽にするCLIツールを作ってみた
- #cli
- #markdown
ローカルで markdown の記事を書いているときに画像貼付が面倒だったので、CLIツールを(Claudeが)作りました。
予め設定したR2等のバックエンドに画像データをアップロードし、そのパスを使った画像マークダウン形式で標準出力するだけのものです。
リポジトリはこちら
https://github.com/daaa1k/mdp
インストール
macOS, Linux は Homebrew でインストールできるようにしています。Nix でもインストール可能です。
(※ GUIでもないのにCaskにしているのは、Cask無しが Goreleaserでdeprecated になっていた為です。Homebrewは本来、バイナリのダウンロードには使わないとか?)
brew install --cask daaa1k/tap/mdp
Windows 版は Releaseページから最新版をダウンロードしてください。
使い方
ローカルバックエンドを指定して実行
mdp --backend local
設定ファイル(~/.config/mdp/config.yaml or ./.mdp.yaml)を作成して実行
mdp
詳しい設定方法はリポジトリのREADMEを見てください。
動作イメージ
Neovim では !! に続けてアプリを実行すると標準出力をカーソル位置に出力できます。
それを利用してこのように簡単に画像を貼付することができます。

特徴
-
アプリを実行すると、設定に従いクリップボードの画像をバックエンドにコピー(or アップロード)し、参照パスを画像マークダウン形式で標準出力に出力します。
-
画像を保存するバックエンドとして、ローカル・R2(S3も多分使える)・NodeBBの3種類に対応しています。
NodeBBは訳あって少し行儀の悪い方法での実装になっていますが、ご了承ください。 -
画像はエクスプローラーで画像ファイルを単数・複数コピーして貼付することもできますし、
スクリーンショットの画像データをコピーして貼付することもできます。 -
macOS, Windows, WSL2, Linux に対応
(※ 動作確認は現状、 macOS, WSL2でしか行っていません) -
グローバル・プロジェクト毎・実行時の設定に対応
おわりに
私は Rust の書き味が好きなので、このアプリもはじめは Rust で作っていましたが、
AWS SDK 等の依存がある関係で、どうしてもCIが重く、mold, rusty-s3, cache等、様々なチューニングを施して、
改善はできたものの、本質的ではないところに時間を割くのに嫌気が差し、最終的に Go で作り直しました。
また、興味本位で Zig でも同じのを作ってみたものの、まだまだ GitHub のサポートが不十分(Dependabot, CodeQL未対応)だったり、
メジャーバージョン0で言語仕様が安定していなかったり、標準のパッケージ管理方法がいまいちだったりという課題があり、いったん断念しました。
ただ、C の libwebp をそのまま使えたり、CIが高速だったり、バイナリサイズが小さかったりと大変魅力的ではあるので、今後に期待します。
Rust と Zig の残骸はこちら