プログラミング開発エディターVisual Studio Codeをフィクションの執筆に使うことにしたのは、2021年の春でした。新型コロナウイルスによる行動制限が一年を超えたその頃、減った収入が戻りそうもないと思った私は真剣にAdobe CCからの脱退を考え始めたのです――というような話は、2021年のVS Codeミートアップに参加したときの映像をご覧ください。トランスクリプトはログミーで公開されています。
「Visual Studio Code」で執筆するSF作家藤井太洋氏が作る物書きのための拡張機能
この動画を収録してからはや2年。ScrivenerからVS Codeに乗り換えて、プログラミング用のエディターでフィクションを書き始めてから3年半が経ちました。novel-writerの開発も、3年半続いたということになります。
複数のテキストファイルを一つのファイルに統合する機能は3年半前からありました。複数ファイルにわたる文字数を数えることも、連載を想定して特定のフォルダーの文字数だけをカウントすることも可能です。単行本一冊分のテキストを、かなり綺麗な縦書きのPDFに変換できるようにもなりました。novel-writerの機能ではありませんが、VS Codeは複数のファイルにわたる検索置換もサポートしていますし、Gitで複数のファイルからなるフィクションの状態を記録し、後戻りしたり見直したりすることも可能です。Textlintのprhモジュールで正規表現による校正を行えば「今」と「いま」のどちらを使うかという用語の統一も可能ですし、「私はは」のような助詞の不適切な連続も執筆中に取り除くことができます。markdownには図やシーケンスダイアグラムが書けますし、資料の画像もPDFも、VS Codeから離れることなく閲覧できます。一行の文字数を指定できる縦書きのプレビューはScrivenerにもないものですし、1日の編集距離を知ることができるエディターを他に聞いたことがありません。
この3年間、私はVS Codeとnovel-writerの他にエディターを使う必要がありませんでした。novel-writeは悪くない機能拡張ですが、「novel(長編小説)」を書くために必要な、最も大きな機能を欠いていました。ファイルの並べ替えです。
そもそも私がScrivenerやVS Codeを使うのは、「novel(長編小説)」をいくつものシーンに分割して書くためです。ワードプロセッサーで長さ三十メートルにも及ぶファイルをスクロールする苦役から逃れるためです。Scrivenerは素晴らしいソフトウエアでした。シーンファイルやその集合体のフォルダーの順番を、アウトラインプロセッサのように入れ替えて編集できました。私はVS Codeでも同じように作業をしようとしましたが、アウトラインのデータ構造を持つScrivenerと異なり、実体のファイルを扱うVS Codeで同じことをしようとすると、フォルダーとファイルの先頭に番号を手動で割り当てていくしかありません。
ファイル名の連番は悪くない考え方です。特別なソフトを使わなくてもファイルが並びますし、執筆ソフトを乗り換えるのも容易です。しかし、作業は苦痛でしかありません。10のシーンテキストがあるときに冒頭にもう一つのシーンを追加しようとすると10回、100のシーンテキストを修正しようとすると100回名前を付け直さなければならなくなります。Unix由来のコマンドや短いプログラムを書けばだいぶ楽になるとはいえ大変な作業であることに変わりはありません。
Scrivenerやアウトラインプロセッサーのように順番を入れ替えて、番号の割り当てをプログラムで行えればどれだけ楽になるだろう――と考えない日はありませんでした。そういう作業こそ機械にやってもらうべきなのです。しかし、これが結構難しい。
現在のnovel-writerには「原稿ツリー」はVS Code標準のツリービューを利用しています。階層表示でそれぞれのフォルダーの文字数を表示することができるので私自身も重宝しているのですが、このツリービューのドラッグ&ドロップは、ドロップポイントをノードとノードの間に設定できないのです。

私の欲しいツリービューは、ゼロから作るしかないことがわかっていました。縦書きプレビューのようにHTMLとjqueryで書いても作れる気がしましたが、機能追加やメンテナンスのことを考えるとユーザーの多いフレームワークを使う方がいい。それに、そろそろ自分のプログラマーとしての力量もアップデートしておきたい。そんな目論見から、VS CodeのサイドビューにReactのAppでツリービューを作り込むことにしました。
ちょうど『マン・カインド』が手から離れ、次の改稿と約束している連載にはこの機能を使いたい。というわけで、一週間粘って、ようやく自分の手元で使えるところまで持ってくることができました。苦労話をどこかでできるといいんだけど、どこがいいかなあ。
なかなか立派に動いていますが、一般公開するにはちょっと物足りないところもあります。名前の変更、ファイルやフォルダの追加・削除はできたほうがいいでしょうし、ひょっとしたらアンドゥも必要かもしれません。ファイルを操作する機能なのでバグも怖い。ファイルが消えちゃうかもしれませんし、ホームディレクトリを丸ごと、あるいはリモートにあるたくさんのファイルを開いて操作してしまうと負荷も大きくなることでしょう。OSを巻き込んでクラッシュする可能性もゼロではありません。そんな時、誰もがGitを使っていて元に戻れるとは限りません。VS Codeには自動バックアップもありますがファイルそのものが失われてしまうとその機能を使うこともできなくなります。一段階ぐらいのアンドゥは必要かもしれないけれど、複数ファイルにわたる状態を「取り消す」のはかなり怖いものがあります(だからほら、ファイルを使うアプリってファイルの状態はアンドゥできませんよね)。
そんなわけで、公開まではもう少しお時間をいただきます。きっとバージョンは3.0.0になっていることでしょう。お楽しみに!