皆さん、こんにちは。あんちゃんです。今日は、音楽ゲーム『タイポニカ』のいちばん最初のバージョン(初代 v1.0.0・和音版)にまつわる、ちょっと恥ずかしい開発の裏話をさせてください。じつはこの初代、和音(複数のキーを同時に押す)で弾けることを本気で狙って作った「和音版」だったんです。ところが実際に自分で遊んでみたら——「和音なんてキーボードで打てないよ!」と、いきなり最初のつまずきにぶつかりました。これは、そのタイポニカ 初代 和音版という原型が生まれて、そして単音版へ方向転換するまでの、いちばん前の話です。しかも今回は、その初代 v1.0.0そのものを記事の中に埋め込んでおいたので、実際に触って「たしかに和音は打ちにくい!」を体験してもらえますよ。

この記事は「原型(プロトタイプ)の開発秘話」です。いま公開している完成版タイポニカとは別物の、いちばん最初の和音版を触れるようにしてあります。うまくいかなかった話なので、そこは笑いながら読んでもらえるとうれしいです!
初代タイポニカ v1.0.0は、じつは「和音版」でした
そもそものはじまりは、ぼくのこんな思いつきでした。「キーボードの各キーにドレミを割り当てて、ピアノみたいに演奏できたら楽しいよな」と。そこまではよかったんです。問題はこの次で、「せっかくピアノなんだから、和音で弾けたほうが本格的だろう」と考えてしまったこと。ピアノ曲って、右手でメロディを弾きながら左手で「ジャーン」と和音を鳴らしますよね。あのリッチな感じをそのまま再現したくて、複数のキーを同時に押す和音のノーツを、思い切って入れてみたんです。それが初代タイポニカ v1.0.0、つまり「和音版」でした。
きっかけは「ピアノなんだから和音で弾けたら本格的だろう」
この時点のぼくは、けっこう自信満々でした。上から和音のノーツが落ちてきて、それをタイミングよく「ジャーン」と押すと、ピアノらしい厚みのある音が鳴る——想像しただけでワクワクしますよね。単音でメロディをなぞるだけより、和音が入ったほうが絶対にゴージャスで気持ちいいはずだ、と。楽器の演奏って、単音のメロディをポツポツ鳴らすより、和音がドンと入ったほうが一気に「曲」らしくなりますよね。あの厚みを、キーボードでも出したかったんです。いま思うと、頭の中の「弾いている自分」がすでにピアノをスラスラ弾ける前提になっていたんですよね。ピアノなら10本の指をそれぞれ別の鍵に置いて、パッと和音を押さえられます。でもタイピングの手は、そういう構えをしていません。キーボードで和音を「打つ」のがどれだけ大変か、この時のぼくはまったく想像できていませんでした。
中段=白い鍵、上段=黒い鍵、下段=低い音。キー配置は初代から共通です
音階の並べ方は、この初代v1.0.0のときにもう決めていて、じつはそこから今の完成版までずっと共通です。キーボードの中段(ホームポジションの列)にドレミの白い鍵を、上段を黒い鍵(♯の音)、下段を低い音に割り当てました。A・S・D・F…と並んだ中段が、ちょうどピアノの白鍵になるイメージです。たとえば「きらきら星」なら、中段のキーだけで最初のドドソソララソ…がなぞれる、という具合ですね。ホームポジションに指を置いたまま弾ける曲は、いちばん入りやすいようにレベル1にしました。この配置自体はうまくハマったと思っていて、和音をやめたあとの単音版でも、いまの完成版でも、そのまま生き残っています。つまずいたのは配置ではなく、あくまで「和音を同時に押させようとした」ところだったんです。だからこそ、この記事では配置の話ではなく、和音そのものの話をしています。
これが初代の和音版そのもの。触ると「打てなさ」が分かります
言葉で「和音が打ちにくかった」と説明するより、実際に触ってもらうのがいちばん早いです。というわけで、下に初代タイポニカ v1.0.0(和音版)そのものを埋め込んでおきました。これは今の完成版ではなく、いちばん最初の原型です。特に草競馬(レベル4)あたりで和音のノーツが出てきます。実際に触ってみると、「和音を狙って複数のキーを同時に、しかもタイミングぴったりに押す」のがどれだけ難しいか、指で分かってもらえるはずですよ。よかったら少し遊んでから、この先を読み進めてくださいね。
▶ 初代・和音版(v1.0.0)を全画面で遊ぶ(別タブで開く)
収録は5曲。特に草競馬(レベル4)に和音ノーツが入っています
初代v1.0.0に入れた曲は5つ。きらきら星(レベル1)、メリーさんの羊(レベル1)、歓喜の歌=第九(レベル2)、猫踏んじゃった(レベル3)、そして草競馬(レベル4)です。どれも作曲者が亡くなって長い年月がたった、著作権フリー(パブリックドメイン)の曲を選んでいます。この初代v1.0.0では、特にいちばん難しい草競馬(レベル4)で、けっこうな回数「複数キー同時押し」の和音を要求されます。触ってもらうと分かるのですが、単音のところはまだしも、和音が来た瞬間に手が「え、どれとどれ?」と固まるんですよね。ゆっくりな曲ならまだ間に合っても、テンポの速い草競馬だと、和音を押さえにいっている間に次のノーツが来てしまう。この「固まる感じ」こそが、ぼくが最初にぶつかった壁でした。ぜひ草競馬まで進んで、この壁を体験してみてください。
和音のデータは、コードでいうとこの部分です
ちょっとだけ中身の話をさせてください。初代では、1つのノーツに複数のキーを持たせるために、譜面(曲のデータのこと)に「G B」のようにスペースで区切って書いておいて、split(” “)という命令で [“G”,”B”] という並び(配列)にバラしていました。1ノーツに複数キー、というわけですね。判定のほうは「全部のキーが押されたか」を確かめて、押されていれば、いちばんタイミングがズレた打鍵で良し悪しを決める、という作りです。この「複数キーを一度にそろえて押させる」ところが初代の肝で、あとでまるごと撤去することになった仕組みでもあります。
// 譜面データ:[拍, "キー"]。和音は "G B" のようにスペース区切り(同時押し)
[0,"G B"],[1,"G"],[2,"D"],[3,"G"],[4,"H"],[5,"G"],[6,"D Z"],
...
keys: n[1].split(" "), // "G B" を ["G","B"] に分解(1ノーツに複数キー)
pressed: {}, // キー→押した時刻(和音用)
...
// 和音:全キーが押されたら、最もズレた打鍵で判定
var all = true, worst = 0, k;
for(k = 0; k < best.keys.length; k++){
var pk = best.pressed[best.keys[k]];
if(pk === undefined){ all = false; break; }
worst = Math.max(worst, Math.abs(pk - best.sec));
}
if(all){ applyJudge(best, judgeOf(worst) || "good"); }
動くものはできて、この時点ではまだ満足していました
正直に言うと、初代が動いたときは「おっ、それっぽいのができたぞ!」とけっこう満足していたんです。曲は鳴るし、和音の判定もちゃんと動く。見た目にも「本格的なピアノゲーム」っぽい。作り手としては、この時点ではまだ失敗にまったく気づいていませんでした。落とし穴は、自分でくり返し遊んでみて、はじめて口を開けて待っていたんです。
やってみて分かった「和音なんてキーボードで打てないよ」
初代を何度も自分でプレイしているうちに、ぼくははっきり気づいてしまいました。「あれ、和音ってキーボードでは打てないぞ……」と。ワクワクして入れたはずの和音が、遊べば遊ぶほど、いちばんの「楽しくない原因」になっていたんです。ここからは、あくまでぼくが実際に触ってみて感じたことなので、技術的にこうだと断定できる話ではありませんが、正直な体感として書いておきますね。
タイピングは1キーずつ打つ動作。同時押しを狙って正確に叩くのは難しい
よく考えたら当たり前の話なんですが、ぼくらがキーボードで文字を打つとき、基本はいつも1キーずつですよね。「あ・い・う・え・お」と、指は1つずつキーを叩いていきます。ところがピアノの和音は、2つ3つのキーを「同時にピタッと」押す動作。この2つは、同じキーボードを使っていても、指の使い方がまったく別物なんです。しかも音ゲーなので、ただ同時に押すだけでなく、流れてくるノーツのタイミングにも合わせないといけない。「複数のキーを・同時に・タイミングよく」——この3つを一度に成立させるのが、思っていたよりずっと難しかったんです。
指がもつれて、練習にも音ゲーの気持ちよさにもつながらない
実際にやってみると、和音のノーツが来るたびに指がもつれて、片方だけ早く押してしまったり、狙ったキーの隣を叩いてしまったり。「ジャーン」と気持ちよく鳴るはずが、「ジャ…ラン」とバラけてしまうんですよね。しかも「次はどのキーとどのキーだっけ」と考えているうちに、判定ラインはどんどん過ぎていってしまう。単音なら反射でポンと押せるところが、和音になった途端に一拍止まってしまうんです。これだと、タイピングの練習にもならないし、音ゲーとしての「決まった!」という気持ちよさも味わえない。むしろ「うまく押せなかった」というストレスばかりが残ります。和音を入れたことで、かえって遊びも練習も両方だめになっていた、というのが正直なところでした。ちょっと悔しいですが、これも実際に自分で作って遊んでみたからこそ分かったことです。頭で考えているだけでは、たぶん一生気づけなかったと思います。

だから次の一手は「和音を全部やめる」でした
ここでぼくは、思い切った決断をしました。せっかく入れた和音を、ばっさり全部やめることにしたんです。自信満々で作った目玉機能を撤去するのは、正直ちょっと勇気がいりました。でも、遊んで楽しくないものを「本格的っぽいから」という理由だけで残すのは違うな、と。原型でつまずいたからこそ、次に進む方向がはっきり見えました。
次のv1.1.0で和音を撤去して、打つのは単音だけにしました
次のバージョン(v1.1.0)では、和音(同時押し)のノーツを完全にゼロにしました。プレイヤーが打つのは、いつでも1キーずつの単音メロディだけ。その代わり、コードやベースといった伴奏の部分は、ゲームが自動で演奏してくれるように作り替えたんです。これなら「1キーずつ打つ」というキーボード本来の動きに素直で、指がもつれることもなくなりました。この和音をやめた単音の試作機については、別の記事で「じゃあ単音にしたら今度はどうだったの?」という続きの話を書いています。よかったらそちらもどうぞ。

そして、いまの完成版タイポニカ(v1.2.0)にたどり着きました
和音をやめて単音にしたこの気づきが出発点になって、そこからさらに調整を重ねて、いま公開している完成版タイポニカ(v1.2.0)にたどり着きました。「キーボードで曲を奏でて楽しむ音楽ゲーム」として、無理のない等身大の形に落ち着いた感じです。完成版は下の記事の中にそのまま埋め込んであって、ブラウザで、しかも無料ですぐ遊べます。この初代の和音版を触ったあとに完成版を遊ぶと、「ああ、単音だとこんなに素直に打てるのか」という違いがよく分かると思いますよ。

最初のつまずきも、正直に残しておきます
というわけで、「ピアノなんだから和音で弾けたら本格的だろう」と意気込んで作った初代タイポニカ v1.0.0(和音版)が、「和音なんてキーボードで打てないよ」といきなり最初のつまずきにぶつかり、そこから単音版へ、そして完成版へと進んでいった——という、いちばん前の原型の話でした。かっこいい成功談ではありませんが、この最初のつまずきがなかったら、たぶん今のタイポニカにはたどり着けていません。失敗も含めて、原型として正直に残しておこうと思います。
ちなみに、AIのClaudeと一緒にブラウザゲームを作るこのシリーズ、前にはテトリスも作っています。そちらは「スタートボタンは押せるのにゲームが始まらない」という怪奇現象と格闘した、これまた濃い開発の裏話です。うまくいかなかった過程を正直に書くつながりで、よかったらこちらものぞいてみてくださいね。


最初のつまずきも、こうやって正直に書けてスッキリしました!和音版を触って「たしかに打てない!」と笑ってもらえたら、そのあとは完成版で気持ちよく曲を鳴らしてみてね。まずは「きらきら星」からどうぞ!


コメント