Draft CLI

git push のように、ターミナルから記事を公開

インストール

# pipxをインストール(まだない場合)
$ brew install pipx # Mac
$ apt install pipx # Linux
# Draft CLIをインストール
$ pipx install git+https://github.com/s-saga011/draft-publish.git

インストール後 draft --help で確認できます。

初回セットアップ

1. サーバー設定

$ draft remote https://draft-publish.com --lang ja
https://draft-publish.com (lang: ja)

2. SSH鍵を登録

Web UIの設定画面からSSH公開鍵を登録します。CLIはSSH鍵で自動認証されるため、パスワードやAPIキーは不要です。

# 公開鍵を確認(この内容をWeb UIに登録)
$ cat ~/.ssh/id_ed25519.pub

3. シェル補完を有効化 (オプション)

サブコマンドやフラグの TAB 補完を有効化します(例: draft push --+TAB で --unlisted, --draft, --price... が候補表示)。

# zsh 用の補完を書き出す(~/.zfunc/_draft、初回のみ)
$ draft --install-completion zsh
# TAB が効かない場合は ~/.zshrc に以下を追加(typer が自動で入れることが多い)
$ echo 'fpath=(~/.zfunc $fpath)' >> ~/.zshrc
$ echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
$ exec zsh # シェルを再読み込み

使い方

新規記事を作成

$ draft new "記事タイトル" --price 500 --tags "投資,AI"
📝 ~/drafts/記事タイトル-xxxxxx/
├── article.md ← 編集するファイル
└── draft.json ← メタデータ

記事を編集してpush

# 好きなエディタで編集
$ cursor ~/drafts/記事タイトル-xxxxxx/article.md
# push(SSH鍵で自動認証、画像も自動アップロード)
$ cd ~/drafts/記事タイトル-xxxxxx/
$ draft push
🔑 SSH認証中... ✅
📤 chart1.png
📤 chart2.png
🚀 https://draft-publish.com/articles/...

フォルダごとpush

Markdownと画像をフォルダにまとめてpushできます。サブフォルダ内の画像も自動検出。

$ ls my-article/
article.md charts/ screenshot.png
$ draft push ./my-article/ --price 500
# 画像は自動検出・アップロード・リンク書き換え
# 新規記事の公開状態を指定(初回 push 時のみ反映)
$ draft push ./my-article/ --unlisted # 限定公開(リンクを知ってる人のみ、検索・一覧に出さない)
$ draft push ./my-article/ --draft # 下書き保存(自分だけが閲覧可能)

--unlisted--draft で作った記事は、以降の draft push で同じ公開状態が維持されます(毎回フラグを付け直す必要なし)。

公開・管理

$ draft publish # 下書き → 公開
$ draft publish --unlisted # 下書き → 限定公開(リンク経由のみ、検索/一覧から除外)
$ draft status # ローカルの記事ブランチ一覧
$ draft list # サーバーの記事一覧
$ draft log # リビジョン履歴
$ draft checkout <slug> # 既存記事をダウンロード

アップデート・アンインストール

# 最新版にアップデート
$ pipx upgrade draft-publish
# アンインストール
$ pipx uninstall draft-publish

Frontmatter

article.mdの先頭にメタデータを記述できます。CLI引数より優先度は低いです。

---
title: "記事タイトル"
price: 500
tags: [投資, AI]
---
# 記事タイトル
ここに本文...
<!-- paywall -->
ここから有料部分...

Markdown — Draft 独自オプション

標準の CommonMark + GFM はそのまま動きます。以下は Draft 独自の拡張記法です(<img width=...> 等の生 HTML はエスケープされるため、下記の書き方を使ってください)。

1. クリック拡大できる画像

画像の末尾に {.zoom} を付けると、ホイール/ピンチで拡大、ダブルクリックでリセットできるようになります。data-max で最大倍率(デフォルト 8)、data-min で最小倍率(デフォルト 0.5)を指定可能。

![alt](path.png){.zoom}
![alt](path.png){.zoom data-max=4}
![alt](path.png){.zoom data-max=4 data-min=0.5}

2. Before / after スライダー — :::compare

:::compare ブロックの中に 画像をちょうど 2 枚書くと、ドラッグで A/B を切り替えるスライダーになります。画像の alt がラベルとして表示されます。

:::compare
![変更前](a.png)
![変更後](b.png)
:::

{.zoom} と併用可: ![A](a.png){.zoom data-max=4}

3. ブロックに class / id を付ける — {.class} / {#id}

属性ブロックは対象の 1 行前 に置きます。見出し(id / class)、段落、引用、リスト、表セルに付けられます。リンクは末尾にインラインで。

{#intro}
## はじめに
{.lead}
リード文として装飾される段落。
{.callout}
> 重要な注意事項。
[今すぐ購入](/buy){.button}

クラス名は対応する CSS が無いと見た目が変わりません。.callout .lead .button 等は慣例で、組み込みではないので、必要なら CSS を追加してください。

4. ペイウォール — <!-- paywall -->

無料プレビューと有料部分を分割します。無料部分は全体の 30% 以上である必要があります。

無料部分の内容...
<!-- paywall -->
有料部分の内容...
使えない記法: 生 HTML タグ(<img width="..."><script><iframe> など)、インライン span 属性([text]{.x})、画像の style/width/height、見出し末尾の id(## Title {#id} は不可、{#id} を 1 行前に置く)。

コマンド一覧

コマンド説明
draft remote <url>サーバーURLを設定
draft new "タイトル"新規記事ブランチを作成
draft push [path]記事をpush(SSH鍵で自動認証)
draft publish下書き → 公開
draft publish --unlisted下書き → 限定公開(リンク経由のみアクセス可、検索/一覧から除外)
draft checkout <slug>既存記事をダウンロード
draft statusローカルの記事ブランチ一覧
draft log [slug]リビジョン履歴
draft lang en/ja言語を切り替え
draft listサーバーの記事一覧
認証方式: SSH公開鍵(GitHub方式)。APIキーやパスワードの保存は不要です。
ローカルに保存されるのはサーバーURLのみ(~/.draft/config.json
GitHub →