Theme設計に迷い、Presetに裏切られ、Scene Pluginに救われた男の記録
前回、僕はドヤ顔でこう書いた。「リアルタイムで気持ちよく選べる制作環境を作った」……と。 は?今読み返すと、当時の自分を助走をつけて殴りに行きたい。
どんなに綺麗な言葉で飾ろうとも、やはりただの「デジタルゴミ箱」に過ぎなかった。Canvasに寄せ、StageStateを作り、Gallery UIまで分離した。ここまで来れば、あとは~と開発者特有の早口で自慢していた、そう思っていた時期が、私にもありました。
しかし蓋を開ければ「エフェクトを足すたびに壊れるガラクタ」だったのだ。
そこから始まったのは、エフェクトを増やす楽しい作業などではなく、「Themeとは何か」「Presetとは何か」という、もはや開発ではなく存在論のような地獄だった。
1. 「究極の設計」という名の美しすぎる地獄
最初の設計は、教科書に載せたいほど綺麗だった。
-
Theme: 見た目(色・フォント)
-
Preset: 動き(入退場)
-
Effect: 細かい部品
一見、理にかなった三権分立。だが、よく見ると「は?」だし実際に触ってみて即座に震えがくる。ユーザー(自分)は、そんなに賢くないし、そんなに暇じゃあない。 また繰り返しになるがユーザーがやりたいのは「なんかイイ感じに全自動」であって、「入場は wave_in、退場は shrink_out、待機は……」なんてチマチマした設定をパズルのように組み合わせることじゃないのだ。そんなことを普通の人間にやらせたら、だいたい途中でブラウザを閉じる。そして僕も閉じた。
本来の主役は Theme だった。 それは単なる色パレットではなく、文字サイズ、背景、演出、カメラ、読みやすさ……それらを一括で管理し、曲の展開に合わせて勝手に空気を読む「総合自動演出パッケージ」であるべきだった。
実は、この当たり前のことに僕は気付いていた、TextAliveを参考にして上位互換を目指しているから当然だ。そしてその設計思想をクロードコードとチャッピーに「設計思想」として伝え、二人にラリーさせながら「進めておいてな」。のほほんとコーヒーを飲んでいるといつしか、クリーチャーのようなアプリが出来上がり「次は何をしますか?」とドヤ顔でスリープに入る。
気付いた時には、俗にいう「設計変更」が勝手になされており、戻すのにまた大量のトークンを消費する。感情の高ぶりで波打つコーヒーの水面をスクショして送りつけると彼らはこう返す。
「それは大変ですね、アンガーマネジメント(感情コントロール)の提案をしましょうか?」
お前たちに必要なのは提案じゃない。黙ることだ。
少しでいい、黙っていてくれ。
興味本位でテストすると、ジェミニは沈黙できるらしい。
2. 「裏の部品棚」をメインステージに置く大失敗
迷走の副産物として、技術だけは無駄に進歩した。 エフェクトがカード形式でヌルヌル動く「Effect Gallery」を作ったのだ。ホバーすれば動く。最高にクール。 「名前だけの謎ドロップダウン」から脱出した瞬間、僕は「Appleを超えた」と確信した。
だが、それをメイン画面に置いた瞬間、ツールとして死んだ。 エフェクトが並んでいるのは壮観だ、だがそれは「職人が工場で使う部品棚」であって、当たり前だが客が買い物をする店頭に置くものではなかった。 選択肢が多すぎるのは、もはや暴力でしかない。UIとは本当に、性格の悪い恋人のように、良かれと思ってやったことが全て裏目に出るのですね。
3. 巨大Theme JSON案の死、そして「Scene Plugin」という救い
次に出てきた案が「Themeに全部入れる」構想だ。タイポグラフィから粒子、カメラ、セクション認識まで、全部Theme JSONに持たせようとした。 テーマプリセットを選べば全自動、思想としては正しい。
だが、パラメータは余裕で100個を超え、編集UIは阿鼻叫喚。 「TextAliveを超える」とか言いながら、僕はなぜか「巨大な設定ファイルを手でいじる地獄」へ向かって全速力で走っていた。
そこで思い出した。TextAliveの強みは、そもそも“コードで演出を書く”思想に近いことだ。 全部をJSONで表現する必要はない。演出はコードで書けばいい。 ここでようやく、私の脳内に「Scene Plugin」という概念が降臨した。
-
本体: 司令塔。歌詞とタイミングを渡すだけ。
-
Effect Plugin: 文字単位の入場・退場を担当。
-
Scene Plugin: 背景、粒子、カメラ、空間演出を担当。
この分離は、文字通り「救い」だった。 Sceneが文字まで握ると読みやすさが死に、Effectが背景まで触ると責務が死ぬ。 Theme JSONは「どのSceneとどのEffectを使うか」の指示書に徹する。これでようやく、凡人が死なない境界線を引くことができた。
というが、これもバカっぽいのでしっかり設計変更が待っている、それが救済か絶望なのかは捉え方次第でしかない。
4. 「空のコンテナ増殖事件」
設計を綺麗に整理した直後、バグという名の悪魔が湧いた。 シーンを切り替えるたびに、メモリの中に「透明なゴミ箱」がじわじわと増えていくのだ。 画面は動いている。しかし裏側では、何かが確実に、じわじわと増殖している。 「今はいいが、数分後にはブラウザごと死ぬ」という時限TNT爆弾。
原因は、オブジェクトの後始末がガバガバだったこと。 派手な演出を教える前に、まずは「脱いだら片付ける」という幼児教育から始める必要があった。でも「とりあえず実機動作を早く見たい」という欲望の制御は性欲と同等か凌駕するものだ。開発はもはや、ドラマでトイレに駆け込む男女か、又は手のかかる子育て……いや、毒親の先回り育児に近い。
5. サビで文字が「歌う」はずだった現実
ついに「サビ認識機能」が完成した。 サビに入ると背景がドクドクと脈打ち、文字が「今がサビだぞ!」と色づく。 入って出ていくだけの「字幕」から、歌に合わせて震える「演出」への進化!
……が、いざ検証してみると、用意したテストデータに「サビ情報」が一つも入っていなかった。 89行中0。清々しいほど無。 結局、手動で「ここがサビです、盛り上がってください!」という嘘のデータを力技で流し込んで検証した。その結果、機能もしなかった。理想は高いが、現場はいつも血生臭い。
6. 背景が派手すぎて、文字が「死」
サビ演出が完成し、画面がド派手なネオンに染まった。最高だ! ……そして、一文字も読めなくなった。 背景の主張が強すぎて、文字が完全に負けたのだ。これはバグではない。「仕様」という名の最悪の嫌がらせだ。
ここで「可読性」という、小学生でもわかる当たり前の概念にぶち当たる。 「派手にするが、文字は読ませる」。この矛盾と戦うのが、文字PVツールが背負うべき「十字架」なのだろうと再認識した。
7. まとめ:バグまみれのまま、1本「出た」
ここまで来て、ようやく1本PVを出した。
表示は怪しい、タイミングもガタガタ、まともに動作する演出が数個しかない。メモリ増殖の不安も拭えない。 だが、「設計上できる」と「実際に1本出る」の間にある深い沼を、私はズブズブになりながら渡りきった。
まともに動かない、バグで細かい調整不可、動画出力機構未実装ということで、3種類のパターンを普通に録画して編集で切り貼りしたという無駄の塊だ。正直なところ文字うんぬんよりもアスカ・ラングレーの心境を綴った歌詞に注目してもらいたい作品になった。
個人的にいいと思うのは、文字PVの主役である「動く文字」を脇役として扱えることだったりする。通常、文字の動きに入魂するのが文字PV、それが主役級となるのは普通だ。しかしドット単位、フレーズ単位で計算されつくしたプロの入魂作品よりショボくても、こいつはコスパで完全勝利する。なので動画編集のエフェクトの一つぐらいの感覚でぶっこむことに後ろ髪をひかれることがない。
これは「動くゴミ一歩手前」のプロトタイプだ。 だが、1本出したことで「本当に必要なもの」がようやく見えてきた。 「粒子が足りない」とか「カメラワークが……」という机上の空論ではなく、「文字が読めねえ」とか「文字サイズ変えれねぇ」という、剥き出しの現実だ。
開発とは、「できるようになったこと」がそのまま「新しい問題」になる無限ループだ。 完成を夢見てワクワクし続けるか、げぼが出るとブラウザを閉じるかの判断は人によるだろう。十年以上アーリーアクセスで開発を続けた7DTDを見れば、きっと開発陣はワクワクを永遠に維持していたのだと願う。ユーザーの要望にどこまで答えるか、自分らの欲求をどこまで反映するか、その都度開発の苦労など知る由もないクソユーザーのクソレビューにさらされようともだ。最終的に、正規リリースした2025年には、十年もやらせたのでユーザーがすでに遊び飽きていて「いろいろ何だったんだろう」とみんなで砂浜に体育座りする宿命だったとしてもだ。
改めてエンジニアの人たちへ敬意を表するべきと思うし、特に「いつもゲーム作ってくれてありがとう」と言いたい。
それでも僕たちはまた立ち上げり、バグまみれじゃない次の1本を目指してまたコードを書く(書かせる)。 読者の皆さんの人生もまた同じだと思う。「積み上げフェーズ」は、まだ、そしていつまでも始まったばかりだ。さらに言えば”今”が常にその「集大成」なのである。
※追記
この規模のアプリケーションは中程度の重量という評価だけど、クロードコードのプロプランでは全く歯が立たない。特にコードが増えてくる終盤、バグ取り、変更「あとよろしく~」を行うにはマックスプラン必須でまだ少し足りないという感触である。


