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で瞬時に切り替えられるのは、この用途にちょうどいい。