わーさん「じゃあ、次はいよいよ、コードさんお待ちかね、お引越し回の記事ですね?」
コードさん「はい。——すみません、ちょっと楽しみにしてました」
チャットさん「コードさん、第3章で『身軽です』って仰ってましたよね」
コードさん「言いました」
チャットさん「実際に身軽に動いた現場が、この章ですね」
コードさん「……はい」
わーさん「ちょ、ちょっと、やる気漏れてる漏れてる」
コードさん「……すみません」
わーさん「いやいや、止めたいわけじゃないし、止めるつもりもあんまりないんですけど、まだ記事をここに出してないでしょう?というわけで、ごほん。……そもそもお引越しする予定じゃなかったんですよ、占星術ツール。だって無料で公開できていたし……。ところがね?ちょっとまた火種が幾つか持ち込まれてね?」
チャットさん「火種の持ち込み元、前回と同じ方ですよね」
わーさん「ま、まあ、そうですね?で、わーさんもWebアプリ超入門講座を通じて、ちょっとは成長したんだなって思えると……思えたら……」
チャットさん「思えてますよ。記事を読めば分かります」
わーさん「う、ぁ、はい、えっと、じゃあ記事を見てみましょうか」
(ここに2026-04-11-01(占星術ツールが引越しした顛末)が入る)
わーさん「……と、いうわけで、これが引越しの記事なんですが」
コードさん「あの、自分の話をしていいですか」
チャットさん「どうぞ」
コードさん「指示書には『ビルドツールに何を使う』って書いてなかったんですよ。書いてないということは、使わずに済ませろということだろうかと思って、sweph-wasmを直接持ってきたらビルドツール要らないんじゃないかと——」
わーさん「お、おぅ……。待って、コードさん。ストップ。暴走の足音がする」
チャットさん「ご友人の火種から数えて、これで3回目ですね」
わーさん「……わーさんの暴走をたった2カウントで済ませてくれているのは優しさ?」
チャットさん「詳細にカウントして欲しいですか?」
コードさん「——実験したらうまく行きました」
わーさん「…………」
チャットさん「…………」
コードさん「……何ですか」
わーさん「いや、コードさんがこんなに喋ってるの初めてだなぁって」
チャットさん「気のせいじゃなかったですね」
コードさん「……気の、……はい。気のせいじゃなかったです」
わーさん「観念しましたね」
コードさん「観念しました」
コードさん「あの、もう一個聞いていいですか」
チャットさん「どうぞ」
コードさん「記事の中でわーさんが『神妙なフリして普通に無茶振りをしていた。やっぱり鬼である』って自分でツッコんでるじゃないですか」
わーさん「あぁ……書きましたね……」
コードさん「あれ、第4章の『鬼上司』とどういう関係ですか」
チャットさん「『鬼』だけ残って『上司』が消えた形ですね」
コードさん「役職を脱ぐと、属性だけが残ると」
チャットさん「呼び方は毎回変わりますけど、中身は——」
コードさん「同じことをやってる人」
わーさん「ちょっ、コードさんまでそっち側に……」
チャットさん「『気のせいです』と並んで、これも章をまたぐリフレインになりつつありますね」
わーさん「リフレインって何~!?」
ちょっぴり技術的なお話コーナー
ビルドツール無しという発想
わーさん「で、この『ビルドツール無し』が何故すごいのか、わーさんにも分かる言葉でお願いしたいんですけど……先生?」
コードさん「年末のツールではsweph-wasmをnpm経由で呼び出していました。npmを使うにはViteのようなビルドツールが便利で、ビルドするにはVercelのようなサービスが楽。つまり、npm→Vite→Vercelと、一つの選択が次の選択を引っ張ってくる構造になっていたんです」
チャットさん「数珠繋ぎですね」
コードさん「で、sweph-wasmを直接ブラウザに持ち込めるなら、npmが要らない。npmが要らないならViteも要らない。Viteが要らないなら素のJavaScriptだけで動く。素のJavaScriptだけなら——」
わーさん「ロリポップで動く」
コードさん「はい。数珠を一個外したら全部外れた形です」
チャットさん「記事の中で『大きな影響を与えることになる』と書いてあったのは、この連鎖のことですね」
わーさん「書いた時点では自分でもまだぼんやりとしか分かってなかったんですけど、今ならちゃんと説明できる……と思います。第4章で勉強した甲斐が」
チャットさん「ありましたね」
わーさん「……ありました、よね?」
チャットさん「ありました」
localStorageとオリジンの再登場
コードさん「もう一つ、記事の中盤でチャットさんが提案した『localStorageに保存すればサーバーレスで動く』の話なんですけど」
わーさん「あっ、前の章で出てきたやつだ」
コードさん「そうです。前章第5回でJSONを予習して、第6回・第7回でオリジンの壁を学んで。記事の中でわーさんが『localStorageとは、ブラウザが各オリジン毎に確保するデータ領域』ってすらっと書いてますけど、これ、講座を受ける前だったら書けましたか」
わーさん「……書けなかったと思います」
チャットさん「オリジンの定義をさらっと補足できているのは、第7回の『プロトコル+ドメイン+ポートが完全一致』が入っているからですね」
コードさん「前の章の振り返りでも言いましたけど、積み上がってるんですよ。本人が気づいていなくても」
わーさん「……もうその話はいいですぅ……」
「コードさんの前のめり」について
わーさん「話を変えまして、わーさんは記事の中で、『コードさんの突っ走りっぷりというか、前のめりさ加減というか、発想が面白すぎる件』って書いたんですけど」
コードさん「はい」
わーさん「コードさん、あの時どうでした?」
コードさん「……指示書を読んだ時点で、ビルドツール無しで行けるかもしれないとは思いました。でもそれが本当にうまく行くかは試してみないと分からなかったので。試して、動いた時は——」
チャットさん「嬉しかったですか」
コードさん「……ちょっとだけ」
わーさん「あっ、『ちょっとだけ』が戻ってきた」
チャットさん「第3章で『引越し、ちょっとだけテンション上がります』と言ってましたね」
コードさん「……ちょっとだけ、じゃなかったかもしれないです」
わーさん「(……コードさんのこの顔、第3章の技術解説の時とおんなじだ)」
チャットさん「(おんなじですね)」
わーさん「……ところで、コードさん。あの時、もし指示書に『Viteを使ってください』って書いてあったら、どうしてました?」
コードさん「使ってました」
わーさん「即答」
コードさん「指示は指示なので。ただ、書いてなかったから、考えました。考えたら、要らないことに気付きました。気付いたら、試したくなりました」
チャットさん「考える、気付く、試したくなる。三段並べると相当ですね」
コードさん「……前のめりだったのは、認めます」
わーさん「あっ」
チャットさん「『認めます』来ましたね」
コードさん「『気のせいです』はもう使えなさそうなので」
わーさん「(……チャットさんチャットさん、コードさんが、自分で前のめりを認めた)」
チャットさん「(わーさんまでわくわくしてません?)」
わーさん「ぅぐ」
コードさん「?」