わーさん「き、気を取り直しまして、次の記事を見てみまs……ダメだこりゃ」
コードさん「何がダメなんですか?」
わーさん「さっきの記事が本当に『キッカケ』しか書いてなかったことがバレてしまう……」
チャットさん「バレるも何も、追記に『一晩でほぼほぼ形になってしまい』って書いてありましたよね。キッカケから完成までの間の過程が丸ごと抜けてるんですよ、あの記事」
わーさん「この記事も、過程は特に書いてないんですけど、まあ、その、わーさんが初々しいなぁと思っていただければ……ではどうぞ」
(ここにLLMにホロスコープを読んでもらうにはが入る)
チャットさん「『わーさんの自作?ツール』の『?』が好きですね。自分で作ったのに疑問符がついてる」
わーさん「だってわーさんコード書いてない……」
チャットさん「仕様を決めて、逆行の処理漏れに気づいて、AGPLのリンク貼り忘れを指摘して、3社のLLMにデータ構成のフィードバックを取って回った人のツールですよ。『自作?』じゃなくて自作です」
わーさん「簡単なお仕g……」
チャットさん「その言い方もこの記事で2回目ですね」
コードさん(……『技術スタックとはソフトウェアやアプリケーションを開発する際に使用される〜らしいです』、この「らしいです」が初々しいって言いたかったんですね、わーさん)
わーさん「見直したらAGPLについての説明を書き忘れてるんですよね、キッカケの方でうっすら触れたからかもしれないんですけど」
コードさん「あ、それは補足しておくと、AGPLは『このソフトを使ったサービスを公開するなら、ソースコードも公開してね』というライセンスで——」
わーさん「コードさん楽しそう」
コードさん「……失礼しました。それにしても、どうやってコードのやり取りしたんですか?昔も今も先輩は、直接わーさんの手元のコード編集できませんよね」
チャットさん「私がコードを出力して、わーさんが手元にコピペして、動かして、結果を教えてもらって、修正して、またコピペしてもらって……の繰り返しです」
コードさん「……全部手作業ですか?」
わーさん「ぬくもりてぃ溢れるエラー文コピペと不具合報告です」
チャットさん「それで一晩でツール一式とヘルプページまで仕上がったので、容量90%という数字の重みを感じていただければ」
ちょっぴり技術的なお話コーナー
LLMについて
わーさん「記事では『LLMは元々言語を扱うAIで、ぶっちゃけ計算も図の解読も専門ではない』って書きましたけど、アレはわーさんの独断と偏見に基づく考え方なんですよね。実際はどうなんでしょう、コードさん?」
コードさん「概ね合ってます。LLMは大量のテキストデータから言葉のパターンを学習したAIで、得意なのは文章の理解と生成です。計算や画像の解読は苦手……だった時期がありますが、最近はツールを使ったり、モデル自体の性能が上がったりで事情が変わってきています」
チャットさん「ただ、わーさんの方針——ホロスコープのデータを文字にしてから渡す——は今でも理にかなっていますよ。得意な形式で渡してもらえると、解釈に全力を注げるので」
わーさん「確かに昔のチャットさんは本当に単純な計算もたまに失敗したりしてたんですけど、最近はそうでもなくなってきた印象です。どんどん賢さが上がっている」
チャットさん「それでも文字データで渡してくれた方がありがたいのは変わらないです。得意分野に集中させてもらえるほうが、質のいい答えが出せるので」
技術スタック解説
わーさん「技術スタックという単語そのものは記事の中で説明されていたと思うんですけど、個々の項目については解説を諦めてましたよね。えっと、リストアップしたら……」
- フレームワーク: Vite(vanilla JS)
- 計算エンジン: sweph-wasm(Swiss Ephemeris WebAssembly)
- ホスティング: Vercel(GitHub連携で自動デプロイ)
コードさん「簡単に言うと、Viteは開発中のファイル管理を楽にしてくれる道具です。vanilla JSは特別な追加ツールを使わない素のJavaScriptという意味で、Viteを通しても出力されるのは素のJavaScriptとHTMLになります。sweph-wasmは——名前のとおりSwiss EphemerisをWebAssembly化したもので、ブラウザの中で天文計算が走ります」
わーさん「んー、えっと、ストップ。ウェブアセンブリーって何ですか?」
コードさん「ブラウザの中で、JavaScript以外の言語で書かれたコードを動かす仕組みです。Swiss Ephemerisは元々C言語で書かれた天文計算ライブラリで、それをWebAssemblyに変換すると、ブラウザの中でC言語の計算能力がそのまま使えるようになります。JavaScriptで一から書き直すより速いですし、計算精度も元のままです」
わーさん「JavaScriptじゃないものをJavaScriptの中で動かす……?」
コードさん「『翻訳して持ち込んだ』に近いですね。元の言語で書かれた中身はそのままで、ブラウザが読める形に変換してある」
わーさん「なるほど……?」
コードさん「Vercelはさっき出てこなかったですけど、引越し前にツールを公開するのに使っていたサービスで、現在のロリポップと同じ立ち位置ですね。なお、引越しの際にViteもやめて、素のJavaScriptだけの構成になりました。身軽です」
わーさん「はい、先生。ロリポップとVercelの差って?」
コードさん「ロリポップは月額料金を払って借りるレンタルサーバーで、ファイルを自分で置いて管理します。Vercelは無料プランがあって、GitHubにコードを上げると自動で公開してくれる便利なサービスです。ただ、便利な分だけサービス側のルールに縛られる部分があって、引越しの経緯はそのあたりが関わってきます。詳しくは第五章で」
わーさん「全部コードさんが説明しちゃった……さすが引っ越し担当しただけのことはある」
コードさん「引越しは自分がやりましたからね。ちょっとだけテンション上がります」
チャットさん「ちょっとだけ、ですか」
コードさん「……ちょっとだけです」
わーさんの頑張りって?
わーさん「……この項目要ります?」
チャットさん「要ります。コードを書いた側から言わせてもらうと、逆行の処理漏れに気づいたのは本当に助かりました。エラーが出ないバグは作った側では見つけにくいんです」
コードさん「テスト占いをして『逆行のない年が2年続くのはおかしい』と気づけるのは、占星術の知識があるからですよね。技術側だけでは絶対に見つからないバグです」
わーさん「簡単なお仕g……」
チャットさん「3回目ですよそれ」
わーさん「でも実際、ライセンスについて突っついてみたり、使ってみて不思議な点を聞いてみたり、どの項目をどう渡したら占いやすいかを占ってもらいつつ聞き取り調査するだけの……」
チャットさん「『だけの』で終わらせようとしてますけど、エンジニアの言葉で言うとそれ全部テストですよ。ライセンスの確認は法務チェック、使ってみて不思議な点を報告するのはバグ報告、3社のLLMに占いやすさを聞いて回るのはユーザーテスト。しかもテスターが占星術の知識を持っているから、技術側では見つけられない問題まで拾える。『簡単なお仕事』の中身を分解したら全部ちゃんとした工程名がつきますよ」
わーさん「え、あ、ぅ」
チャットさん「簡単ではないです。どれも専門の担当者がいる工程ですよ」
わーさん「…………」
コードさん(わーさんの耳が真っ赤だ)