最新記事の通知を受け取る

最新記事公開時にプッシュ通知します

『月姫』『ひぐらし』の時代を築いた、国産ノベルゲームエンジン「NScripter」開発史【フォーカス】

2025年9月17日

ノベルゲームエンジン「NScripter」開発者

高橋 直樹

1975年生まれ。1998年より、成人向けPCゲームのシナリオライターやプログラマー、企画などを行う。1999年にノベルゲームエンジン「NScripter」を開発し、公開。以降は、同エンジンシリーズの開発者としても広く知られる。
個人サイト:nscripter.com

1990年代から2000年代にかけ、PCゲーム市場では「ノベルゲーム」(ビジュアルノベル)が大きな流行を見せ、商業や同人作品の中から数々のキラータイトルが生み出されていました。同人サークルから出発し、後に商業の世界でも絶大な影響力を持つに至った「TYPE-MOON」の『月姫』や、「07th Expansion」の『ひぐらしのなく頃に』を耳にしたことがある方は、少なくないのでは。

この『月姫』『ひぐらし』をはじめ、数々のノベルゲームを支えていたゲームエンジンがあります。その名は「NScripter」です。プログラミング経験の浅いシナリオライターでも比較的容易に扱える、BASICライクな平易な言語仕様を特徴とし、簡単な命令文を記述するだけで、テキストの表示、CGの切り替え、BGMや効果音の再生、選択肢によるシナリオ分岐といった、アドベンチャーゲーム制作に不可欠な演出の実装が可能でした。

NScripterは、1999年に公開され、非商用や同人活動(商業流通作品は除く)では無料、商業作品では有償というライセンスモデルにより、多くの同人クリエイターの裾野を大きく広げる土壌となりました。その後の2012年、Lua言語による記述に特化した後継エンジン「NScripter2」も登場しましたが、現在では初代も「2」も、大規模な更新は行われていません。

今となっては、ノベルゲームの新作が世間の話題を席巻することはそう多くないかもしれません。一方で、かつてのムーブメントの中心にいた開発者は、自らがつくったツールと、それがもたらした「文化」を、どのように見てきたのでしょうか?

「もともとは、自分のためにつくっていたのですが」と語る開発者・高橋直樹さんに、NScripterと歩んだ25年についてお聞きしました。

シンプルなエンジンは「ノベルゲームの要求」に応じて変化した

――本日はよろしくお願いいたします。NScripterをつくろうと考えた、最初のきっかけについて教えていただけますか。

高橋:NScripterの直接の前身は、「Scripter3」というこれまた自作のゲームエンジンです。

もともと大学生の頃、私は趣味の同人活動でノベルゲームを制作するために、自分用のゲームエンジンシリーズをつくっていました。これらには「Scripter」という名前を付けており、初代とその後継「2」に続き、「3」とのナンバリングを冠していたのです。

当時は今のように誰もが手軽に使えるゲームエンジンなんてほとんど存在しなかったので、何本ものゲームを安定してつくれるようにするには、エンジンも自分でつくるしかなかったんですね。もともと小学生時代からPC-6601やPC-88に触れてきた「パソコン少年」だったので、プログラミング自体は昔から取り組んできました。

卒業後はそのままPCゲーム会社に就職したのですが、同人活動は続けていました。そのために開発を進めていた「Scripter3」の次期バージョンが、NScripterです。就職先で新たな技術に触れた経験も生かしつつ開発しました。

――「同人クリエイターに使ってもらうためにつくり始めた」側面があったのではないかと推測していましたが、そもそもご自身の創作活動のためにツール開発が必要だったわけですね。

高橋:はい。その後しばらくして同僚と独立し、自分たちでゲームブランドを立ち上げることになりました。そのブランドではNScripterを正式に採用し、ノベルゲームの制作に用いることになったため、ツールとしてさらに本格的につくり込むようになりました。

――同人ゲームの開発から、本格的に商業ゲーム制作にもシフトしていく中で、NScripterの設計思想がどのように変化していったかを教えてください。

高橋:正直に言うと、何か確固たる設計思想があったわけではないんですね。ただ、根っこの構造がかなり単純なエンジンなので、「その場しのぎ」での拡張が行いやすいツールにはなっていたかと思います。

一番最初の頃は数式処理すらなく、アセンブラ言語のような命令形式で組んでいました。例えば、変数に値を代入するのにmov(MOVE)、数値を加算するのにaddといった命令を直接記述するような方式です。動作原理は明快な一方で、単純な計算でも複数の命令に分解して記述する必要があり、直感的ではなかった。

しかし、自分以外の人もこのエンジンを使うことを意識するにつれ、この仕様では敷居が高すぎると感じるようになりました。そこでプログラミング入門の定番だった「BASIC」言語の文法を参考にするようになったんですね。数式をそのまま記述できるようにするなど、比較的多くの人が一度は目にしたことのある平易な記述方法を取り入れ、専門のプログラマーではない書き手でもシナリオが組みやすくなるようにした。

一方、エンジンの中心部では、スクリプトから受け取った命令を解釈(パース)し、対応する処理を呼び出す単純な分岐構造になっています。このシンプルさにより、私にとっても拡張作業が容易というメリットもあった。具体的に言うと、新しい演出命令を追加したい場合、分岐の中に新たな条件を書き加え、そこに直接処理を記述するだけで済みました。

例えばですが、ゲーム制作の依頼元やユーザーから「特定の場面で、画面全体を振動させたい」という要望があった場合、「quake」という新しい命令を定義し、それに対応する画面描画処理のコードを数行書き加えるだけで、迅速に実装するというようなことが可能だった。

あまり出来が良い言語とは言えないのですが、こうした「その場しのぎ」がとてもしやすかった。また、ゲームのシナリオ更新時にいちいちビルドし直す必要なく、スクリプトファイルだけで制作を完結できるというのも大きな特徴だったかと思います。

▲NScripterにおけるスクリプト(左)と、その実行画面(右)。bg(背景表示)やld(キャラクター表示)といった平易な命令文をテキストファイルに記述するだけでノベルゲームを制作できる。(画像は、macOS上にてWineフロントエンド『Whisky』を用いて起動したもの)

――本体はシンプルに保ちつつ、必要に応じて拡張できる柔軟性があったのですね。

高橋:そうですね。また、自分ひとりで開発していたので、メンテナンスに割けるリソースにも限界があります。そのため「コードベース自体もなるべくシンプルなものに留めよう」というのは常に意識していました。アクションや複雑なシミュレーションゲームまで手を伸ばすのではなく、アドベンチャーゲームや簡単な育成ゲームくらいなら苦労せずにつくれる、というレベル感でエンジンの機能範囲を小さくまとめていこうと。

本体のシンプルさを保つ上で、特定の機能については個別にプラグインを用意してそちらに処理を任せるという判断もよくしていました。例えば、音楽フォーマットの再生機能。当初NScripter本体では未対応だったOgg Vorbis形式のBGMをゲーム内で再生したい場合、ユーザーが「nsogg.dll」という専用プラグインを本体と同じフォルダに置くことで対応できるようにしていました。

また画像表示においては、多機能な画像ビューアー「Susie」(※1)のプラグイン規格を利用していました。これを利用することで、NScripter本体には画像処理の詳細を実装せずとも、PNG画像などをひとにまとめた独自のアーカイブ形式「NSA」の中身を直接読み込んでゲーム上に表示できるようにしていたんですね。

しかし次第に、このような仕組みではゲームづくりへの対応が難しくなっていきました。

(※1)「Susie」:Windows向けの画像ビューア。プラグイン機構による高い拡張性を持ち、対応する「SPI」ファイルを追加することで、標準では表示できない多様な画像形式や書庫(アーカイブ)ファイルの内容も閲覧できる。90年代から2000年代にかけて広く普及した。

――何があったのでしょう?

高橋:2000年代後半になると、ノベルゲームに要求されるGUIの複雑さやデータ容量もどんどん膨らんできたんです。

例えば、既に表示されたキャラクターのセリフを再表示するバックログ機能は、昔は単純にテキストを巻き戻して表示するというだけのシンプルなものが多かった。しかし時代が進むと、バックログ専用のUI画面を表示したり、対応する特定のボイスを再生したり、あるいは選択肢の場面までシナリオを巻き戻せるようにしたり、といったより複雑な機能が求められるようになりました。コンフィグ画面についても、例えば単なる音量調整だけでなく「キャラクターAのボイスだけをミュートする」といった、個別設定への要望がゲーム会社やユーザーから寄せられました。

こうした複雑なUIの状態管理やデータ構造を、変数とgoto文が中心のシンプルなBASIC風文法だけで記述するというのは、非常に骨が折れるものでした。

そこで、より複雑なロジックを扱えるように、2009年にスクリプト言語「Lua」を導入しました。こちらもプラグインによる拡張機能として実装し、「nslua.dll」というdllファイルを介して、NScripterのスクリプトからLuaで書かれたプログラムを呼び出せるようにしました。これにより、例えば複雑なコンフィグ画面の制御ロジック全体をLua側に記述し、NScripter側はそれを呼び出すだけ、という役割分担ができるようにしました。

――そこなのですが、後のNScripter2ではLuaの導入がさらに推し進められ、エンジンの中核を担うようになりました。コンセプトが大きく変わったように感じます。

高橋:はい。初代NScripterに拡張機能としてLuaを実装し、実際の仕事で使ってみて、その利便性を実感しました。そこで、「もう拡張機能として後付けするのではなく、最初からLuaを組み込む前提でエンジンを再設計した方が、もっと柔軟でパワフルなものがつくれるのでは」と考えたんですね。

ただ、NScripter2をつくった理由はもうひとつあります。ハードウェアとOSの進化です。

初代NScripterはWin32の描画APIで動作していたため、PCの性能が向上しゲームの解像度が上がっていく中で、描画速度の限界が見えてきていました。特にフルスクリーンでのエフェクトなどを多用すると、処理が追いつかなくなってきたのです。なので、高速な描画処理が可能な「DirectX」を全面的に採用する必要がありました。ここまで根本的な構造を変えるとなると、もはやリファクタリングというレベルではなく、ゼロからつくり直すしかなかった、という事情もあったのですね。

NScripterが生んだ盛り上がりをどう見ていたのか

――NScripterが、結果的に非常に多くのクリエイターに使われるようになった背景には、何があったとお考えですか?

高橋:まず、NScripterをリリースした当時は、単純にライバルが少なかったのだと思います。「吉里吉里2」(※2)のような高機能なエンジンもほぼ同時期に登場していましたが、まだ誰もが使う定番と呼べるものは存在していませんでした。そんな中で、文法がシンプルなNScripterは、一部のユーザーにとって親しみやすかったのではないでしょうか。

ユーザー層が大きく広がった経緯としては、次第に商業のPCゲーム会社に使われるようになったことと、同人では多くの方に人気を博した『月姫』で採用していただいたことが大きかったかと思います。ああいったヒット作が出たことで、「NScripterを使えばこういうゲームがつくれるんだ」と多くの人に知ってもらえたわけですから。

(※2)「吉里吉里2」:W.Dee氏によって開発された、スクリプトエンジン。NScripterと同様にアドベンチャーゲーム開発で広く利用されたほか、高い拡張性を持ち、汎用的なゲーム開発にも対応していた。後継に、「吉里吉里Z」というエンジンがある。

――商用で利用されるケースが増える一方、同人や非商用での利用は無料、というライセンス形態は一貫していましたね。

高橋:そうですね。有償ライセンスについては収益の足しになればいいと考えて設定しましたが、半面、自分自身も同人の世界の出身なので「アマチュアのクリエイターの方がステップアップしていく段階で使ってくれる分には、無料でいいだろう」と考え、そのような方針で公開していました。

また、当時は同人からプロに転身する人も珍しくなく、そのまま仕事でもNScripterを使ってくれるケースも多かった。すると今度はそうした人たちから使用料をいただけるため、結果的にですが、NScripterの開発はビジネスモデルとしてもある程度成立していました。

――そうしてNScripterを通して『月姫』や『ひぐらしのなく頃に』といった有名作品も生まれていきました。PC向けノベルゲームという文化自体も、より多くのファンやクリエイターの間で盛り上がりをみせ、有志によるNScripterの技術解説サイトも登場しました。こうしたムーブメントを、開発者としてはどのようにご覧になっていましたか?

高橋:あんまり、NScripterが世の中に何か影響を与えた、というような意識はなくて……

「純粋に、いちツールとして皆さんにNScripterを使っていただけたのがありがたい」というのが率直なところです。「吉里吉里2」をはじめとして、他にも「すごいな」と思うようなゲームエンジンが次第に登場していきましたからね。もちろん、もしも結果的にNScripterがノベルゲームという文化に何か影響を与えていたのだとしたら、それは嬉しいな、とは感じますけどね。

ユーザーとの関わりで特にありがたかったのは、今おっしゃったように、有志の方々が使い方を解説するウェブサイトを運営してくださったことです。私自身はドキュメントを書くのがあまり得意ではなく、特に初心者向けの入門コンテンツとなると、どう書けば分かりやすくなるのか分からなくて。そのあたりは、ユーザーコミュニティの善意に頼ってしまっていた部分が大きい。NScripter2では反省して文書の体裁を整えましたが、初代の頃は本当に助けられました。

▲当時のNScripterの公式マニュアルの様子

――ちなみに、NScripterでつくられたゲームの中で、特に印象的だった作品はありますか?

高橋:やっぱり『月姫』『ひぐらし』ですかね。特に、『ひぐらし』の関連作品にあたる『うみねこの鳴くころに』は好きでしたね。これはNScripterに関係なく、ミステリーが好きなので、純粋にゲームとして楽しく遊んでいました。

あと、これはゲーム作品じゃないんですけれど、NScripterで無理やりLisp(※3)インタプリタを動かすというチャレンジをしているユーザーがいたことは思い出に残っています。「なんて無茶なことをしているんだ」と(笑)。

(※3)Lisp:1958年にジョン・マッカーシーによって考案された、歴史の古いプログラミング言語。AI研究の分野で広く使われてきた。

ノベルゲームの未来に幸あれ

――時代の変化とともに、ノベルゲーム市場もかつての勢いからは落ち着いたように感じます。そうした中でご自身のキャリアにも変化はありましたか?

高橋:そうですね。2018年ごろ、市場がじわじわ縮小しているのを感じたのと「転職するならラストチャンスかな?」という年齢だったのもあり、一般企業のプログラマーとして再就職しました。組み込みシステム向けにGUI関係のプログラムを書く会社などを経て、今はまた別の会社でプログラマーとしてずっと働いています。

――現在も、創作活動は続けていらっしゃるのでしょうか?

高橋:はい。同人ゲームが多いですけれど、つくっていますよ。商業作品時代に仕事をしていた人たちとは今でも付き合いがあるので、そうした面々と散発的にゲームをつくることがありますし、今後も機会があれば制作活動を増やしていきたいです。

――長年関わってきたノベルゲームというジャンルが、全盛期に比べて落ち着いてしまった状況に寂しさを感じたりはしませんか?

高橋:確かに、NScripterや吉里吉里のような国産ツールを使った作品の例が減っているようには感じます。しかし、提供形態や毛色は変わりつつも、同じようなジャンルのゲームがヒットする事例がゼロになったわけではないかと思います。

特に、最近は「Steam」上で販売されているインディーゲームのノベルゲームがヒットする事例も珍しくない。ビジュアルノベルというよりは、より広義なアドベンチャーゲームに分類する方が適切かもしれませんが、ついこの間は『都市伝説解体センター』(※4)が大きな話題を集めましたよね。こういった事例もあるので、まだまだ「面白いジャンル」なのではないかと感じていますし、小さなチームでもつくりやすいというのは、ノベルゲームやアドベンチャーゲームの大きな魅力。昔よりは国内市場が落ち着いたにせよ、今後もまた盛り上がりを見せていくのではないかと期待しています。

(※4)都市伝説解体センター:集英社ゲームズより2024年に発売されたミステリーアドベンチャーゲーム。

――そうした未来にも期待を寄せている中で、NScripterや「2」について、開発の現状をお聞きしてもよろしいでしょうか。

高橋:初代は2015年を境に大規模な更新をすでに停止していますし、「2」についてもバグ修正や、Luaスクリプトに関する更新で完結するような小さな仕様追加を時おりしている程度ですね。

――大変不躾な質問ですが、2000年代の盛り上がりに比べると、エンジンを利用するユーザーの数も落ち着いているような状況なのでしょうか?

高橋:そうですね。ただ、そのことを気にしているわけでもないです。私の開発の手が止まって困る方がいれば、私としても問題視するかもしれませんが、もう現在は便利なゲーム開発ツールがたくさんありますからね。

ただ、問題がひとつあります。

――というと?

高橋:私自身が今後も、ゲーム開発を続けるつもりだということです

やるからには、やはり自分好みの環境で開発したい。NScripter2でノベルゲームに関する大抵のことは実現できますし、私自身今も使っていますが、ゼロから自分で書いたこのエンジンを、例えば20年後もメンテナンスし続けられるかというと、不安はあります。

そこで、現在「NScripter3」の開発を進めています。もう自分で全部をつくる時代でもないな、と感じているため、「Godot」(※5)というオープンソースのゲームエンジンにLuaのプラグインを組み合わせるような設計を考えています。そうしてノベルゲームのロジックを担う基盤部分だけを私がつくり、描画などの部分はGodotに任せる、と。

▲Godotのイメージ(画像は公式サイトからスクリーンショット)

(※5)Godot:オープンソースで開発されているクロスプラットフォームのゲームエンジン。2D・3D問わず、幅広いジャンルのゲーム開発に対応している。

――そのようにして、もう25年以上、NScripterシリーズの開発を続けていることになりますが、そのモチベーションはどこにあるのでしょうか。

高橋:やはり、「自分で使うから」というのが一番の動機ですね。「みんなで使ってほしい」と積極的に働きかけるというよりは、あくまで自分の創作活動が主軸にあって、そのついでにツールを公開する、というスタンスです。

ただ、せっかくつくるのなら、フリーソフトのように、他の人にも使ってもらえるような仕様にしておきたいんですね。特に最近は、昔の仲間とまたゲームをつくろうという話をよくしているので、彼らにとっても使いやすいツールになればいいな、とも考えています。

そして「3」では自分のゲームでお小遣いを稼ぎつつ、その過程で生まれたエンジンをもし使いたいという人がいれば、使ってもらう。こうした位置づけになると、自分にとっては一番しっくりきます。ゲームエンジン開発におけるこうした動機は、25年前とあまり変わっていないのかもしれませんね。

取材・執筆・編集:田村 今人

関連記事

人気記事

  • コピーしました

RSS
RSS