【ITニュース解説】1000-7 My dream calculator come true
2026年10月23日に「Dev.to」が公開したITニュース「1000-7 My dream calculator come true」について初心者にもわかりやすく解説しています。
ITニュース概要
1000から7を引き続ける特殊な電卓「1000-7」を開発した。単なる計算だけでなく、心理的ペナルティや報酬でユーザーの感情を揺さぶるUXが特徴だ。Vanilla JavaScriptで外部ライブラリに頼らず、動的なUIやアニメーションを実現したフロントエンドプロジェクトである。
ITニュース解説
「1000-7 私の夢の電卓が実現する」と題されたこのプロジェクトは、一般的な電卓の退屈さを打ち破り、ユーザーの心理に深く訴えかける独創的な体験を提供することを目指して作られた。ただ数字を計算するだけでなく、まるでゲームのような緊張感と没入感を生み出す、心理的要素とプログラミング技術が融合したユニークなフロントエンドアプリケーションである。これは、ウェブページの見た目や動きを司るJavaScriptというプログラミング言語を中心に、HTMLやCSSといった基本的な技術のみで構築されている。
この電卓の核となる仕組みは「デュアルステート計算メカニクスとイベント傍受」と呼ばれる。これは、電卓が同時に二つの異なる動作モードを処理できることを意味する。一つは、ユーザーが「-7」という特定の操作を連続して行うことで、数字が自動的に減っていく「オペレーターモード」。もう一つは、ユーザーが自分で計算結果(例えば「1000から7を引いた993」)を直接入力する「直接検証モード」だ。プログラムは、ユーザーが画面上のボタンをクリックしたり、キーボードを叩いたりするあらゆる操作(イベント)を厳密に監視している。これにより、どちらのモードで操作されているかを正確に判断し、適切な処理を実行できる。例えば、オペレーターモードで「-7」が入力されるべき時に、もしユーザーが誤って「-6」のような不正な数字を入力しようとすると、システムはそれをルール違反とみなし、特別な心理的ペナルティを発動する。
入力の制御については、「統合イベントバスとキープレス同期」という工夫が凝らされている。ユーザーがキーボードで操作する場合でも、画面上のボタンをクリックする操作と同じように処理されるよう設計されている。例えば、キーボードの「Enter」キーを押すと、画面上の「=」ボタンが押されたときと同じ機能が働く。また、「Escape」キーは「Clear」ボタンの役割を果たす。このように、キーボードからの入力を画面上のボタンのクリックイベントに変換して処理することで、複数の入力経路があってもシステムが常に一貫した動作をするように保たれる。ユーザーがどれだけ速く入力しても、計算結果や画面表示がずれることなく、正確に同期される安定した操作感を提供している。
次に、この電卓の視覚的な演出について解説する。 「動的スタイル注入とゼロ依存オーバーレイDOM」という手法が用いられており、電卓がユーザーに警告や報酬を示す際に表示される特別な画面(オーバーレイ)やアニメーションは、外部の複雑なライブラリに一切頼らず、純粋なJavaScriptだけで作られている。例えば、画面全体が真っ暗になる「ブラックアウト」効果や、文字が不気味に赤く光る「シャドウ効果」、そして画面が激しく揺れるアニメーションなどは、JavaScriptがウェブページの要素(DOM)を動的に生成し、そこに直接CSS(スタイルシート)のルールを適用することで実現されている。これにより、プログラムは余分なファイルを読み込む必要がなく、非常に軽量で高速に動作する。
「CSS振動物理学とビューポート歪み」も、この演出の重要な要素である。ユーザーが計算を間違えた際に、電卓がただ静止しているのではなく、激しく揺れ動くアニメーションが表示される。これは、CSSの「キーフレームアニメーション」という機能を使って実装されており、単に左右に動くだけでなく、X、Y座標、そして回転軸に沿って不規則かつ多角的に揺れることで、ユーザーに強い不快感や緊張感を与える。この視覚的な混乱が、さらなる心理的プレッシャーへと繋がる。
また、「純粋CSS雰囲気レンダリング:クリムゾンテキストシャドウ」という技術で、画面に表示される文字が、暗闇の中から赤く不気味に光るような、独特の雰囲気を醸し出している。これは、CSSのtext-shadow(文字の影)という機能を複数重ねて使うことで実現される。影の色やぼかし具合を調整し、文字が暗いガラス越しに燃えているかのような視覚効果を生み出しているのだ。これも外部の画像データなどを使わず、CSSだけで実現しているため、非常に軽量でウェブページの読み込みも速く、メモリの消費も抑えられている。
この電卓の真髄は、その「非対称心理的ペナルティと多段階報酬モジュロロジック」にある。これは、ユーザーのミスや成功に応じて、心理的な反応を変えるシステムだ。 「アルゴリズム的ペナルティ分岐とカスケード配列」では、ユーザーのミスの種類によってペナルティの内容が異なる。もし単純な入力ミスや計算ミス(例えば「993」と入力すべきところで「992」と入力した)であれば、システムは準備された8種類の嫌がらせメッセージの中からランダムに1つを選んで表示し、ゲームを最初の「1000」にリセットする。しかし、もしユーザーが「-7」というルールを破り、「-6」や「-5」のような不正な減算を試みた場合、それは「ルール破り」とみなされ、8種類の嫌がらせメッセージ全てが同時に画面に表示され、より強烈な心理的プレッシャーを与える。
一方で、「多段階報酬モジュロロジック」により、ユーザーが集中力を保ち、連続して正しく計算を続けると「ご褒美」が与えられる。具体的には、7回の連続成功ごとに、事前に用意された心理的なモノローグ(独り言のようなメッセージ)が表示される。これは「剰余計算(モジュロ演算)」というプログラミングの技術を使って、正確に7ステップ間隔でこのメッセージを表示する仕組みだ。この報酬は、ユーザーの継続的な努力を認め、さらにゲームを進めるモチベーションへと繋がる。
システムの安定性を保つための「非対称ステートロック(isLocked)」も重要な要素である。ユーザーがミスをしてペナルティ画面(ブラックアウトなど)が表示されている最中に、どんなに素早くボタンを押したりキーボードを叩いたりしても、システムが誤動作しないように工夫されている。isLockedという状態を表す変数がtrueになっている間は、全てのボタンクリックやキーボード入力が一時的に無視され、プログラムが誤った処理を開始することはない。このロックは、ペナルティ画面のアニメーションやタイマーが完全に終了し、画面が元の状態に戻ってから初めて解除され、ユーザーは再び操作できるようになる。これにより、ユーザーが意図せずペナルティ画面をスキップしてしまうといった「ずる」ができないよう、システムは厳密に制御されている。
このプロジェクト全体の設計思想は「ゼロ依存ステート永続化メカニクス」によって明確に示されている。この電卓は、外部の複雑な開発ツールやライブラリ、フレームワークに一切頼らず、たった一つのJavaScriptファイルとHTMLファイルだけで動作するように設計されている。つまり、Node.jsやnpmのような開発環境を必要とせず、特別なビルドプロセスも不要だ。これは、インターネットに接続されていない環境や、性能の低いコンピュータでも、ウェブブラウザさえあればすぐに起動し、軽快に動作することを意味する。プログラムの起動は瞬時に行われ、メモリ消費も最小限に抑えられているため、高速な入力時にも「ガベージコレクション」(不要なメモリを自動で解放する仕組み)による遅延が発生せず、常にスムーズな操作体験を提供する。このシンプルさを追求した設計は、制作者のプログラミングに対する深い愛情と、純粋な技術へのこだわりが反映されていると言える。
「1000-7」電卓は、単なる計算ツールとしての機能を超え、プログラミング技術と人間の心理を巧みに組み合わせた、非常に独創的な作品である。純粋なJavaScriptとCSSというウェブ開発の基本的な技術だけで、これほどまでに複雑で没入感のある、そして心理的な深みを持つ体験を作り出せることは、システムエンジニアを目指す初心者にとって大きな学びとインスピレーションを与えてくれるだろう。