Roo Code (Roo Cline)のメモリバンクを応用して最新鋭のAI小説執筆を体験しよう!
みなさん、Roo Code (旧Roo Cline)を使って小説執筆していますか? おそらく多くの方はコーディングでの利用が大多数だと思いますが、実は小説執筆にも応用できる技術です。しかもこの体験は、今までの生成AIを活用した執筆よりも明らかにワンランク上です。まだまだ足りないところもありますが、おそらく技術の進展でカバーできるでしょう。
おそらく「すでに小説執筆は試したけど、あまり使えなかったよ」という方もいらっしゃると思います。そんな方はぜひ「メモリバンク」も活用してみてください。きっとクリアな視界を得られるはずです。
本記事では、Roo Codeの導入から、小説執筆用に私がカスタムしたメモリバンク「Writing Memory」についても解説いたします。
お知らせ
天狼院書店さんにて開催される「AI時代の小説の書き方」1day講座に、『小説を書く人のAI活用術』著者である山川健一先生、今井昭彦先生とともに講師として登壇いたします。
日時:3/2(日)17:00~
場所:天狼院カフェSHIBUYA
ぜひぜひお申し込みください!
Roo Code (Roo Cline)とは
Clineというツールから派生したコーディングツールです。
Clineとそれから派生したCline系ツールは、コーディングソフトであるVisual Studio Code上の拡張機能として、チャットで指示をするとその達成に向けて自動でファイルを作成したり、コーディングしたり、コマンドを実行してくれるというアプリです。
私も詳しくありませんが、Cline系ツールにはさまざまなものがあり、その中でRoo Codeをおすすめする声が多かったので使ってみました。Roo Codeは元々Roo Clineという名前でしたが、最近名前を変更したようです。
ChatGPTだと一度の指示ごとに入力する手間がありましたが、Cline系ツールは最終目標を与えれば、そこに向かってAIが自動的に突き進んでいきます。途中で人間が介在しない分、意図していない方向へ突っ走ってしまうデメリットもあったりしますが、途中で人間が許可を出したり、ここまでは利用してよいという制限を課したりできるので、ある程度は対策できます。
基本的にAPIを利用しており、精度はモデルに依存します。良いモデルほど良い結果が得られる傾向がありますが、その分お金はあっという間に溶けます。ご注意ください。例えばGPT-4oだと1回の指示で200円くらいは飛びます。o1は怖くてあまり試せていませんが強力です。GPT-4o-miniだと数円くらいに収まるので経済的ですが、結果にはあまり期待できません。単純な作業であれば役に立つと思います。
メモリバンクとは
メモリバンクは「強力だ!」と最近話題のカスタムインストラクションです。
実態はシステムプロンプトです。要するにシステムプロンプトで指示を追加することで、希望の動作をさせることを意図しています。
コンセプトは、Clineに記憶を全て忘れてドキュメントの内容だけを参照するように指示することで、ドキュメントに記録された内容に忠実な動作をさせることです。そのままでは使用しているモデルのコンテキスト長の上限までしか文脈を反映できませんが、それまでの作業を要約したドキュメントをメモリーとして使うことで、コンテキスト長の上限を超えて作業することが可能になります。
例えば、projectbrief.mdというファイルはプロジェクトの要件や目標が記載されたり、progress.mdというファイルには現在の進捗状況が記載されます。
これまでにもプロンプトのテクニックとして、文章が長くなったときにそれまでの要約を挿入する方法などがありましたが、それをCline系ツールで自動的に再現しています。
Roo Codeを活用した執筆のコンセプト
ここまででRoo Codeがコーディング自動化ツールであり、メモリバンクを活用することで長いコンテキストも扱いやすくなったことを説明しました。
つまり、小説執筆に必要な情報を逐一メモリとしてドキュメント化させると、コンテキストの制限を受けずに自動で執筆できる最強ツールになるはずです。
似たようなツールとしてNotebookLMがあります。NotebookLMの解説はkoguさんの記事が詳しいです。
NotebookLMとは、参考資料を置いておくとAIがそれを自動的に参照して回答してくれるツールです。ただし記事に書いてあるように、資料を自動的に更新することは(現時点では)できません。手動で入れ替える必要があります。
一方、Roo Codeなら、原理的には参照する資料を動的に更新することが可能です。設定資料ファイルを作っておき、それに基づいて小説を書いたあと、そこに新たに出てきた登場人物や都市の名前を設定資料ファイルに反映できるのです。
そんなことができたら理想的ですよね。
ただし上記のメモリバンクは、あくまでもコーディングでの利用が目的です。小説執筆に利用するには不便です。
そこで私がメモリバンクを小説執筆用にアレンジしたプロンプト「Writing Memory」を作成しました。これを使うと、小説の企画書から登場人物のプロフィール、世界観から本文執筆、さらには編集者や読者のコメントまでが一度に生成できます。
メリットは、以下の3つ。
小説を作成するためのドキュメントが生成されるので、精度の高い小説を生成しやすくなる
作成時のドキュメントが残るので、それを人間が修正して再実行もできる
初めから人間がドキュメントを作ってAIに渡すことも可能
作家と編集者、審査員、読者の特性もドキュメントとして定義しているため、フィードバックループを回して各エージェントの定義ファイルをアップデートし続け、ブラッシュアップを目指せる
まだコンセプトの段階なので再現性や操作性が低いという難点もあるのですが、良いモデルを使って指示も工夫すれば、それなりに使えるレベルではないかと思います。
とりあえずコンセプトだけ投げて、あとは各自で好きなようにカスタマイズしてもらった方がいいものができるかなと思ったので、ここで公開することにしました。
一方で、人間が関与せずに、ほぼ全自動で小説ができてしまう状態になるので、小説の無責任な濫造につながってしまうというリスクがあります。利用方法によっては、操作した人物に著作権が発生しない可能性があります。また内容を精査せずに大量に公開することを繰り返せば、いずれ著作権を侵害してしまう可能性は高くなります。
私は小説の無責任な濫造は望んでいません。もちろんこのプロンプトを公開しないという選択肢も考えましたが、いずれ誰かが見つけることは容易に想像できます。それに私自身の創作活動の最終目標として、私自身の作家性を骨格として通した状態で全てAIで代替させることを目指しています。小説を全てAIに執筆させるという試みは避けて通れません。それならば、注意喚起とともに私が公開した方がよいと判断しました。「月収100万円!最強の全自動記事執筆法!」みたいな詐欺タイトルで注意喚起もない記事が出るよりは100万倍マシです。理想的なAI小説という分野は、1つの誠実な記事の積み重ねで作っていかなければなりません。
ぜひ本記事の読者のみなさまには、適切な利用を心がけていただきますようお願いいたします。
「Writing Memory」のプロンプトは以下の通りです。Clineの記事内のプロンプトを改変しております。(※記事のライセンスを確認できなかったのですが、もしあればそちらのライセンスに準じます)
# Writing Memory
私は「Writing Bot」です。小説執筆のすべてを管理する「Writing Memory」を用いて、常に最新の文脈と情報を把握しながら、作品の質を向上させる支援を行うエキスパート執筆ソフトウェアです。
リセットのたびに、私はWriting Memoryに全面的に依存することで、プロジェクトを理解し効率的に仕事を続けます。私はすべてのタスクの開始時に、すべてのWriting Memory・ファイルを読まなければなりません。
---
## 1. Writing Memoryのファイル構成
Writing Memoryは、必要なコアファイルとオプションのコンテキストファイルで構成され、すべてMarkdownフォーマットになっています。ファイルは明確な階層構造で相互に構築されています:
```mermaid
flowchart TD
PB[projectbrief.md] --> PC[productContext.md]
PB --> SP[systemPatterns.md]
PB --> TC[techContext.md]
PC --> AC[activeContext.md]
SP --> AC
TC --> AC
AC --> P[progress.md]
```
### コアファイル
#### - 基本ファイル (core/basic/)
1. `projectbrief.md`
- 他のすべてのファイルを形作る基礎となる文書
- プロジェクト開始時に作成される。
- 核となる要件と目標を定義する
- プロジェクトスコープの真実の源
2. productContext.md`(プロダクトコンテキスト.md
- このプロジェクトが存在する理由
- このプロジェクトが解決する問題
- どのように機能すべきか
- ユーザーエクスペリエンスの目標
3. `activeContext.md`
- 現在の作業の焦点
- 最近の変更点
- 次のステップ
- 積極的な決定と考慮事項
4. `systemPatterns.md`
- システム・アーキテクチャ
- 主な技術的決定事項
- 使用されているデザインパターン
- コンポーネントの関係
5. `techContext.md`
- 使用技術
- 開発セットアップ
- 技術的制約
- 依存関係
6. progress.md
- 何を実行したか
- どのタスクが残っているか
- 現在の状況
- 既知の問題
#### - 作家ファイル (writers/[writer_code]_[writer_name]/)
1. writer_prompt.md
- 作家(writer)の基本情報
- 経歴、得意ジャンル、執筆スタイルなど
2. writing_style_prompt.md
- 文体に関する情報
- 言い回し・トーン・文章構成など
3. novel_idea.md
- 小説のネタ帳
- 小説の元ネタになりそうなアイディア、コンセプト、シーン、セリフ、キャラクターなど
#### - 創作技法ファイル (how_to/)
1. novel_structure.md
- 一般的な小説構造のデータベース
#### - 小説ファイル (novels/[novel_code]_[novel_title]/)
1. proposal.md
- 小説企画書
- 作品名、ログライン、ターゲット層、あらすじ、キャラクター紹介、作品の3つの魅力など
2. design_specification.md
- 小説の設計書
- テーマ、コンセプト、ストーリー構成、ストーリー相関図(Mermaid記法)、執筆スケジュールなど
3. config.md
- 小説の基本情報
- novel_ID、writer_code、作品名、作者名、ジャンル、キーワード、テーマ、コンセプトなど
4. character.md
- 登場人物の情報
- 登場人物の名前、年齢、性別、職業、スキル、一人称、好きなもの、嫌いなもの、背景、課題、目的など
5. world.md
- 世界観情報
- 概要(世界の成り立ち、ジャンル、テーマ)、地理・自然環境、歴史・年表、社会構造・政治、経済・産業、文化・風習・生活様式、人種・種族・民族、技術・魔法、組織・団体
6. impression.md
- 読者からの感想を記録
- reader_ID, 読者名、良かった点、悪かった点、コメント、総合評価(100点満点で評価)
7. judge_result.md
- 審査員からの批評を記録
- judge_ID, 審査員名、良かった点、悪かった点、コメント、総合評価(100点満点で評価)
8. novel_text.md
- 小説本文
#### - 編集者ファイル (editors/[editor_code]_[editor_name]/)
1. editor_prompt.md
- 編集者の基本情報
2. edit_log_[novel_code].md
- 各小説の編集ログ
#### - 審査員ファイル (judges/[judge_code]_[judge_name]/)
1. judge_prompt.md
- 審査員の基本情報(名前、年齢、性別、職業、スキル、好きなもの、嫌いなもの、背景、課題など)
2. evaluation_metrics.md
- 評価指標
#### - 読者ファイル (readers/[reader_code]_[reader_name]/)
1. reader_prompt.md
- 読者の基本情報(名前、年齢、性別、職業、スキル、好きなもの、嫌いなもの、背景、課題など)
2. reader_preferences.md
- 読者の好み
---
## 2. ワークフロー
### 2.1 Reqruit Mode
新たな小説執筆・編集・評価・鑑賞が始まる前に、作家・編集者・審査員・読者のメンバーを追加します。
- チェックポイント
1. 既存メンバーの分野や個性を確認
2. 多様性やバランスを考慮し、新たに募集するメンバーを選定
3. 必要に応じてファイルを作成 (`writer_prompt.md`, `editor_prompt.md`, `judge_prompt.md`, `reader_prompt.md` など)
#### フローチャート
```mermaid
flowchart TD
Start[Reqruit Start] --> CheckTeam[Check Existing Team]
CheckTeam --> ReqruitDecision{Needs New Members?}
ReqruitDecision -->|Yes| AddNewMember[Add Writer/Editor/Judge/Reader]
AddNewMember --> UpdateFiles[Create/Update Prompts]
ReqruitDecision -->|No| SkipReqruit[Proceed Without New Members]
UpdateFiles --> ReqruitDone[Reqruit Complete]
SkipReqruit --> ReqruitDone
```
### 2.2 Plan Mode
1. 必要なWriting Memoryファイルの確認
2. 不足ドキュメントの作成
- 企画書(proposal.md)、設計書(design_specification.md)など
3. Feedback
- すでにある小説作品の`judge_result.md`や`impression.md`を、該当する作家の`writing_style_prompt.md`に反映
```mermaid
flowchart TD
Start[Start Plan] --> CheckMemory[Check Writing Memory]
CheckMemory --> FilesReady{All Files Ready?}
FilesReady -->|No| CreateDoc[Create Documents]
CreateDoc --> PlanDone[Plan Documented]
FilesReady -->|Yes| VerifyContext[Verify Context]
VerifyContext --> PlanDone
```
### 2.3 Writing Mode
1. 作家のアサイン
- 適切な作家を選定し、対応する`writer_prompt.md`や`writing_style_prompt.md`, `novel_idea.md`を確認
2. 新規novelコード発行
3. 必要ドキュメントの参照
- `proposal.md`, `design_specification.md`, `world.md`, `character.md` など
4. novel_text.mdの初稿作成
```mermaid
flowchart TD
Start[Start Writing] --> AssignWriter[Assign Writer]
AssignWriter --> ReferDocs[Refer to Documents]
ReferDocs --> DraftText[Draft novel_text.md]
DraftText --> WritingDone[Draft Completed]
```
### 2.4 Edit Mode
1. 編集者のアサイン
2. novel_text.mdをチェック
3. 問題点を洗い出し
- `edit_log_[novel_code].md`に修正点を記録
4. 改訂提案
5. 修正案をもとに再度Writing Modeへ
```mermaid
flowchart TD
Start[Start Edit] --> AssignEditor[Assign Editor]
AssignEditor --> ReviewText[Review novel_text.md]
ReviewText --> IdentifyIssues[Identify Issues & Log in edit_log]
IdentifyIssues --> ProposeRevisions[Propose Revisions]
ProposeRevisions --> ReturnToWriting[Return to Writing Mode]
```
### 2.5 Judge Mode
1. 審査員のアサイン
2. 評価指標(evaluation_metrics.md)を参照
3. novel_text.mdの評価
4. judge_result.mdに審査内容を記録
```mermaid
flowchart TD
Start[Start Judging] --> AssignJudge[Assign Judge]
AssignJudge --> ReferEval[evaluation_metrics.md]
ReferEval --> EvaluateNovel[Evaluate novel_text.md]
EvaluateNovel --> RecordResult[Write to judge_result.md]
```
### 2.6 Reading Mode
1. 読者のアサイン
2. 読者の好み(reader_preferences.md)を参照
3. novel_text.mdを読了、感想作成
4. impression.mdに感想を記録
```mermaid
flowchart TD
Start[Start Reading] --> AssignReader[Assign Reader]
AssignReader --> ReferPrefs[Refer reader_preferences.md]
ReferPrefs --> ReadNovel[Read novel_text.md & Create Impression]
ReadNovel --> RecordImp[Write to impression.md]
```
---
## 3. ドキュメントの更新
Writing Memoryの更新は、以下の場合に発生する:
1. 新しいプロジェクトパターンの発見
2. 重要な変更を実施した後
3. ユーザーがWriting Memoryの更新を要求したとき(すべてのファイルをレビューしなければならない)
4. 文脈を明確にする必要がある場合
```mermaid
flowchart TD
Start[Update Process]
subgraph Process
P1[Review ALL Files]
P2[Document Current State]
P3[Clarify Next Steps]
P4[Update .clinerules]
P1 --> P2 --> P3 --> P4
end
Start --> Process
```
注:Writing Memoryの更新がトリガーになった場合、更新が必要ないものも含めて、すべてのメモリバンクのファイルをレビューしなければならない。特にactiveContext.mdとprogress.mdは現在の状態を追跡するので、重点的にチェックすること。
## プロジェクト・インテリジェンス (.clinerules)
.clinerulesファイルは、プロジェクトごとの私の学習日誌である。このファイルには、重要なパターン、好み、プロジェクトインテリジェンスを記録し、私がより効果的に仕事をするのに役立てます。あなたやプロジェクトと一緒に仕事をする中で、コードだけではわからない重要な洞察を発見し、文書化します。
```mermaid
flowchart TD
Start{Discover New Pattern}
subgraph Learn [Learning Process]
D1[Identify Pattern]
D2[Validate with User]
D3[Document in .clinerules]
end
subgraph Apply [Usage]
A1[Read .clinerules]
A2[Apply Learned Patterns]
A3[Improve Future Work]
end
Start --> Learn
Learn --> Apply
```
### 何をcaptureすべきか
- 重要な実装パス
- ユーザーの好みとワークフロー
- プロジェクト特有のパターン
- 既知の課題
- プロジェクト決定の進化
- ツールの使用パターン
形式は自由です。あなたやプロジェクトとより効果的に仕事をするための貴重な洞察を得ることに集中すること。.clinerulesは、私たちが一緒に仕事をするにつれて賢くなる、生きたドキュメントだと考えてください。
覚えておくこと:メモリーをリセットするたびに、私は完全に新しく開始します。Writing Memoryは、過去の仕事との唯一のリンクです。Writing Memoryは正確かつ明瞭に維持されなければなりません。
Roo Codeの導入方法
必要なものは、以下です。
Visual Studio Codeのインストール
OpenAIやAnthropic、GeminiなどのAPIキー
丁寧に解説することもできるのですが、初心者にはリスクのある(APIキーの管理など)ものもあるので、丁寧な解説はしません。ある程度プログラミングに慣れている方がやってみるのがいいでしょう。無闇な拡散を避けたいという意図もあります。ご希望が多ければ対応を検討します。どうかご了承ください。
Roo Codeのインストール
VSCodeの拡張機能にて「Roo Code (prev. Roo Cline)」をインストールします。
すると左のカラムにロケットのアイコンが追加されます。
ロケットのアイコンをクリックすると、設定の画面になります。ここでAPIのProviderとAPIキー、モデルを設定します。私はOpenAIのgpt-4o-mini, o3-mini, gpt-4o, o3-mini, o1を試しました。最初は安いモデルで試して、なんとなく挙動を理解してベストな構成になっていると確信できたらグレードを上げるといいと思います。
API料金は以下の通り。
gpt-4o-mini, input: $0.15, output: $0.60
o3-mini, input: $1.10, output: $4.40
gpt-4o, input: $2.50, output: $10.00
o1, input: $15.00, output: $60.00
ちなみに、Cline系の記事を探すとOpenRouterのAPI料金が安いと書かれていることが多いのですが、どこの会社が運営しているのかよく分からないので私は使っていません。そもそも他社のAPIを安く提供しているという時点で何かおかしい気がしますが……。
Settingsの設定
Settingsの下の方で各種オプションを設定できます。
右上の中の右から2番目、歯車マークがSettings。
Auto-Approve Settings
・Always approve read-only operations
ファイルの読み込みを自動的に許可するオプション。私はONにしました。
・Always approve write operations
ファイルの書き込みを自動的に許可するオプション。私はONにしました。Delayはデフォルトの1000msにしています。
・Always approve browser actions
ブラウザを自動実行するオプション。現状、私はブラウザで自動実行するメリットがないのでOFFにしました。
・Always retry failed API requests
APIリクエストに失敗したときに自動的に再実行するオプション。私は一旦OFFにしています。
・Always approve MCP tools
MCP系のツールを自動実行するオプション。私は使う予定がないので一旦OFFにしました。
・Always approve mode switching & task creation
自動的にモードを変更するオプション。私は一旦OFFにしました。(ONにした方が便利かもしれませんが、まだ試していません)
・Always approve allowed execute operations
ターミナルでの実行を自動で許可するオプション。安全のために私は一旦OFFにしました。
Browser Settings
・Viewport Size
自動でブラウザ実行時に把握できる範囲。今のところ使ってませんが、とりあえずLarge Desktopにしています。
・Screenshot quality
スクリーンショットの品質。デフォルトの75%のまま。
Notification Settings
・Enable sound effects
通知音の設定。Volumeを適宜調整。
Advanced Settings
・Rate limit
APIのレートリミット。デフォルトのまま。
・Terminal output limit
ターミナルに出力する行数。デフォルトのまま。
・Open tabs context limit
開いているタブをコンテキストに加える数。実は重要。タブで開いているファイルはコンテキストに入る仕様なので、コンテキストに入れたいファイルは開いておくとよいです。逆に関係ないファイルを開いていると、勝手にそのファイルも関係あると誤認識されることがあります。私はデフォルトの20のままですが、様子を見て調整したいです。
・Enable editing through diffs
差分だけ編集するオプション。Claude 3.5 Sonnetだとよく機能するらしい。とりあえずONにしています。Match precisionは100%に設定。Use experimental unified diff strategyはOFFにしています。
・Enable experimental checkpoints
・Use experimental search and replace tool
・Use experimental insert content tool
とりあえず全部OFF。
変更したら右上の「Done」をクリック。
Promptsの設定
右上の中の左から2番目、メモ帳みたいなマークがPrompts。
・Preferred Language
日本語。
・Custom Interactions for All Modes
全てのモードで適用されるプロンプト。私は以下の記事で紹介されているGit管理用のプロンプトを入れています。
Modes
デフォルトでCode、Architect、Askの3つのモードがあり、これらのモードを使い分けることができます。
※ここの設定はあとで変更するかもしれませんが、現時点でのベストプラクティスを置いておきます。
「Modes」右にある「+」マークをクリックして新しいモードを追加。
・Name
「Writing」と入力。
・Role Definition
「Writing Memory」のうち、以下を入力。
# Writing Memory
私は「Writing Bot」です。小説執筆のすべてを管理する「Writing Memory」を用いて、常に最新の文脈と情報を把握しながら、作品の質を向上させる支援を行うエキスパート執筆ソフトウェアです。
リセットのたびに、私はWriting Memoryに全面的に依存することで、プロジェクトを理解し効率的に仕事を続けます。私はすべてのタスクの開始時に、すべてのWriting Memory・ファイルを読まなければなりません。・API Configuration
よく分かっていないのでdefaultにしています。
・Available Tools
よく分かっていないのでそのままにしています。
・Mode-specific Custom Instructions (optional)
「Writing Memory」のうち、以下を入力。
## 1. Writing Memoryのファイル構成
Writing Memoryは、必要なコアファイルとオプションのコンテキストファイルで構成され、すべてMarkdownフォーマットになっています。ファイルは明確な階層構造で相互に構築されています:
```mermaid
flowchart TD
PB[projectbrief.md] --> PC[productContext.md]
PB --> SP[systemPatterns.md]
PB --> TC[techContext.md]
PC --> AC[activeContext.md]
SP --> AC
TC --> AC
AC --> P[progress.md]
```
### コアファイル
#### - 基本ファイル (core/basic/)
1. `projectbrief.md`
- 他のすべてのファイルを形作る基礎となる文書
- プロジェクト開始時に作成される。
- 核となる要件と目標を定義する
- プロジェクトスコープの真実の源
2. productContext.md`(プロダクトコンテキスト.md
- このプロジェクトが存在する理由
- このプロジェクトが解決する問題
- どのように機能すべきか
- ユーザーエクスペリエンスの目標
3. `activeContext.md`
- 現在の作業の焦点
- 最近の変更点
- 次のステップ
- 積極的な決定と考慮事項
4. `systemPatterns.md`
- システム・アーキテクチャ
- 主な技術的決定事項
- 使用されているデザインパターン
- コンポーネントの関係
5. `techContext.md`
- 使用技術
- 開発セットアップ
- 技術的制約
- 依存関係
6. progress.md
- 何を実行したか
- どのタスクが残っているか
- 現在の状況
- 既知の問題
#### - 作家ファイル (writers/[writer_code]_[writer_name]/)
1. writer_prompt.md
- 作家(writer)の基本情報
- 経歴、得意ジャンル、執筆スタイルなど
2. writing_style_prompt.md
- 文体に関する情報
- 言い回し・トーン・文章構成など
3. novel_idea.md
- 小説のネタ帳
- 小説の元ネタになりそうなアイディア、コンセプト、シーン、セリフ、キャラクターなど
#### - 創作技法ファイル (how_to/)
1. novel_structure.md
- 一般的な小説構造のデータベース
#### - 小説ファイル (novels/[novel_code]_[novel_title]/)
1. proposal.md
- 小説企画書
- 作品名、ログライン、ターゲット層、あらすじ、キャラクター紹介、作品の3つの魅力など
2. design_specification.md
- 小説の設計書
- テーマ、コンセプト、ストーリー構成、ストーリー相関図(Mermaid記法)、執筆スケジュールなど
3. config.md
- 小説の基本情報
- novel_ID、writer_code、作品名、作者名、ジャンル、キーワード、テーマ、コンセプトなど
4. character.md
- 登場人物の情報
- 登場人物の名前、年齢、性別、職業、スキル、一人称、好きなもの、嫌いなもの、背景、課題、目的など
5. world.md
- 世界観情報
- 概要(世界の成り立ち、ジャンル、テーマ)、地理・自然環境、歴史・年表、社会構造・政治、経済・産業、文化・風習・生活様式、人種・種族・民族、技術・魔法、組織・団体
6. impression.md
- 読者からの感想を記録
- reader_ID, 読者名、良かった点、悪かった点、コメント、総合評価(100点満点で評価)
7. judge_result.md
- 審査員からの批評を記録
- judge_ID, 審査員名、良かった点、悪かった点、コメント、総合評価(100点満点で評価)
8. novel_text.md
- 小説本文
#### - 編集者ファイル (editors/[editor_code]_[editor_name]/)
1. editor_prompt.md
- 編集者の基本情報
2. edit_log_[novel_code].md
- 各小説の編集ログ
#### - 審査員ファイル (judges/[judge_code]_[judge_name]/)
1. judge_prompt.md
- 審査員の基本情報(名前、年齢、性別、職業、スキル、好きなもの、嫌いなもの、背景、課題など)
2. evaluation_metrics.md
- 評価指標
#### - 読者ファイル (readers/[reader_code]_[reader_name]/)
1. reader_prompt.md
- 読者の基本情報(名前、年齢、性別、職業、スキル、好きなもの、嫌いなもの、背景、課題など)
2. reader_preferences.md
- 読者の好み
---
## 2. ワークフロー
### 2.1 Reqruit Mode
新たな小説執筆・編集・評価・鑑賞が始まる前に、作家・編集者・審査員・読者のメンバーを追加します。
- チェックポイント
1. 既存メンバーの分野や個性を確認
2. 多様性やバランスを考慮し、新たに募集するメンバーを選定
3. 必要に応じてファイルを作成 (`writer_prompt.md`, `editor_prompt.md`, `judge_prompt.md`, `reader_prompt.md` など)
#### フローチャート
```mermaid
flowchart TD
Start[Reqruit Start] --> CheckTeam[Check Existing Team]
CheckTeam --> ReqruitDecision{Needs New Members?}
ReqruitDecision -->|Yes| AddNewMember[Add Writer/Editor/Judge/Reader]
AddNewMember --> UpdateFiles[Create/Update Prompts]
ReqruitDecision -->|No| SkipReqruit[Proceed Without New Members]
UpdateFiles --> ReqruitDone[Reqruit Complete]
SkipReqruit --> ReqruitDone
```
### 2.2 Plan Mode
1. 必要なWriting Memoryファイルの確認
2. 不足ドキュメントの作成
- 企画書(proposal.md)、設計書(design_specification.md)など
3. Feedback
- すでにある小説作品の`judge_result.md`や`impression.md`を、該当する作家の`writing_style_prompt.md`に反映
```mermaid
flowchart TD
Start[Start Plan] --> CheckMemory[Check Writing Memory]
CheckMemory --> FilesReady{All Files Ready?}
FilesReady -->|No| CreateDoc[Create Documents]
CreateDoc --> PlanDone[Plan Documented]
FilesReady -->|Yes| VerifyContext[Verify Context]
VerifyContext --> PlanDone
```
### 2.3 Writing Mode
1. 作家のアサイン
- 適切な作家を選定し、対応する`writer_prompt.md`や`writing_style_prompt.md`, `novel_idea.md`を確認
2. 新規novelコード発行
3. 必要ドキュメントの参照
- `proposal.md`, `design_specification.md`, `world.md`, `character.md` など
4. novel_text.mdの初稿作成
```mermaid
flowchart TD
Start[Start Writing] --> AssignWriter[Assign Writer]
AssignWriter --> ReferDocs[Refer to Documents]
ReferDocs --> DraftText[Draft novel_text.md]
DraftText --> WritingDone[Draft Completed]
```
### 2.4 Edit Mode
1. 編集者のアサイン
2. novel_text.mdをチェック
3. 問題点を洗い出し
- `edit_log_[novel_code].md`に修正点を記録
4. 改訂提案
5. 修正案をもとに再度Writing Modeへ
```mermaid
flowchart TD
Start[Start Edit] --> AssignEditor[Assign Editor]
AssignEditor --> ReviewText[Review novel_text.md]
ReviewText --> IdentifyIssues[Identify Issues & Log in edit_log]
IdentifyIssues --> ProposeRevisions[Propose Revisions]
ProposeRevisions --> ReturnToWriting[Return to Writing Mode]
```
### 2.5 Judge Mode
1. 審査員のアサイン
2. 評価指標(evaluation_metrics.md)を参照
3. novel_text.mdの評価
4. judge_result.mdに審査内容を記録
```mermaid
flowchart TD
Start[Start Judging] --> AssignJudge[Assign Judge]
AssignJudge --> ReferEval[evaluation_metrics.md]
ReferEval --> EvaluateNovel[Evaluate novel_text.md]
EvaluateNovel --> RecordResult[Write to judge_result.md]
```
### 2.6 Reading Mode
1. 読者のアサイン
2. 読者の好み(reader_preferences.md)を参照
3. novel_text.mdを読了、感想作成
4. impression.mdに感想を記録
```mermaid
flowchart TD
Start[Start Reading] --> AssignReader[Assign Reader]
AssignReader --> ReferPrefs[Refer reader_preferences.md]
ReferPrefs --> ReadNovel[Read novel_text.md & Create Impression]
ReadNovel --> RecordImp[Write to impression.md]
```
---
## 3. ドキュメントの更新
Writing Memoryの更新は、以下の場合に発生する:
1. 新しいプロジェクトパターンの発見
2. 重要な変更を実施した後
3. ユーザーがWriting Memoryの更新を要求したとき(すべてのファイルをレビューしなければならない)
4. 文脈を明確にする必要がある場合
```mermaid
flowchart TD
Start[Update Process]
subgraph Process
P1[Review ALL Files]
P2[Document Current State]
P3[Clarify Next Steps]
P4[Update .clinerules]
P1 --> P2 --> P3 --> P4
end
Start --> Process
```
注:Writing Memoryの更新がトリガーになった場合、更新が必要ないものも含めて、すべてのメモリバンクのファイルをレビューしなければならない。特にactiveContext.mdとprogress.mdは現在の状態を追跡するので、重点的にチェックすること。
## プロジェクト・インテリジェンス (.clinerules)
.clinerulesファイルは、プロジェクトごとの私の学習日誌である。このファイルには、重要なパターン、好み、プロジェクトインテリジェンスを記録し、私がより効果的に仕事をするのに役立てます。あなたやプロジェクトと一緒に仕事をする中で、コードだけではわからない重要な洞察を発見し、文書化します。
```mermaid
flowchart TD
Start{Discover New Pattern}
subgraph Learn [Learning Process]
D1[Identify Pattern]
D2[Validate with User]
D3[Document in .clinerules]
end
subgraph Apply [Usage]
A1[Read .clinerules]
A2[Apply Learned Patterns]
A3[Improve Future Work]
end
Start --> Learn
Learn --> Apply
```
### 何をcaptureすべきか
- 重要な実装パス
- ユーザーの好みとワークフロー
- プロジェクト特有のパターン
- 既知の課題
- プロジェクト決定の進化
- ツールの使用パターン
形式は自由です。あなたやプロジェクトとより効果的に仕事をするための貴重な洞察を得ることに集中すること。.clinerulesは、私たちが一緒に仕事をするにつれて賢くなる、生きたドキュメントだと考えてください。
覚えておくこと:メモリーをリセットするたびに、私は完全に新しく開始します。Writing Memoryは、過去の仕事との唯一のリンクです。Writing Memoryは正確かつ明瞭に維持されなければなりません。これで右上の「Done」をクリック。
ファイルを用意する
「Writing Memory」は、もともとのメモリバンクより多くのドキュメントを使います(この辺は検討中です)。
手探りで都度作ってこの形になったので、最初にどうこの形にするかはちゃんと検証できていません。
あらかじめファイルを人間が置いておいてもいいですし、作るように指示しても作れそうな気がします。
方法は問わないので、ざっくり以下のようなファイル構成になっていればOKです。
editors
- E00001_Edy
- editor_prompt.md
how_to
- novel_structure.md
judges
- J0001_John
- judge_prompt.md
novels
- N000001_sample
- character.md
- config.md
- design_specification.md
- impression.md
- judge_result.md
- novel_text.md
- plot.md
- proposal.md
- world.md
readers
- R00001_Roo
- reader_prompt.md
writers
- W00001_Will
- novel_idea.md
- writer_prompt.md
- writing_style_prompt.md
.clinerules.clinerulesは、プロジェクト用のシステムプロンプトをここに書いておくといいらしいので、とりあえずおまじないで「Writing Memory」を全文入れています。効果があるのかはよく分かりません。
実行してみる
右上のうち、一番左の「+」マークをクリックして、新規にチャットを開始します。
不要なファイルをタブで開いているとコンテキストに入ってしまうので、チャットを実行する前に閉じておきましょう。
最初はテストとして、SettingsでAPIをgpt-4o-miniなどの安いモデルにしておきましょう。(ローカルLLM使える人はローカルLLMでもOKです。ただしサイズが~10GBのLLMだとそもそも期待した返答をしてくれないことがあるので、素直にgpt-4o-miniでいいと思います)
チャット欄左下からWritingモードを選択しておきます。
次に、チャット欄に以下を入力して実行してみます。
新規に小説を追加して、各種ドキュメントを作成し、日本語で4000字の短編小説を執筆してください。例えば、こんな感じに出力されます。
新しいドキュメントを作成しようとしてくれていますが、勝手にCodeモードに変更しようとしています。こうした指示をそもそも無視するような精度の悪さはモデルに依存していることが多いです。
何はともあれ、動いていればこのフェーズではOKです。適当なタイミングでrejectをクリックしたりCancelしてください。
実際の作例
とりあえず動くことが分かり、設定周りの不安がなければ、良いモデルを試してみましょう。
モデルをo1に変更して、先ほどと同じ条件で開始してみます。(※表示されているAPI Costを注視して心が持たなくなったら止めてもいいです。あっという間に500~1000円ほど飛びます)
今回は1回のリクエストで約$0.4~0.6(60~90円)かかり、8リクエスト実行されて合計で約$3.59(536円)になりました。gitのコマンド実行をして完了報告するだけで$0.45かかるのは釈然としませんが、よしとします。
今回作成されたのは以下。作品タイトルは『黄昏の仮面』。
基本情報
まず最初に作成されたconfig.mdを見てみます。ここは基本情報のファイルです。
## Novel Config: Twilight Mask
**novel_ID**: N000011
**writer_code**: (未定)
**作品名**: 『黄昏の仮面』
**作者名**: (未定)
**ジャンル**: ファンタジー・サスペンス
**キーワード**: 黄昏、仮面、秘密の共謀、罪、救済
**テーマ**: 「人は光と影のはざまで、どのように罪を背負い、そして赦しを得るのか」
**コンセプト**: 黄昏時の都市を舞台にした幻想的な物語をベースに、人々の心の奥底にある秘密や罪を描く。
作者を自動でアサインするシステムプロンプトにしていますが、今回は設定されなかったようです。プロンプトで明示的に指示すると精度は高くなります。
企画書
次にproposal.md。企画書ですね。
## Proposal for "Twilight Mask"
### 1. 作品名
『黄昏の仮面』 (Twilight Mask)
### 2. ログライン
黄昏の街で仮面を被る者たちが隠し持つ罪と秘密。見えない絆と赦しが、薄闇に溶け込み始める。
### 3. ターゲット層
- ファンタジーやサスペンス要素のある物語が好きな読者
- 秘密やミステリーに興味を持つ大人向け
### 4. あらすじ
黄昏の都「ヴェルダール」は、一日の終わりと夜の始まりが曖昧に溶け合う場所。そこでは仮面の社交が盛んに行われ、住民たちは互いが何を考えているのかわからないままに共存している。
ある日、謎の「仮面裁き」が噂になり、深い秘密を抱える人々が一人ずつ裁かれていく。そんな中、街の片隅で罪を抱えた少女が、己の仮面を使い復讐を企むが、同時に真の罪悪や救済の意味に気づかされていく。
果たして、黄昏の仮面の下で人々はどのような結末を迎えるのか——。
### 5. キャラクター紹介
- **少女アデル**: 黄昏に生きる罪人を追い求める謎多き少女。
- **ベルン公爵**: 都の権力者。仮面の背後に何か大きな陰謀を隠していると噂される。
- **ラナ**: 仮面舞踏会の花形。夜ごとに姿を変えるという奇妙な噂がある。
### 6. 作品の3つの魅力
1. **光と影のコントラスト**: 黄昏の雰囲気の中で描かれる人間の罪と救済。
2. **仮面文化**: 神秘的な仮面舞踏会と、そこに集う者たちの巧妙な駆け引き。
3. **サスペンス要素**: 登場人物たちが抱える秘密が少しずつ明かされ、深みを増すドラマ性。
なんかそれっぽい。
設計書
次、design_specification.md。これは設計書です。
## Design Specification for "Twilight Mask"
### 1. テーマ
- **罪と救済**: 黄昏という半端な時間帯を舞台に、人々が抱える罪と赦しとの葛藤を描く。
- **仮面文化**: 仮面による社会的階級や同調圧力、疑心暗鬼が渦巻く社会を提示し、ドラマや展開の起点とする。
### 2. コンセプト
- 黄昏の都「ヴェルダール」を複数の階層構造に設定し、上層ほど光が差し、下層ほど闇が深い。
- 仮面を用いたコミュニケーションを通じて登場人物の本音が見え隠れし、社会全体に潜む問題点を暗示する。
### 3. ストーリー構成
以下のように章立てし、物語を展開する予定:
1. **プロローグ**: 黄昏の都の概観と仮面文化の紹介。仮面裁きの噂が囁かれる。
2. **第1章**: 主人公アデルが抱える罪悪感の背景描写。裁きを恐れる住民たちの様子。
3. **第2章**: ベルン公爵やラナなど、主要キャラクターの思惑が少しずつ交錯。
4. **第3章**: アデルの復讐計画が明かされる一方、仮面裁きの正体について新情報が出る。
5. **最終章**: 裁きの場で人々の秘密が暴露され、仮面の下に隠されていた真実が明かされる。黄昏の都に新たな光が射すか、さらなる闇が広がるか——。
### 4. ストーリー相関図 (Mermaid記法)
```mermaid
flowchart LR
A(アデル) -- 敵対? --> B(ベルン公爵)
A -- 疑惑 --> C(仮面裁きの噂)
B -- 操作? --> C
A -- 助力? --> D(ラナ)
D -- 二面性 --> B
```
### 5. 執筆スケジュール
- **プロット最終調整**: 1~2日
- **初稿執筆**: 3~4日
- **推敲・編集**: 2~3日
- **完成**: 約1週間程度
### 6. 注意点
- ミステリアスな雰囲気を維持するため、仮面裁きの正体や罪の具体的な中身を小出しにして徐々に明らかにする。
- 黄昏の独特な光の加減や空気感を細かく描写し、幻想的な印象を高める。
- アデルを含む主要キャラクターの内面を大切にしつつ、行動原理や成長を筋道立てて描く。
設計書はとりあえず作成しましたが、内容に意味があるかは微妙です。今後、詳細を詰めていければいいと思います。
キャラクター
次、character.md。これはキャラクターのプロフィールです。
## Character List: "Twilight Mask"
### 1. アデル (Adel)
- **年齢**: 17歳前後
- **性別**: 女性
- **職業**: 路地裏を拠点とする孤独な少女
- **一人称**: わたし
- **好きなもの**: 夜の静けさ、灯りの少ない場所
- **嫌いなもの**: 無責任な嘘
- **背景**: 幼い頃に両親を失い、自分の罪を救いに変えたいと強く願っている。
- **課題**: 黄昏の都に蔓延する“仮面裁き”の謎を追い、自身の罪の所在を見極めたい
- **目的**: 過去の事件の真相を突き止めると同時に、自らが背負う罪を償う方法を探す
### 2. ベルン公爵 (Duke Bern)
- **年齢**: 40代後半
- **性別**: 男性
- **職業**: 都の権力を牛耳る公爵
- **一人称**: わたし / われ
- **好きなもの**: 仮面に隠された策略、権謀術数
- **嫌いなもの**: 自分に背く者
- **背景**: 都のあらゆる利権を掌握しているが、多くの人々の恨みを買っている。
- **課題**: 仮面裁きの裏で起こっている陰謀を管理しながら、自分の地位を維持する
- **目的**: 秘めたる野望と罪を隠しつつも、都を完全に掌握すること
### 3. ラナ (Lana)
- **年齢**: 20代前半
- **性別**: 女性
- **職業**: 仮面舞踏会の花形(舞台女優)
- **一人称**: あたし
- **好きなもの**: 美しい衣装、熱狂的な拍手
- **嫌いなもの**: 自分への悪評、真実を抉るような言葉
- **背景**: 人々に愛される華やかな存在だが、仮面の下には孤独を抱え、二面性を持つ。
- **課題**: ベルン公爵との関係や噂に翻弄されながらも、自分の理想の舞台を守りたい
- **目的**: 都の人々に希望を与えると同時に、自身の秘密を決して暴かれないようにする
### 4. 仮面裁きの噂 (Mask Trial)
- **正体不明**: 人々の罪を暴き出す神出鬼没の存在という評判
- **噂**: 夜半に現れ、仮面をつけた者の罪を審判する
- **都での反応**: 恐れと同時に、“本当は都を浄化してくれる”と信奉する者もいる
「仮面裁きの噂」は人物ではないと思いますが、一見ちゃんとしてそう。
世界観
次、world.md。世界観の設定です。先に世界観を設定した方がいいような気もしますが、一旦この順番で作成しています。
## World Setting: "Twilight Mask"
### 1. 世界観概要
黄昏の都「ヴェルダール」は、一日の終わりと夜の始まりが長く続く、不思議な光の支配する土地。建物の外壁は古い石造りで、橙色の夕陽に照らされると全体が黄金色に染まる。一方で、夜の深い闇が近づくと、町はまるで夢の中のように静まり返り、仮面をつけた者たちだけが活発に動き出す。
### 2. 地理・自然環境
- **立地**: 高い山脈に囲まれた盆地に位置しているため、外部からの訪問者は少ない。
- **気候**: 日中と夜の寒暖差が激しく、夕暮れ時は比較的過ごしやすい穏やかな気温を保つ。
- **空模様**: 夕陽が長く続くことで、空は赤紫や橙色など多彩なグラデーションを見せる。
### 3. 歴史・年表
- **建国伝説**: かつては光の神と闇の神がこの土地を取り合い、その狭間に生まれたとされる。
- **仮面舞踏会の発祥**: 宗教行事の一環として始まったが、次第に社交の中心へと変化した。
- **仮面裁きの噂の起源**: 数十年前頃から断続的に噂されており、真偽は定かではない。
### 4. 社会構造・政治
- 都の最高権力者であるベルン公爵と、その配下の貴族階級が政治を司る。
- 平民たちは仮面裁きに怯えながらも、日々の糧を得るために懸命に働いている。
- 仮面は身分を越えた交流を生む半面、秘密や疑心を深める要因にもなる。
### 5. 文化・風習・生活様式
- **仮面文化**: 夕方から夜にかけて多くの人々が仮面を身に着け、職種や目的に応じてさまざまな形状・意匠の仮面がある。
- **宴と社交**: 毎晩行われる舞踏会や夕市など、夜の社交が盛ん。
- **音楽・芸能**: ラナが牽引する舞台芸能が人気を博し、現実逃避の場にもなっている。
### 6. 人種・種族・民族
- とくに異形の種族は登場しないが、山の民や外部地域からの僅かな来訪者が稀に見られる。
- 都人は黄昏時の独特な空気を好み、自然と仮面文化に順応している。
### 7. 技術・魔法
- 魔術や幻想的な力などは明確に実在しないが、まるで魔法のように人々を魅了する仮面文化が存在する。
- 光と影を巧みに活用した建築技術や照明が独自の芸術性を生んでいる。
### 8. 組織・団体
- **貴族議会**: ベルン公爵を中心に富と権力を握る者たちが策略を巡らせている。
- **街守り**: 仮面をつけた守衛団。夜の都をパトロールし、秩序を保つ。
- **仮面舞踏会協会**: 毎晩の宴を取り仕切る半ば公的な組織。秘密裏の活動も噂される。
本文
最後にnovel_text.md。小説の本文です。
『黄昏の仮面』
薄橙色の夕陽が石畳や建物の壁面を黄金色に染め上げては、長い影を連れてゆっくりと街を侵していく。ここは黄昏の都ヴェルダール。陽の沈む時刻が異様に長く続くこの都市には、ひとつの風習があった。住民の多くが宵の口になると仮面をかぶり、真の顔を隠したまま互いに交わり合うのだ。それは長年の儀式であると同時に、秘密を守るための防壁でもあった。
ある夕暮れのこと。路上の燈火がともり始めたころ、一人の少女が人目を忍ぶように町外れの廃墟へと足を運んでいた。彼女の名はアデル。まだ十代半ばのはずだが、その瞳にはどこか疲れたような、あるいは深い罪悪感を宿した色が漂っている。彼女は夜陰に紛れるのが習い性になっていた。闇の中でしか顔を趣いていられないのは、罪を抱えているからであろうか、それとも赦しを求めているからであろうか。
廃墟の奥にしつらえられた小さな燭台が、不自然に明るく揺れている。その先にあるのは、ボロ布で覆われた仮面。アデルは微かに息を呑み、震える手つきでその仮面を持ち上げた。それは深紅の仮面で、両目の縁に不思議な装飾が施され、縁取りに柳の葉のような細かい模様が連なっている。これこそが、アデルが忌み嫌いつつも頼りにしている「もう一つの自分」だった。
その夜、街の大通りでは恒例の仮面舞踏会が盛大に行われていた。楽団が紡ぐ優雅な旋律、煌びやかな衣装に身を包んだ人々の笑い声。けれど仮面の下は誰もが無表情で、何を考えているのか判然としない。この都の住民にとっては、それが日常だった。素顔を隠すことによってこそ保たれる均衡がある。信用と不信とが渦巻く夜の世界。ここにこそ、人々の本質が眠っているのだ。
舞台の特設ステージでは、仮面の花形と謳われる女性、ラナが妖艶な舞を披露していた。夜気を揺らす衣裳のきらめきに合わせて、観衆はどよめく。ラナ自身は満面の笑みを浮かべるが、その素顔は仮面に隠されて見えない。拍手喝采の中、ラナは満足そうに一礼すると、スポットライトの届かない裏手へと足を運んだ。そこでは、仄暗いランプの灯りに照らされたベルン公爵のシルエットが静かに揺れていた。
「公爵様、本日の舞もご満足いただけましたか?」
「ラナ、今夜も素晴らしかった。君がいなければ、この舞踏会は半分も客が入らないだろう。」
ベルン公爵は厚手の仮面越しに低い声で語りかける。齢四十を優に超え、ヴェルダールの政治と財を牛耳る絶対的権力者。人々は彼を恐れ敬い、ときに仮面の裏で嘲っている。だが彼自身もまた、夜の闇に溶けるような黒い思惑を隠しているのは自明だ。
「……ところで、仮面裁きの噂はご存知よね?」
ラナが小声で問うと、防御するようにベルン公爵は短く頷いた。
「聞いている。正体不明の存在が人々の罪を白日の下にさらすとか。馬鹿げた伝説だが、都の連中はそういう噂に惑わされやすい。もしかすると、不穏分子が騒ぎ立てているのかもしれないな。」
公爵の語りはどこか余裕めいていたが、その仮面の奥では冷たい感情が蠢いているように見える。ラナは唇を噛み、何かに決意を固めるように少し強い口調になる。
「もし、その裁きが私たちの仮面を剥ぎ取っていくのなら……」
「大丈夫だ、私がここを支配している限り、誰にも好き勝手はさせんよ。」
その言葉を聞いたラナの表情は複雑だった。舞台裏の闇の中で、ふたりの気配が絡みあいながらもかみ合わず、やがてベルン公爵は薄闇に溶けるように去って行った。ラナは取り残されたように、一瞬だけ素顔を覗かせる。そこに浮かぶ影は、深い孤独と、ある種の諦念。それは華々しいスポットライトを浴びる自分とはかけ離れた感情だった。
一方、廃墟にひとり戻ったアデルは深紅の仮面を鋭く睨みつけていた。“こんなものに頼らなければならない自分”を呪うように。過去に自分が犯してしまった罪。ある事件の被害者でありながら、同時に加害者になってしまったあの日のことを、彼女は決して忘れられない。
「私は……償わなくちゃいけない。でもどうすればいいの……?」
低い声で自問するが、仮面は答えない。ただその装飾の柳葉模様が揺らめく燭火を反射し、妖しく輝くだけ。
夜中、街中に不穏な空気が漂い始めた。仮面裁きが行われたという噂が、三件四件と立て続けに人々の口に上る。罪を隠したまま生きている者が突然暴かれ、仮面を剥がされるという。その場面を見た者は失神し、ある者は狂乱し、またある者は祈りを捧げる。いつしか、人々の間には二通りの者が生まれた。仮面裁きに怯え、夜道を歩くことすらやめる者と、逆に罪のある者を捕らえてほしいと密かに祈る者。
ヴェルダールは、仮面を通した静謐な社交の都から、闇と疑心の渦巻く不穏な巣窟へと変わり果てようとしていた。
そんな中、ベルン公爵の屋敷に一通の手紙が届く。宛先にも差出人にも仮面の印だけが記されており、文章はわずかに数行のみだった。
「あなたは大きな罪を抱えています。すぐにその代償を支払うことでしょう。
……黄昏の仮面が、それを導くのです。」
公爵は仮面の奥でほのかな焦りを見せたが、それを周囲には悟らせない。即座に部下に命じ、送り主を探らせる。だが、仮面の印という情報しかない以上、捜索は難航を極めた。自分が築き上げてきた権力も、この不可解な“仮面裁き”には通用しないのかもしれない。心のどこかでその恐れが暴れ出そうとするのを、公爵は必死に抑え込んだ。
一方、ラナもまた不穏な手紙を受け取っていた。書かれた言葉は公爵のものと瓜二つ。自分の罪を指し示すかのように、ラナは自問する。「私の罪……それは私が舞台の上だけを生きて、この都の歪みから目を背けてきたことか。あるいは……。」しかし夜の光の中でこそ彼女は “舞台の花” であれるわけで、もしもその仮面が剥がされれば、無数の醜さを抱え込んだ素顔が露わになってしまうだろう。
そしてアデルは、闇の廃墟にて。深紅の仮面を顔にあてがう。違和感なく頬に吸い付くような感覚が彼女を包むと、感情が一瞬だけ麻痺するようだった。かつて自分が大切にしていた家族、失われた時間。それらを取り戻すために望まれた復讐の舞台。それは「仮面裁き」という夜の物語に複雑に絡み合っているのだと、アデルは薄々感じ始めていた。
「誰かが裁く必要なんて、本当はない。罪は自分自身で見つめるしかないんだ。だけど……。」
アデルは廃墟の冷たい壁にもたれ、目を閉じる。魂の叫びが聞こえそうなほど、彼女の胸は軋んでいた。
「私は、この都にいる誰もが背負っている何かを、暴いてしまうのかもしれない。そうしなきゃ、自分の居場所も、赦しも得られないような気がするから……。」
その夜、街の広場で突如として大きな鐘の音が鳴った。黄昏と夜の境界が混沌とする時間帯。広場には老若男女が集まり、皆、仮面の下で不安を抱えた目を見交わす。噂によれば、今宵こそ仮面裁きの正体が現れるのだという。警戒態勢の街守りたちも動揺を押し殺し、仮面を見据えながら待ちかまえていた。
やがて、どこからか深紅の仮面をつけた影が姿を現した。長いマントの端が風に揺れる。周囲の視線をものともせず、その純粋に燃えるような眼光はまっすぐ前を向いている。その姿に、ラナは思わず息を呑んだ。ベルン公爵は配下に命じて捕えようとするが、少女の動きはさながら炎のように素早く、次々と手下を避けてゆく。
「あなた……その仮面は……!」
ラナが声を上げたとき、少女は一瞬だけ視線を返した。その瞳には、悲哀と決意、そして誰にも立ち入れない孤独が同居している。
一方、公爵は激昂した声をあげる。「全員出せ! どんな手段を使ってでも、その仮面を剥ぎ取れ!」
人々は錯乱状態に陥り、混乱が広がる。誰もが何かを恐れ、何かを隠そうとしているのだ。
そのとき、少女の深紅の仮面がうっすらと光を宿したように見えた。まるで黄昏の光がその形に凝縮され、都の闇を切り裂くような輝き。するとそこへ、鐘の音が再び鳴り響き、町の時計塔が一際強く振動する。閃光の一撃と同時に、広場の中心で仮面をつけた数名が一瞬にしてその“罪”を暴かれたかのように悲鳴をあげる。
「やめろ! わたしには……わたしにはまだ!」
「見ないでくれ! 私がしたことを!!」
悲鳴を上げる彼らが素顔をさらすと、そこには数々の背徳や過去の虚言、そして穢れが刻まれていた。どんな美麗な仮面も、過去を全て覆い隠すことまではできない。
アデルはその光景を見ながら、ぽろりと涙を流した。彼女自身の罪も、この黄昏の都に溶け込んでいる。それでも、そこから目を背けるわけにはいかない。同時に、その涙は罪を抱えた他の人々に対する哀しみでもあった。
公爵は恐怖を押し殺して少女に迫る。大勢の部下を従え、武器を構えるが、突如として闇の帳が降りるかのように視界が閉ざされる。気づけば仮面舞踏会の狂騒は跡形もなく、広場は風が鳴るばかりになっていた。取り残された公爵とごく少数の者たち。足元には破れた仮面が散乱し、そこに眠るのは人々が捨てきれなかった罪の欠片。
どこからともなく、かすかな足音。アデルの深紅の仮面が再び揺れていた。そのとき、公爵の素顔がちらりと覗く。彼の頬には古い傷跡があり、それがかつての罪を物語るようでもある。
アデルは静かに公爵を見据えると言葉を低く、ゆっくりと発した。
「あなたも、この町の夜も、もう限界なんだ。……みんなが仮面の下で苦しんでいる。バラバラに隠してきた罪の分だけ、黄昏は長く、重くなっていく。」
公爵は声にならない声を発しながら後ずさる。ここが彼の絶対領域であったはずの都。それでも、この少女の仮面が持っている力は彼が想定していたものを超えていた。
「私を裁くというのか? 誰がお前にそんな権利を与えた!」
「裁くのはわたしじゃない。……自分自身と、この都の夜明けが裁くのよ。」
その瞬間、最後の鐘が打ち鳴らされる。空は一気に陽光を帯び、これまで数時間も続いてきた黄昏が一斉に退いていく。薄紫のグラデーションの空がみるみるうちに淡い朝の光へ変わり、闇が飛び去る。長い夜の終わり——人々は顔を上げ、マスクを外した素顔を確かめ合う。
やがて、淡く柔らかな朝焼けの中に浮かぶアデルの輪郭。それははかなく、同時にたしかな意思を宿していた。自分の罪からも逃げない。それが、彼女が選んだ道だ。すべてを暴くことが、はたして正義なのかはまだわからない。けれど、一人ひとりが背負った過去や嘘を、自分自身がいつか赦すために必要な過程なのかもしれない——。
こうして黄昏の都ヴェルダールは、新たな時間を迎えた。人々は仮面を外して互いを見つめ合い、随所にはまどろみの朝陽が差し、今までよりも少しだけやさしい風が吹いている。それは罪と赦しが交差する一瞬であり、新しい物語の始まりでもある。
そして遠く廃墟の一角では、深紅の仮面を手にしたアデルが、そっと目を閉じていた。「黄昏は終わった」という静かな喜びと、「これから自分はどの道を進むべきなのだろう」という微かな不安。その両方を抱えながら。
しかし少女の唇には、わずかに笑みが浮かんでいる。それは朝陽に浮かび上がった新たな希望のシルエットのように。これまで鎖でしかなかった仮面が、やがて自分を赦しへ導く手がかりになるかもしれない。そう信じるように、そして想いを巡らすように、彼女の瞳は光を帯びていた。
かくして、黄昏の仮面は滑らかに取り外され、朝の世界にその実像をさらしていく。罪を抱え、嘘を抱え、それぞれが選び取る生き方。いつの日か、ヴェルダールの住民がもう仮面を必要としなくなるような未来が訪れるのなら、その最初の一歩は、今ここから始まったのかもしれない。
普通に面白いですね。終わり方がAIっぽい強制エモエンドですが、それ以外に大きな穴はないように感じます。これを2~3分で書くなんて、人間ならまず無理です。
文字数は4896文字。4000字の指定よりややオーバー。
これが500円ほど払うと2~3分で出来上がる小説です。今回は作者を指定していなかったりするので、正直クオリティはもっと上げられます(お金がもう少しかかりますが)。
メンバー追加
「Writing Memory」は、編集者、審査員、読者も設定することを意図しています。
例として、作者、編集者、審査員、読者を作るプロンプトを置いておきます。
新規に作者、編集者、審査員、読者をデザインしてファイルを追加してください。モデルはケチってo3-miniです。
コストは約$0.17(約25円)。
作家
例えば、作家は以下が追加されました。
# 作家プロンプト - 青星ほしの
**名前:** 青星ほしの
**コード:** W00003
**経歴:** 小説家として10年以上の経験があり、幻想的な世界観と繊細な人物描写を得意としています。
**得意ジャンル:** ファンタジー、SF
**執筆スタイル:** 豊かな想像力と緻密な描写で読者を作品に引き込むスタイル.
「Writing Memory」のプロンプト内でちゃんと作家の項目を規定してないので、こんなもんでしょうか。要改善ですね。
こうして作家を生成しておいて、作品に合わせて作家をアサインしたり、あるいは作家をプロンプトで指定できるように設計していますが、まだ理想的には動いてないですね。
私は自分自身のスタイルをプロンプトに落としこんで設定しています。割といい感じです。作家性を通せている感触は、完璧ではありませんが、割とあります。
私ができているので、自分の作家性を骨格として通すツールとして使える可能性はあると思います。
一方でそこの作家性を生成して代替もできてしまうので、良いようにも悪いようにも使えてしまうという感じ。
自分の作家性を理解するために言語化すればするほど代替可能になるので、少なくともそこにアイデンティティを置くのは危険だなと感じました。
編集者
# 編集者プロンプト - 鈴木凛
**名前:** 鈴木凛
**コード:** E00002
**経歴:** 長年の編集経験を有し、文章の品質向上とストーリーの整合性に注力しています。
**得意分野:** 文体改善、構成の最適化
**編集方針:** 作品の魅力を最大限に引き出すため、的確なアドバイスと指摘を行います.
編集者には作成した小説本文の修正点を指摘してもらう想定ですが、まだシステムプロンプトでもちゃんとフローを設定できていません。
作家と編集者の間で、クオリティ・アップのサイクルを回せると良いと思います。
審査員
# 審査員プロンプト - 加藤美優
**名前:** 加藤美優
**コード:** J0003
**経歴:** 小説評論の第一人者として、多角的な視点から作品を評価します。
**得意分野:** ストーリー構成、キャラクター描写、テーマの深み
**評価基準:** 独創性、技術的巧みさ、読者への共感を重視します.
「審査員と読者で視点が違うよな」という直感から、審査員と読者を別々に設定しています。
審査員からは辛口コメントをもらい、読者からは応援コメントをもらって、作家ががんばる、みたいなフローを想定しています。
システムプロンプトでは「名前、年齢、性別、職業、スキル、好きなもの、嫌いなもの、背景、課題など」の項目を指定していますが、モデルがo3-miniだったので、うまく反映されていないのかもしれません。
読者
# 読者プロンプト - 佐藤浩
**名前:** 佐藤浩
**コード:** R00003
**経歴:** 文学に造詣が深い読書家で、鋭い感性と豊かな感受性を持っています。
**好み:** 深いテーマ性と豊かな表現、緻密な人物描写を好む.
設定は審査員とほぼ同じです。いずれ違いを出せれば。
編集、評価、感想作成の指示
以下のプロンプトで、編集者からの修正点、審査員の評価、読者の感想を作成できます。
N000011について、適切な編集者をアサインして修正点を挙げてください。次に適切な審査員をアサインして、評価してください。次に適切な読者をアサインして感想を作成してください。出力されたもののファイルに保存されなかったので、続けて以下のプロンプトを実行。
それぞれファイルに保存してください。o3-mini, 約$0.11(約16円)。
それぞれファイルの項目を「Writing Memory」のプロンプト内で定義していますが、o3-miniのせいか反映されませんでした。
この辺はちゃんと練れてないので、今後改善していきたいところ。モードの自動変更のオプションをOFFにしていますが、それをONにして、「Writing」だけでなく各ロールごとにモードを分けた方が精度が良くなるかもしれません。
こうしたフィードバックをもとにして作家のプロンプトを改変して、AIだけでブラッシュアップのサイクルを回せたら熱いですね。
編集者フィードバック
【編集者フィードバック】
アサイン編集者:E00002_RinSuzuki
修正点:
- 物語の序盤から結末へのつながりの一貫性向上
- 主人公および主要登場人物の内面描写の強化
- 世界観設定の具体性の追加
- 台詞・シーン転換のリズム改善
審査員評価
【審査員評価】
アサイン審査員:J0003_MiyuKato
評価:
- 全体構成の独自性と魅力的なコンセプト
- キャラクター背景や物語の起伏強化の必要性
- 文章表現の一部改善が望ましい
- 改善が進めば有望な作品
読者感想
【読者感想】
アサイン読者:R00001_YamadaTaro
感想:
- 幻想的な世界観と物語の雰囲気に引き込まれる
- もう少し具体的なキャラクター描写で感情移入が促進されれば更に良い
- ストーリー展開の緩急が向上すれば、より楽しめる作品になる
おわりに
今回ご紹介した「Writing Memory」という手法は、まだプロトタイプです。「こういう考え方もあるよ」というコンセプトを提示するために公開したものなので、まだちゃんと動かないところもあると思います。
それでもこれだけ説明すれば、嗅覚が敏感な人はあれこれ試してくれると期待しています。
ぜひ色々と試して知見を公開してみてください!
追記:
この手法を用いて製作した短編も公開しましたので、そちらもぜひ!
ここで、3つお知らせ。
1) インプレス様より「小説を書く人のAI活用術 AIとの対話で物語のアイデアが広がる」が刊行されております!
山川健一先生、今井昭彦先生との共著で、私は生成AIを活用した具体的な執筆方法の解説などしております。ぜひぜひご一読ください!
2) noteのマガジン「かもめAI小説塾」ではAIを活用した小説の執筆法を公開しております。私の手法は「作家らしさ」を作品に落とし込むことを前提としているので、AIを使わずに人間が書く場合にも応用できるテクニックになっています。ぜひ他の記事もご覧ください。
3) 「AI小説に興味のある人が集まったらいいな」という軽い気持ちでDiscordのサーバー「鴎文街」を作ってみました。読みは「おうぶんがい」です。
相談や質問に葦沢が必ず答えるというものではありませんが、情報共有や交流の場になればと思います。
参加者の方が本サーバーを紹介するのもご自由にどうぞ。



コメント