Vol. 01
2026.05.18
2026.04.28 ZENN // TECH

StoryForge: ローカルLLM搭載の小説執筆アプリを、コードを書かない設計職がAIと作った話

ORIGIN: ZENN.DEV READ ORIGINAL

はじめに

いつものスタイルで作った最新作「StoryForge」——ローカルLLM搭載の小説執筆デスクトップアプリ——の開発を通じて気づいたことを書こうとおもう。


最近話題のChatGPT images 2.0にて作成。えっぐい。
仕様壁打ちしてたからその文脈でBOOTHで目を引く画像作ってって言ったらこれ。
もうある意味で怖い。怖すぎる…

作ったものはコチラ

https://ena-dri.booth.pm/items/8276733


StoryForgeとは

StoryForgeは、ローカルLLMを搭載したTauri製の小説・ノベルゲーム執筆アプリです。

  • キャラ設定・世界観・あらすじをAIに常に参照させながら執筆できる
  • 校正・相談・エクスポートまで同じ画面で完結するので、創作に集中できる
  • インターネット不要、作品データはローカルに保存されるので安心
  • TiranoScript形式への出力で、 ノベルゲーム制作にもそのまま使える
  • 各種プレビューに対応してるので、 書きながら見た目を確認できる

「AIに書いてもらう」ツールではなく、「AIと一緒に書く」っていう俺のルーツをそのまんまに目指して作ることにした。


なぜ作ったか

自分で使いたかったこれに尽きる。
クラウドAIに都度設定を読み込ませるのも手間だし、そもそも自分の作品設定をクラウドに投げるのがちょっと抵抗があるという気持ちもあって、困っていた。
そこでGemma 4っていうコンテキスト量が長大なモデルが登場したのをキッカケに、ほんなら創るかぁ!ってなった次第。

キャラ名.mdやworld.md(世界観.md)を読み込ませて執筆を手伝ってくれる素敵な相棒が誕生したのである。


技術スタック選定

なぜTauri/Rustか

軽さで選んだところはある。
Tauri/Rustはネイティブアプリに近い軽快さで、ローカルLLMを動かすのに向いてると思った。
AI全盛期(?)、技術スタックが選び放題なのは凄い時代だと思う。

なぜローカルLLMか

理由は3つ。

1つ目は、作品データをクラウドに送りたくない。なんかやだ。

2つ目は、ランニングコストをゼロにしたかった。API通すのはそもそも1個目の理由と被るし、レスポンスの速さより優先したいものがある。

3つ目は、買い切りで販売できること。サブスク不要で完結するプロダクトにしたかったので、ユーザーも月額を気にせず使えるのが魅力だと思った。

llama.cppのOpenAI互換エンドポイントを使えば、フロントエンドからは普通のAPI呼び出しとして扱えます。


「発想と意思決定は自分、実装はAI」といういつもの開発スタイル

Claude / ChatGPT:設計・仕様整理・壁打ち
Claude Code / Codex:実装・機能追加
Gemini:DeepResearch・UIアイデア
と役割分担して進めた。
特にChatGPTは壁打ち相手として思いの外優秀で、今回の開発の核心でもある。


詰まったポイントと解決

30秒タイムアウト問題

llama-serverへのリクエストがデフォルトの30秒でタイムアウトしてた。小説のような長文生成では当然足りんので、600秒に延長してPowerで解決。自分で使うと言いながら、非エンジニア目線で考えると確かにそうだよな。誰しもがバカデカVRAMなんて積んでないんだという。
ローカルLLMを使う場合、タイムアウト設定は最初に確認すべきポイントだと思った。

editorStoreの肥大化

機能追加を繰り返すうちに、editorStoreが単一の巨大ファイルに。Slice分割のリファクタリングは技術的負債として早めに対処した方が良かったと思う。反省はしている、後悔はしていない。(動けばよかろうなのだを地でいくインディー開発者)
AIが既存コードを読んで実装するスタイルだし、コードの見通しが悪くなると出力品質が落ちる傾向があるから、なんでもAIに任せる前に相談する癖は付けてもいいなと思う。

ワイ「リファクタしたほうがいい?」
Claude Code「先にこの機能追加したあとに安全にリファクタする方がいいです」
ワイ「ほんならそうしよか」

CodeMirrorをあとからぶち込んだ

校正機能をブラッシュアップする中で、既存のtextareaではハイライトが弱いことに気づき、CodeMirrorを導入しようとした。
しかし、Storeが肥大化していたため、スムーズに組み込めず、ここで初めてリファクタを決断。
結果、リファクタ後にCodeMirrorをスロットインできた。
AIと協業するときこそ、コードの見通しを保つことの重要性を痛感したってワケ。


作って気づいたこと

「機能の素材」と「使わせ方」は別の問題

StoryForgeはPh9.5まで実装を進めたところで、機能は揃っているのに「使い始め方がわからない」という問題に気づいた。

高機能なUIは、初見ユーザーにとって障壁になる。急遽コンテキストオンボーディング機能の追加に走った。
「機能説明会」ではなく「触らせながら価値を理解させる」設計にするのに、機能実装と同じくらいの時間がかかったのだけれども。
非エンジニア層が触った時にどのくらいの理解があるかを立ち返るのは、良い経験値になったと思う。


BOOTHで出すことにした

StoryForgeはBOOTHにて販売予定。

ターゲットは

小説を書いているけど、AIの使い方が分からず手を出せていない人
ノベルゲームを作りたいけど、 ツール選びに迷っている人
ローカルLLM搭載・買い切り・サブスク不要、という価値をそのまま届けたいと思っている。

ChatGPTもGeminiもClaudeも、安売りはもったいないと言ってくるので値段はまぁまぁ。
一ヶ月限定でお安いよ!


おわりに

元は自分の為とはいえ、それが誰かの創作の道具になる。そう思うと、熱量高く開発した意味があるなと思う。

そう、StoryForgeは、自分が使いたいものを作るという動機から生まれたものの、それがそのまま、誰かの役に立てばいいと思っている。


© 2026 ena_dri