JavaScript村 〜魔女との戦い〜

第一章 JavaScript村

JavaScript村には時々悪い魔女が現れて、村人たちを困らせていた。
この魔女の呪いにかかると、全てのやる気を奪われ、無気力な抜け殻のようになってしまうという。
ある日JavaScript村の村人たちはこの魔女を倒すため、覚悟を決めて魔女の住むプロミスの森へ向かった。

第二章 プロミスの森の入り口

村人たちはプロミスの森の入り口に到着した。
すると、森のすぐ脇を流れる小川のほとりで傷ついて弱ったカモノハシを見つける。
心優しい村人たちはカモノハシを急いで手当てした。
「これから魔女と戦うの?助けてくれたお礼にこれをあげるよ。」
カモノハシはそう言って「シングルスレッドの剣」と「ヒドウキの弓矢」を村人に渡した。

第三章 シングルスレッドの剣とヒドウキの弓矢

「ちょっと変わった形をしているがこれらの武器はどうやって使うんだい?」村人がカモノハシに尋ねると、カモノハシは優しく微笑みながら説明した。
「シングルスレッドの剣は、魔女の呪文を封じるのに役立つんだよ。魔女の呪いは複雑で絡み合っているけれど、この剣を使うことで一度に一つずつ解決できる。だから、焦らずにじっくりと向き合ってみるんだ。」
「一つずつか・・・なるほど。ありがとう!」村人の一人が剣を手に取り、強く握りしめた。
「ヒドウキの弓矢は、遠くから正確に魔女を射ることができるんだ。魔女は手ごわい相手だけど、この弓矢なら遠距離からでも攻撃できる。しっかりと狙って、集中して放つことが大切だよ。」
「そして、もう一つ」カモノハシは続けた。「魔女の魔法の杖、これを先に奪わないといけないよ。」魔女にダメージを与えてもすぐに魔法で回復してしまうので、まずは魔法の杖を奪わないといけないとカモノハシは説明した。「まずは、魔法の杖を封じることが大事なんだね・・・わかったよ。」
村人たちはカモノハシにお礼を言って、魔女の住むプロミスの森へと入っていった。

第四章 魔女の城

村人たちはシングルスレッドの剣とヒドウキの弓矢、そしてそれぞれが持ってきていた武器を手に、プロミスの森を進んでいく。まだ昼間のはずなのに森は薄暗く、道の先は霧がかかっているのかよく見えなかった。周りには見たことのない生き物がウヨウヨしていたが特にこちらに危害を加える様子がないので、村人たちは目を合わせないようにそっと通り過ぎた。

やがて森の奥深くに、地獄のような赤い炎に包まれた魔女の城が姿を現した。城といってもゴツゴツとした岩の塊のような場所で、岩の隙間からは炎が噴き出している。「恐ろしい・・・これが噂のコールバックヘル城か・・・」邪悪なエネルギーが漂い、引き返そうとする者もいたが、仲間たちは勇気づけ合った。

「みんな、前に進もう!!」先頭を行く村人がシングルスレッドの剣を高く掲げて力強く叫んだ。
「おぉー!!」他の村人たちも武器を高く掲げて、魔女の城へ向かって一斉に力強く歩き出した。

第五章 魔女との戦い

しかし魔女の城に足を踏み入れると、村人たちは次々と魔女の呪いにかかってしまった。無気力や混乱に襲われ、戦うことをやめたり、逃げ出すものがいた。
魔女は言った。「フフッ。お前たちの攻撃など効かない!全てこのundefinedの魔法で無力化してやるわ!」
「くそっ・・このままではやられてしまう・・・」
シングルスレッドの剣を悔しそうに見つめながら、諦めかけていたその時、カモノハシから言われた言葉を思い出す。「そうだ!まずは魔法の杖を狙うんだ!」
ヒドウキの弓矢を構えた村人にも戦意が戻ってきた。「よし、私があの木の後ろから魔女の杖をこの矢で射抜く!」カモノハシからこのヒドウキの弓矢はどんなに遠い距離からでも狙いをしっかり定めれば必ず届くと聞いていた村人は、魔女の死角になっている木の後ろに回り込んだ。
「よし、他のみんなは岩の後ろに隠れて!彼の矢が魔女の杖を封じてから攻撃するんだ!」
村人たちはヒドウキの弓矢を構える仲間を見つめて合図を待った。

バシッ!

ヒドウキの弓から放たれた矢は、魔女の杖を正確に射抜いた。村人たちは喜びと驚きに満ちた声を上げる。「これで魔女の呪いが解けるはずだ!」村人たちは魔女に向かって突撃した。
魔女は驚きと怒りの表情を浮かべ、「な、何をした!?」と叫んだが、魔法の杖が封じられてしまい、彼女のundefinedの魔法が効かなくなっていた。

魔女は魔法の効かなくなった杖を投げ捨て、呪文を唱え始めた。
「諦めの呪い」だ。
しかしシングルスレッドの剣を構えた村人が先頭に立ち、全ての呪文を一つずつ跳ね返していく。

そして魔女はとうとう追い詰められた。
跳ね返された諦めの呪いを自ら浴びてしまった魔女は戦うことを諦め、おとなしくなった。
村人はついに勝利したのだ。

JavaScript村に訪れた平和を村人たちはカモノハシと盛大に祝った。

おしまい


用語解説

シングルスレッド(Single Thread) ・・・ 物語の中ではシングルスレッドの剣として登場した。JavaScriptはシングルスレッドのプログラム言語である。スレッド(Thred)とはプログラムを実行する機能の単位のことで、シングルスレッドということはつまり、1つのタスクを実行している間、他のタスクを同時に実行することができない。コードの実行は基本的には上から下への順序通りに行われる。これがJavaScriptの特性だが、コードの途中に「APIで情報を取得」や「ファイルのアップロード」など時間がかかる処理が含まれていたらどうなるか?これが終わるまで次のコードに進まずページが固まるのでは困ってしまう、ということで用意されているのが非同期処理。

同期(Synchronous)・・・同期的な処理は、一つのタスクが完了するまで、次のタスクの処理が開始されないプログラムの実行方法である。コードは順番通りに1行ずつ実行される。前の処理が完了するまで次の処理は待たなければならない。JavaScriptはシングルスレッドのプログラム言語なので、同期的な処理となる。

非同期(Asynchronous)・・・物語の中ではヒドウキの弓矢として登場した。非同期処理とは、タスクが完了するのを待たずに次のタスクの処理を開始するプログラムの実行方法である。JavaScriptでは同期的な処理が基本となるが、決められた目印(コールバック関数、Promise、Async/Awaitなど)をつけておくと非同期的な処理を実現することもできる。非同期処理は主に、時間がかかる操作(例:ファイルの読み込み、ネットワークリクエストなど)や、イベントベースの処理(例:ボタンクリック、タイマーなど)で利用される。非同期処理はその処理が完了した後にどうしたいか、という部分と合わせて使われることが多い(「ファイルを読み込み終わったら表示する」、「タイマーが経過したらXXする」など)。

コールバックヘル(Callback Hell)・・・物語の中では魔女の住むコールバックヘル城として登場した。functionの中に別のfunctionを呼び出す方法でも非同期処理を実現できるが、ネストしすぎるとコードのデバッグや理解が難しくなる。そのような手に負えないような状況をCallback Hell(コールバックの地獄)という。Callback Hellを回避するために、PromiseやAsync/Awaitを使用して非同期処理を読みやすく、そして管理しやすいようにコードをなるべくフラットに保つことが重要。

Promise・・・物語の中ではプロミスの森として登場した。Promiseは今はまだ手元にないかもしれないけど、非同期でそのうちに手に入るはずの値(オブジェクト)のことである。Promiseを作成するためにPromiseコンストラクター(new Promise(resolve, reject))やAsync/Awaitを使った書き方がある。


Promiseとか、asyncとかについて真面目に調べていたはずなのに、
気がつくと、冒険ファンタジーを書いていた・・・これも魔女の呪いか?

類似投稿