nemui

markdownへの画像貼付を楽にするCLIツールを作ってみた

2026/03/23
  • #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 の残骸はこちら