
ノベルゲーム制作の影の功労者、作ってよかった自作ツール紹介
ごあいさつ
はじめまして!
ゲーム制作サークル【studio aila】で開発全般をやってます
『よむすけ』といいます。

なぜかセ◯ウェイに乗っている
普段は本業でプログラマーをしつつ、余った時間でゲームを作ったり人様が作ったゲームを遊ばせていただいたりしてます。
開発に関わっているゲームはこちら↓
もともと同人で作ってたゲームのコンシューマー版です。
🎉 PS4, Switch, Steamで、2024年11月28日より好評発売中!

現在、ノベコレにて無料公開中。(リンクからプレイできます)

この記事について
この記事は、うちのサークルの代表(ハナダ)が唐突に始めた
『ADVゲ制クリエイターズ アドベントカレンダー2024』の記事の一つになります。
既にたくさんの方が、とても興味深い記事を投稿してくださっています。
ご協力いただいた方々、本当にありがとうございます!
さて、そんな中私も記事を書かなければ・・・ということで、テーマをどうするか色々考えていました。
で、色々考えた結果、今回の『あまつそらに咲く』の開発中に自作したツールの紹介でもしてみようかと思い至ったわけです。(需要があるかはさておき・・・・)
ただ、ツールの紹介をするだけだと専らマニアックな話になってしまう気がするので・・・
なぜツールを自作したのか?
ツールを作って思ったこと
個人的な開発Tips
など、私が考えていたことや感じたことなどを健忘録的に書き出しつつ、
あわよくば、皆様の何かしらのお役に立つ記事になれば良いなと思っています。
また、今回自作したツールの一つを思いつきで公開してみました。
(記事の後半に配布用リンクあります)
マニアックな話も多くなってしまうかと思いますが、暇つぶし程度に読んでいただけますと幸いです。🙇♂️
そもそもなぜツールを自作したのか?
後にどのようなツールかはご紹介しますが、私が作成したツールは主に「スクリプト作業」を効率化するためのものです。
「スクリプト作業」とはゲームを進行させるための指示文をゴリゴリ書いていく作業になります。
ノベルゲーム制作の場合、大抵この作業にかなりの時間がかかります。

セリフやキャラの絵をどこで出すかなど全部指示しています
これからツールを作った理由を書いていくのですが、その前に前提として言っておきたいことがあります。それは、基本的にゲーム制作のためにわざわざ自分でツールを作る必要はないということです。
もちろんツールがあれば作業は楽になりますが、デメリットもたくさんあります。
羅列するとこんな感じ↓
そもそもツールを作るのに時間がかかる
外注する場合は依頼料がかかる(ここに金かけるくらいならゲーム素材を増やしたい)
適当に作るとかえって工数が増える(じゃあ手作業でよかったやん状態)
基本的にゲーム制作において時間やお金を掛けるべきところは他にたくさんあるため、そもそも優先度は低いです。
(時間に余裕がある場合や、ゲームを作っていない期間に作ってみるのはありだと思います)
ではなぜ作ったのか?
理由をまとめるとこんな感じです。
スクリプト作業の工数が足りなかったから
やりたいことが特殊すぎて自作するしかなかったから
それぞれ詳細を語ってみたいと思います。
スクリプト作業の工数が足りなかったから
工数が足りなかった証拠として、今回のあまつそらコンシューマー版の企画のために、2024年3月頃に引いたスケジュール(の一部)はこんな感じ↓

大体平均1週間で10~20ファイルのスクリプトを仕上げる必要がある

・・・・・・
・・・
うーん、こう見るとやばいですね・・・😱
因みに、今回行った作業は、まっさらな状態から0→1でスクリプトを書いていくものではなく、既に完成しているスクリプトを、別のゲームエンジン用に書き換えていくものでした。
なので、一から作るのと比べればだいぶ気持ち的には楽ですが、
それでも、セリフ・キャラ・背景・BGM・SE等々全ての指示文を書き直していく必要があるため、かなり手間がかかります。
しかも、昼間は本業があるため、動けるのは平日夜と休日のみ。
毎週安定して時間が確保できればいいのですがそうとも限りません。
(残業とか外せない用事とか・・・)

多いとスクリプト全体で10000文字を超えるファイルも・・・
また、スクリプト以外にも私担当で他にやらなければいけない作業がたくさんありました。
UIデザイン及び素材作成
タイトル画面・コンフィグ画面などシステム部分の開発
ゲーム内素材の調整(解像度調整など)
PS4, Switchへの移植対応作業
ボイスファイルの取り込み(スクリプト作業の一部)
デバック・修正作業
etc…
先ほどお見せしたスケジュールもこれらを考慮して組まれています。
大幅な遅れは他の作業時間を圧迫するためなるべく避けたいところ。
ということで、スケジュールを実現しつつ私が過労4しない方法を考えた結果、ツール作ってある程度機械的に変換していくしか無い・・・😭
と、こうなったわけです。(命大事)
やりたいことが特殊すぎて自作するしかなかったから
正直ツールを作るまでしなくても、ある程度スクリプト作業を効率化する方法はあります。
例えば、VSCodeのユーザースニペット機能を使うと、事前に登録しておいた文字列を予測変換の要領で自動入力してくれます。
私は、入力頻度が高いキャラ毎のid等を登録して使っています。
正直これだけでもかなり楽になるし、入力ミスも減らせるのでオススメ。


ただ、今回は量が量です。
この機能でも多少は効率が上がると思いますが、1週間に20ファイル仕上げなければいけないのを考えると、物理的にも私の精神的にも時間が足りません。
あと、これはエンジン移行をする場合限定ですが、2つの異なる書き方のスクリプトを行ったり来たりしていると脳がバグります。
必然的にミスも増えていき、デバック作業や修正作業の工数も増えかねません。
また、今回に関して言えばボイスの差し込み作業がネックでした。
今回使用したエンジンでは、ボイスファイル名をセリフの指示部分で指定することでボイスが再生される仕組みになっていました。
なので、基本全セリフに対してスクリプト上でファイル名の指定を行っていく必要があります。
じゃあ、何がネックだったのか?
とりあえず、ファイル名を見てもらえれば私が言いたいことがわかると思います↓

管理上の理由などからこのような付け方になりました。
・・・・・・
・・・そうです、ファイル名が番号&連番のため、ちょっとのミスで簡単にズレます。気づくのに遅れた場合、地獄の修正作業が待っています。
また、この作業は手作業で行った場合おそらく一番の単調作業です。
スクリプトに関して言えば、こちらはまだ演出付けをしたりするので頭を使うこともあるのですが、ボイスに関しては予めどのボイスがどのファイルと対応しているのか全て決まっているため、ひたすらボイスid表とにらめっこしながらファイル名を入れていく作業になります。
因みに私は単調作業が得意ではありません。
正直この量を手作業で行っていたら心が折れていました。😭
これらのことから、次のような機能を持ったツールがほしいと思いました。
1. 元のスクリプトから、セリフ、キャラ、背景などのタグ情報やシナリオテキストを判別し、それぞれ自動で移行先エンジンのスクリプトに変換する
2. セリフから対応するボイスファイル名を特定し、スクリプトに自動で挿入する
でも考えてみてください、
こんな都合のいいツールどこにあるのよ・・・🙄
ということで、結局自分で作るしか無いという結論になりました。
ツール1:スクリプト変換くん
・・・名前がダサいのはさておき。(考えてなかった)
そんなこんなで、完成したものがこちら↓
■ プロダクト概要
ベース環境 : Googleスプレッドシート, Googleドキュメント
バックエンド言語 : Google Apps Script (GAS)
制作期間 : 3日くらい
■ 見た目

※一部お借りしているエンジンの情報を含むためぼかしてます

■ 全体構成

■ スクリプト作業手順
元スクリプトをシートBに貼り付け
シートBの内容を自動で読み込み、編集しやすいデータに加工後シートAに出力
ボイスID管理用シートのセリフとシートAに出力されたセリフを突合しボイスID(ボイスファイル名)を挿入
出力された内容をチェック、この時点で修正する部分があれば手動で修正
シートAの内容をスクリプトの形へ変換後、ドキュメントファイルに出力
シートAをバックアップ
ドキュメントのテキストをスクリプトファイルにコピペして終了
■ スプレッドシートで作った理由
これは単純に、手っ取り早く作れそうだったので採用しました。
操作用のUIをわざわざ作る必要が無いですし、簡単な処理だったら関数で対応できるので、その分コード量を減らせるのも良い点ですね。
また、Googleドライブにアクセスできれば作業ができるので外での作業にも適していました。
■ スクリプト変換の仕組み
変換前のスクリプトの文字列から特定のパターンを検索して自動で置き換えをしています。
パターン検索には、文字列検索によく利用される正規表現を使っています。

使用サイト:WEB ARCH LABO Tools 正規表現チェッカー
※セキュリティと秘匿情報保護の観点から、作業後のバックアップファイルおよび出力ドキュメントは適切に削除しております。本ツールを参考にされる場合は、データの取り扱いに十分ご注意ください。
作って良かった点
まず圧倒的にスクリプト作業の工数が減りました。
元スクリプトを貼り付けて変換して、またコピペするだけなので、
1スクリプトファイルにつき早ければ5分程度で終わります。
また、機械的に処理をすることで人為的なミス(タイプミスやパラメータの指定ミスなど)がだいぶ減りました。
これにより、デバック作業の効率もアップしました。浮いた時間を演出の強化などのクオリティアップに使えたのも良かったですね。
あとは、ボイスの差し込み作業を自動的に行えたのはやっぱり大きかったです。多少ずれるかなとは思っていましたが、ほぼほぼちゃんと機能してくれました。
スクリプト編集用シートについて
やり方次第ではスクリプトからスクリプトの形に直接変換することも出来ましたが、今回に関しては変換前に一度編集用のシートに出力する形を取りました。
このようにした理由としては、そもそもこのツールは細かい変換ミスがあることを前提に作っているので、途中でミスの修正を手動で行えるようにしたかったのと、ボイスの取り込みを行う際に、一旦シートに書き出したほうが取り込みやすかったからです。
一度編集できる形を挟むことで、機能を変更したり追加の機能を挟みたい時に対応がしやすそうだなと感じたので、この仕様にしたのは正解だった気がします。
自作してみて思ったこと
ツールは完璧に作らない
まず、完璧に作ろうとすると時間がかかりすぎます。
『スクリプト変換くん』で言うと、最初から3日くらいで作ることを想定していました。ここに時間をかけすぎると、スケジュールに影響が出てしまい本末転倒です。
また、変換を行うスクリプトの種類については、頻出するものに絞ったほうがいいです。
例えば、スクリプト上でよく出てくる指示文には次のようなものがあります。これらはツールで変換を行うことによるインパクトが大きいです。
セリフを表示する
キャラを表示する
キャラを非表示にする
キャラの表情を変える
背景を変更する
BGMを変更する
SEを流す
逆に、たまにしか登場しない指示文や、そもそも機械的な変換が難しい部分などは諦めて手作業したほうがむしろ効率的だと思います。
(何が頻出するかは作る作品によって変わると思うので、その辺りは柔軟に対応していいと思います)
あとは、ツールで変換を行ったあと、必ず全てのスクリプトをチェックして、修正作業や演出の強化を行った方がいいと思います。
機械的に変換を行う分、ツールだけだとどうしてもゲームとして単調になってしまうのと、結局ミスは発生するので修正は必要になると思います。
(私も、最終的には全シナリオのチェック&修正作業を行いました)
むしろ、最終的なゲームクオリティアップの作業時間を捻出するためにツールを使うという考え方が正しいような気がしました。
総評
結論作って良かったですね。☺️
やはり、何も無いところから作業するのは精神的にもきついですが、50%, 60%の完成度でもツールが書いてくれたものを修正して行くほうが遥かに作業しやすいです。
また、今回はゲームエンジンの移行という少し特殊な状況でしたが、スクリプトの変換部分の処理を組み替えれば、シナリオテキストをスクリプトに変換することもできると思うので、新しいノベルゲームを作る際も使えるのではないでしょうか。
ツール2:立ち絵IDコピペくん(配布あり)
思ったより記事が長くなってしまったので、こちらはサラッと紹介だけして終わろうかと思います。
先に言っておくと、とりあえず使えればいい前提で作っているものなので雑な部分が多いです。(配布用に若干修正しました)
もし使ってみたい方がいましたらダウンロードしてみてください。
■ 注意点
突貫で作ったツールのためツール自体にはUIがありません。ツールの使用には一部コマンドラインでの操作やコードの編集を行う必要があります。
配布用になるべく複雑な操作をしなくても使えるよう調整はしていますが、多少プログラミング等の知識が必要になる点についてはご了承下さい。
あまり検証をしていないので、環境によって動作しない場合があります。ご了承ください。
■ ツール説明
好きな画像を使ってクリップボード(のようなもの)を自作できるツール
クリップボードを生成後ブラウザで開いて使用
画面上の画像をクリックすると画像ファイル名の文字列をコピーできる
追加機能として画面レイアウトの一部をカスタマイズ可能
※JavaScriptでHTMLを自動生成する仕組みです


■ 作った理由
単純に、キャラの表情差分に対応したIDを毎回探してコピペするのが面倒だったためです。
今回のゲームの場合、同キャラ・同種類の表情でも複数差分あるキャラが多く、「笑顔06ってどの笑顔だっけ?」みたいな感じになることが多かったので、表情のID表とコピペツールを一緒にしたものを作ってみました。
■ プロダクト概要
対応OS : Windows11 ※おそらくwin10でも動くが未検証
バックエンド言語 : JavaScript
実行環境 : Node.js
制作期間 : 2日くらい(一部コード生成にAIを使用)
■ 配布リンク
下記リンク先からzipをDLしてください(LatestバージョンをDL)

※注意事項
zipインストール時やHTML生成時に、Windows Defenderにマルウェアとして誤検知される場合があります。(おそらくbatファイルとクリップボード操作関連部分が引っかかっているっぽい)
プロダクトの内容としてはウィルスではないので問題はないです。(今後修正できたらするかも)
■ インストール方法
DLしたzipファイルを任意の場所に展開してください。
※このツールを使うには「Node.js」が必要です。
こちらは適宜インストールをお願いいたします。
(バージョンはv20.16.0で動作確認済みです)
■ 使い方
使い方の詳細はツール内の「README.md」を参照してください。
(githubページからも確認できます)
■ ツールの利用規約等
ツールの使用・再配布等については全て自己責任でお願いいたします。
基本的に個人利用の範囲であれば、リバースエンジニアリングや再配布等自由にしていただいて構いません。
今後のアップデートについては基本的には考えておりません。
(気が向いたらなにかアップデートするかも)
※このツールはMITライセンスに基づいて公開されています。
細かい規約については LICENSE.txt ファイルを参照してください。
さいごに
色々書きましたが、まとめると
「ゲーム開発のスケジュールがヤバかったのでツール作ってなんとかしてみた」みたいな話でした。(ラノベタイトルみたい)
いかがでしたでしょうか?
今回ご紹介した内容は、あくまで私的な対処方法ですので、もしもっといいやり方を知ってるよ!って方がいらっしゃいましたら是非教えて下さい!(記事待ってます!)
また、ゲーム開発者でない方も、この記事を読んで少しでもゲーム開発に興味を持っていただけましたら幸いです。
というところで、このあたりで筆を置かせていただければと思います。
ここまで記事を読んでくださり、ありがとうございました!
今後とも『よむすけ』と『studio aila』をよろしくお願いいたします。
明日のアドベントカレンダーは・・・
明日のアドベントカレンダーの記事は『カビ布団』さんの『ノベルゲームを知らない人、ノベルゲームを作る』です。
個人的に今気になっているゲーム制作者さんなので記事の内容がとても楽しみです!(制作されてるゲームの内容が気になりすぎる)
Xをフォローして明日を楽しみにしましょう!
宣伝

弊サークルの新作『あまつそらに咲く』が11月28日に発売しました🎉
Steam / Switch / PS4のプラットフォームで販売中です。
頑張って作っていますので気が向いたら買ってください!
■公式HP:https://studioaila.com/amatsusora/
■Steam:https://store.steampowered.com/app/3074860/_/
■Switch:https://store-jp.nintendo.com/item/software/D70010000085171… ■PS4(DL):https://store.playstation.com/ja-jp/product/JP0741-CUSA50090_00-AMATSUSORANISAKU
よむすけ
2024/12/18