Claude Code でやったことを後から忘れがち。session 内容をそのまま記事化して Hatena Blog に投げる slash command /cc-article をつくった。
なぜ作ったか
Claude Code で小ツールを作ったり、複雑な設定を組んだり、調査したり。便利な分やることが増えるけど、数週間後にはほとんど忘れている。あの設定どう入れたっけ、あの API どう叩くんだっけ、と。 正直中身を理解せずにおわるケースも増え、今までエンジニアとして仕事する上であった学びの喜びみたいなものが薄れてしまっているのを感じていた。
そこで Claude Code session の文脈から draft を起こして、推敲し、Hatena に投げるまでを 1 つの slash command にまとめた。
できあがったもの
/cc-article という slash command。draft 生成・publish・update の 3 mode を 1 コマンドで使い分ける。
$ /cc-article # 直前の作業から記事の骨子を生成して Obsidian に保存 $ /cc-article publish <path> # Hatena に下書きとして POST $ /cc-article update <path> # 編集後の内容を PUT で上書き
session の終わり際に「これ記事にしておこう」と思ったら 1 行叩くだけで、構成案 → ファイル生成 → ブログ投稿まで進む。
使い方
1. draft 生成
session 末尾で /cc-article を叩くと、以下のステップで draft が生成される。
- 直前の会話コンテキスト +
git logから「今やったこと」を抽出 - タイトル候補・想定読者・章立て・冒頭フックを提示して承認を取る
- 承認後、Obsidian (
Articles/YYYY/MM/) に Markdown を保存
中継地として Obsidian を選んだ理由は単純で、
- もともと個人ノート用に Obsidian を使っていた(追加の環境構築が不要)
- Markdown ネイティブで preview もある
- iCloud 同期で iPhone でも校正できる
- Notion のように API 経由での読み込みではなくローカルファイルで直接 grep できるため AI 親和性が高い
- git を入れなくても diff・履歴確認 ができる仕組みがある(プラグイン
File Exporter++を利用)。AI が編集した直後に「どこが変わったか」をその場で確認できる
Obsidian でなくても Markdown ファイルが置ければ代用できる(VS Code、生 vim でも)。
2. 推敲
Obsidian で開いて編集。frontmatter の ready: true にすると後でまとめて publish 対象に拾える。
3. 公開
/cc-article publish <path> を叩くと、POST 前に文体・事実関係・重複などの自動チェックが走り、引っかかった箇所はユーザーに提示して合意を取ってから進む。雑に書いた箇所が自分で気付く前に拾われるのが嬉しい。
精査をパスしたら AtomPub の POST を叩いて Hatena に 下書きとして 上げる。Hatena 管理画面で内容を確認してから公開ボタンを押す。
4. 更新
公開後に手を入れたら /cc-article update <path> で PUT。公開状態は保持されたまま本文だけ差し替わるようにした。
仕組み
/cc-article の指示書には:
- 文体ルール(リード文の長さ、避けたい言い回し、見出しの NG パターン)
- セクション構成(人気記事 20 本を分析したテンプレート)
- AtomPub の POST/PUT/GET の curl コマンド例
- frontmatter スキーマ(
published/readyの boolean、ISO 8601 datetime)
を書いてある。実行時に Claude が指示書を読んで、bash で curl を叩いたり Edit で frontmatter を書き換えたりしてくれる。
実装のポイント
文体ルールをコード化
「リード文は 60〜80 字」「〜話 の見出し NG」「動機は『〜つくった』で結論着地」「絵文字は本文中の 1〜2 箇所だけ」など、Zenn / Qiita / Dev.to の人気記事を分析して得たルールを skill ファイルの中に書いてある。draft 生成時に Claude がこれを参照して骨子を組み立てる。
書きながら違和感を伝えると skill 側にも反映していくので、自分好みの文体に少しずつ育っていく。
frontmatter で状態管理
published: true/false と ready: true/false の 2 boolean で「執筆中 / 公開待ち / 公開済み」を表現。Obsidian Bases で boolean 直接フィルタすると各記事の状態が一覧で見える。
Hatena AtomPub の癖を吸収
下書き保存は <app:draft>yes</app:draft>、公開は <app:draft>no</app:draft>。update mode では PUT 前に GET で現在の draft 状態を取得し、同じ値で PUT するようにしている。ユーザーが管理画面で行った公開操作を勝手に上書きしない ようにする
おわりに
この記事も /cc-article コマンドで作成した。ほぼ一発出しで、少しだけ人力で調整した。 最近ブログを更新してなかったけど、記事を書くハードルが格段にさがったので更新を再開していこうと思う。以前よりググり頻度が下がるブログを読む人口は下がっているものの、やったことを残しておくだけでAIに指示して仕事がおわってしまってちょっと虚無ってる状態から脱せられるといいな(引き続きコードを書くことは全力でAIに任せていく)