みなさまはソフトウェアインターフェイスとはご存知でしょうか。それはソフトウェアとソフトウェアの間の秘め事。お約束。会話。なのです。私はなんのご縁か主に会社に入ってからそればかり考えて生きてきたわけで、これをソフトウェアとソフトウェアの蜜月の恋愛関係を定義するR-18のお仕事と捉えるともはや私は恋愛の伝道師と呼ばれてもおかしくないかもしれないのですけれど、本当みんなこれ、下手くそですわ。おかわいいこと。
一般的にソフトウェアのインターフェイス設計においてバグを少なくしたければ、ステートレスで設計するべきだと言われています。(ここはいくらでも反例はあると思いますが、まあその振り上げた拳を一旦下ろしてコーヒーを淹れてきてください。今回はそこを議論する気はありません)まあ不思議なくらいに相手に状態を求める、いわゆる「彼は私の言ったことを一言一句覚えていなければならない」系のメンヘラ設計者が多すぎる。
今年に入ってうんざり二度目なので、なんでこんなにみんなソフトウェアインターフェイス設計が下手なのか真面目に考えてみました。過去の貧弱な通信帯域時代の負の遺産? いえいえ、違います。本当の原因は、我々人間の会話があまりにステートフルなものだからだと思うんですよ。例えばあいみょんが好きなアフロヘアーのボブと、Xのhideが忘れられない子犬みたいな目のナンシーがこんな会話をするとします。
ナンシー「おやつ何にする?」
ホブ 「ハンバーガーは?」
ナンシー「昨日も食べたじゃない」
ボブ 「冗談だよ」
ナンシー「チョコレートフォンデュは?」
ボブ 「今糖質制限中だから」
ナンシー「じゃあナッツにしましょう」
まあどこにでもありそうな会話でそういえば昨日バレンタインデーでしたね。それはさておき、ここでボブとナンシーが今流行りのAIだとします。ソフトウェアは突然充電が切れたり無線が切れたりします。これはどういうことかというと、上記の会話中に突然ボブかナンシーの頭をサイコパスと化した僕が日頃のリア充*1への恨みを込めてハンマーで殴って直前の会話が飛ぶかもしれないってことです。そんな殺伐とした状況下でもうまく動かないとバグって言われる世界で私たち生きてるんですよ。ひどくないですか。1000兆円ぐらい給料ください。では、殴ってみましょう。
ナンシー「おやつ何にする?」
ホブ 「ハンバーガーは?」
←ここでナンシーを殴ると「おやつ何にする?」からやり直し(セーフ)。
ナンシー「昨日も食べたじゃない」
←ここでボブを殴るとおやつ連続ハンバーガーバグ。
ボブ 「冗談だよ」
←ここでナンシーを殴るとナンシーがデブなボブとの離婚危機になるバグ。
ナンシー「チョコレートフォンデュは?」
←ここでボブを殴ると会話の戻り先がなくなるバグ。
ボブ 「今糖質制限中だから」
←ここでナンシーを殴ると糖質制限が終わるバグ。
ナンシー「じゃあナッツにしましょう」
お分かりですね。ほぼアウトです。離婚危機を避け糖質制限を守りおやつの話題を維持しつつナッツを選ぶことの難しさがお分りいただけましたか。1000兆円ぐらい給料ください。じゃあどうすればいいの? こうすればいいのです。
ナンシー「おやつ何にする?」
ホブ 「おやつはハンバーガーがいいかな?」
ナンシー「おやつはハンバーガーがいいというけれど昨日も食べたじゃない」
ボブ 「おやつはハンバーガーがいいというのは冗談だよ」
ナンシー「おやつはハンバーガーというのは冗談ならチョコレートフォンデュは?」
ボブ 「おやつがチョコレーフォンデュはやめて欲しい、今糖質制限中だから」
ナンシー「じゃあおやつはハンバーガーでもチョコレートフォンデュでもなくナッツにしましょう」
これですよ。ポイントは、すべての文章がそれだけ取り出して読んでも成り立つこと。これでどこで殴っても一個前の会話に戻ることでボブはナッツを食べることができるでしょう。無塩ナッツは食品添加物が入っていないので体にいいですからね。ソフトウェアインターフェース設計ってこれだけなんですよ。これだけなんですけれど、これを教えてもらう機会は公式にあった記憶がない。僕も教えてもらった記憶はなく、たまたま自然にこれを意識せざるを得ないフレームワークを作ったK.K.課長とたまたま作ってたHTTPの通信機能(HTTPは普通に使えばステートレスです。普通に使えば。そこ、URLに番号を振るな! いっぺんに送れば済むデータを2回に分けて送るな!!)の担当だったからなんとなく、分かっただけです。幸運でした。
というわけで、不幸にもソフトウェアの会話を取り仕切る不幸な役目になってしまった人はとりあえず、ステートレスで100回ぐぐってからやるように。
*1:久しぶりにこの言葉を使った