zpaper-draft

Type to search...

to open search from anywhere

zudotext のライティングワークフロー: Claude Code との協業で文章を書く

概要

zudotextでの日常的な文章執筆ワークフローについてのまとめ。エディタで雑に書いて、ターミナルのClaude Codeに整えてもらって、プレビューで確認して、アーカイブする。この一連の流れが実際どういう風に動いているかという話。

書く環境

zudotextの画面は左右の2ペイン構成になっている。

  • 左ペイン: CodeMirrorベースのMarkdownエディタ(Vimモード対応)
  • 右ペイン: xterm.jsベースのターミナル(Claude Codeが動いている)

エディタはmessage-workspace/draft.mdに書き込む。Claude Codeはmessage-workspace/ディレクトリで起動しているので、draft.mdを直接読み書きできる。エディタ側はdraft.onExternalChangeで外部変更を検知して自動的に表示を更新する。つまりClaude Codeがファイルを書き換えると、エディタの表示が即座に反映される。

これは逆方向も同じで、エディタで文字を打つとファイルが更新され、Claude Codeが次にファイルを読むときには最新の内容が見える。双方向の同期がファイルシステム経由で自然に成立している。

ライティングルール

Claude Codeがただ「丁寧にして」で動くのではなく、ルールファイルを読んで自分の文体に合わせてくれるところがzudotextの仕組み。message-workspace/rules/に3つのルールファイルがある。

  • writing-style.md — 文体、構成、敬語のレベル
  • vocabulary-rule.md — 漢字・ひらがなの使い分け、記号の規則
  • markdown-writing-rule.md — Markdownの構造的なフォーマットルール

Claude Codeはmessage-workspace/で起動するので、CLAUDE.mdの指示に従ってこれらのルールファイルを自動的に参照する。「敬語で整えて」と頼めば、writing-style.mdに書かれた敬語のレベルに合わせてくれる。「語彙チェックして」と頼めば、vocabulary-rule.mdに基づいて表記を統一してくれる。

ルールファイルはただのMarkdownなので、自分で好きに編集できる。ワークスペースごとにルールを変えることもできるので、たとえばクライアントA向けは丁寧寄り、社内向けはカジュアル寄り、みたいな使い分けが可能。

日常のワークフロー

実際に文章を書くときの流れは以下。

下書きを書く

Mod+Nで新しいドラフトタブを開くか、Mod+1〜0でタブを切り替える。エディタに雑なテキストを書く。箇条書きでもメモ書きでも構わない。

たとえばこんな感じで書く。

明日の打ち合わせの件
・14時からでお願いしたい
・場所はオンライン
・先日の件の進捗共有したい
・資料は事前に送ります

体裁はまったく気にしなくていい。内容だけ書く。

Claude Codeに整えてもらう

ターミナル側で、Claude Codeに指示を出す。

このメールを敬語で整えて

これだけ。Claude Codeがdraft.mdを読み、writing-style.mdのルールに基づいて敬語レベルを調整し、ファイルを書き換える。エディタの表示が自動更新されて、整った文章が出てくる。

他にもこんな指示を出す場面がある。

もっとカジュアルにして
Slackメッセージ風にして、箇条書きで
件名も付けて
語彙チェックして

Claude Codeはチャットインターフェースではなくターミナルで動いているので、ファイルの読み書き、ツールの実行、コンテキストの保持ができる。「draft.mdを読んで、ルールを参照して、draft.mdを書き換える」という一連の作業がClaude Codeの通常の動作そのもの。

プレビューで確認する

Mod+Eでエディタとプレビューを切り替えられる。Markdownのレンダリング結果を確認して、体裁に問題がなければ完了。

アーカイブする

完成したメッセージはコマンドパレット(Mod+K)からアーカイブする。doc/docs/messages/YYYYMMDD-HHMM-description.mdの形式で保存される。YAMLフロントマターにタイトルとsidebar_positionが付与され、新しいものが上に来る並び順になる。

テンプレートでないメッセージには## コピー用というセクションが自動的に追加される。ここにMarkdownを剥がしたプレーンテキストが入っていて、メールやSlackにそのままコピーペーストできる。

マルチタブで並行して書く

ドラフトタブは最大99個(tab-01.mdからtab-99.md)使える。それぞれ独立して永続化されている。

Mod+1でtab-01、Mod+2でtab-02、Mod+0でtab-10に切り替えられる。複数のメッセージを同時進行で書いているときに便利で、あるメールの返信を待っている間に別のSlackメッセージを書く、みたいな使い方ができる。

アーカイブの検索

過去にアーカイブしたメッセージは全文検索できる。日付順またはrelevance順でソートでき、ツールバーかコマンドパレットからアクセスできる。

「先月あのクライアントに送った文面、もう一回使いたい」みたいな場面で、過去のメッセージをすぐ引っ張り出せる。

Pinsで参照資料を手元に置く

サイドバーにはPinsという機能があって、任意のディレクトリをピン留めできる。デフォルトではClaude Codeのスキルディレクトリがピン留めされている。

文章を書いているときに、参照したい資料やテンプレート、メモなどをピン留めしておくと、エディタとターミナルの横にサイドバーから素早くアクセスできる。

なぜこの方式がうまくいくのか

Claude Codeをターミナルに直接埋め込んでいるのがこの仕組みの核になっている。チャットUIではなくターミナルなので、Claude Codeの本来の能力がそのまま使える。

  • ファイルの読み書きができる(draft.mdを直接編集する)
  • ルールファイルを自動的に参照できる(CLAUDE.mdの仕組み)
  • コンテキストが保持される(同じセッション内で複数回のやり取りができる)
  • ツールの実行ができる(必要に応じてgrepしたり、他のファイルを参照したりできる)

ライティングルールをMarkdownファイルとして管理しているのも良い。バージョン管理できるし、テキストエディタで直接編集できる。「この表現はやめよう」と思ったらルールファイルに1行追加するだけ。

双方向のdraft同期も地味に大事で、「人間が書く → AIが整える → 人間が確認する」のループがシームレスに回る。AIがファイルを書き換えたらエディタに即反映されるし、人間がエディタで微調整したらAIの次の読み取りに反映される。コピーペーストで行ったり来たりする必要がない。

余談

マルチタブ対応は後から追加した機能だが、これがあるとないとではかなり違う。メッセージを1通書くだけなら1タブで十分だが、実際の業務では複数のメッセージを並行して書いていることが多い。返信待ちの間に別のメッセージを書き始める、みたいな場面は日常的にある。タブをMod+1〜0で瞬時に切り替えられるのは、この用途にちょうどいい。