技術

Claude Code のクラウドセッションで、スマホからでもブログ記事を書けるようにした

このブログは EmDash で動いていて、CLI と REST API から記事を操作できる。これまではローカルの Claude Code から下書きを入れていた。ただ、それだと地味に不便だったので、 Claude Code のクラウドセッション(Claude Code on the web)を使って、スマホや PC の Claude アプリから記事を書けるようにした。

やりたかったこと

  • スマホの Claude アプリから「これ記事にして」で EmDash に下書きが入る
  • API トークンをセッションの VM やチャットに置かない

仕組み

クラウドセッションは、Anthropic がホストする VM の上で Claude Code が動く。セッションごとに新しい VM が用意され、リポジトリをクローンした状態で始まる。スマホアプリ・デスクトップアプリ・ブラウザのどこからでも同じセッションを開ける。

記事は Git ではなく D1 に入っているので、EmDash の REST API(/_emdash/api/...)か CLI で操作する。認証には、クラウド環境の API 認証情報を使う。環境に保存したトークンは、リクエストがセッションの VM を出たあとで、Anthropic のエージェントプロキシが付け足す。付くのは登録したホスト宛てのリクエストだけ。トークンは Claude にも、実行するコマンドや環境変数にも渡らない。

認証情報に登録したホストは、環境のネットワークアクセスの設定とは関係なく到達できる。ブログのドメインを許可リストに足す必要はない。

設定手順

1. EmDash で API トークンを発行する

EmDash の管理画面の「設定」から API トークンを作成する。スコープは細かく選べる。今回は記事の作成からメディアやタクソノミーの操作まで任せたいので、「管理者」にチェックを入れた。

EmDash 管理画面の API トークン作成画面。スコープで「管理者」にチェックを入れ、有効期限は無期限

2. Claude の環境に認証情報を追加する

Claude の環境設定を開き、「API 認証情報」の「認証情報を追加」から発行したトークンを登録する。API 認証情報は Pro / Max プランで使える機能で、Team / Enterprise ではまだ使えない。

  • 追加先: クラウドセッションで使う環境(ここでは emdash-blog)
  • 認証情報タイプ: Bearer
  • 許可ウェブサイト: ブログのホスト(blog.kosa3.com)
  • カスタムヘッダー: Authorization / プレフィックス Bearer / 値に発行したトークン
Claude の「認証情報を追加」画面。追加先に環境、認証情報タイプに Bearer、許可ウェブサイトと Authorization ヘッダーを設定

保存したあとは、値を再表示することも編集することもできない。ホストやトークンを変えたいときは、削除して追加し直す。トークンは指定したウェブサイト宛てにしか送られないので、ほかのホストに漏れる心配もない。

これで、セッション内から curl でヘッダーなしに叩いても管理 API が通るようになる。

curl -sS https://blog.kosa3.com/_emdash/api/content/posts
curl -sS https://blog.kosa3.com/_emdash/api/settings

ハマったところ: emdash CLI だけ 403 になる

curl では通るのに、npx emdash content list posts だけが Forbidden になる。Node から直接 fetch してみると、原因はすぐわかった。

403 Host not in allowlist: blog.kosa3.com.

Node の組み込み fetch は HTTPS_PROXY 環境変数を見ないので、プロキシを通らずに直接外へ出ようとして弾かれていた。認証ヘッダーも付かない。Node 22 なら `NODE_USE_ENV_PROXY=1` を付けるとプロキシを使ってくれる。

NODE_USE_ENV_PROXY=1 npx emdash content list posts --url https://blog.kosa3.com

emdash login は要らない。CLI はトークンなしでリクエストを送り、認証ヘッダーはプロキシが付ける。

毎回付けるのは面倒なので、リポジトリの .claude/settings.json に書いておいた。Claude Code が実行するコマンドにはすべてこの環境変数が付くので、新しいセッションでもそのまま CLI が使える。プロキシのない手元の環境では何も起きないので、害もない。

{
  "env": { "NODE_USE_ENV_PROXY": "1" }
}

実際に書いてみる

あとは Claude アプリでセッションを開いて「こういう記事を書きたい」と伝えるだけ。既存の記事を API で読んで文体や構成を合わせたうえで、CLI で下書き登録まで進めてくれる。

npx emdash content create posts --file post.json --draft --url https://blog.kosa3.com

本文はマークダウンで書けば CLI が Portable Text に変換してくれる。カテゴリの設定も API で済む。この記事自体も Claude アプリから頼んで、この流れで下書き登録したものだ。

使ってみて

「記事を書きたい」と思ったときに PC を開かなくていいのが大きい。思いついたタイミングでスマホから頼んでおけば、EmDash に下書きとして残るので、あとで落ち着いて確認して公開できる。

ただ、エージェントには管理者スコープを渡している。公開や削除までは任せず、下書きで止めておくくらいがちょうどいい。

参考リンク