「空と君のあいだに」を実装する

始まり

「『空と君のあいだに』をシステム化して欲しいんです。」

その日、営業担当から依頼されたのは実に平凡な依頼であった。

かの有名な中島みゆきさんの名曲であれば、システム化を希望する顧客も多いだろう。 私は顧客に近い環境で働くシステム屋として、以前からその気配を肌で感じていたのだ。

「わかりました」と素っ気なく仕事を引き受けた私は、さっそく打ち合わせの準備に入るのだった。

顧客との打ち合わせ

翌日、顧客との打ち合わせが始まった。

今日の目的は要件定義だ。システムを作るためには、まず顧客の要望を聞き取る。 それを要件という形でまとめる作業を経て、ようやくシステムを作ることができるのだ。

顧客との打ち合わせの結果、特に重要とされた要件を優先して実装することになった。 その要件とは、以下の2つだ。

  • 君が涙のときには、僕はポプラの枝になる
  • 君が笑ってくれるなら、僕は悪にでもなる

この2つだけを実装するのであれば、難易度はそれほど高くない。 顧客からも「費用対効果の面で満足している」との回答を得られた。

次回の打ち合わせまでには、画面デザインを提示できるだろう。

実装開始

顧客から提示された要件を改めて眺める。

  • 君が涙のときには、僕はポプラの枝になる
  • 君が笑ってくれるなら、僕は悪にでもなる

これはつまり、「君」の状態に合わせて「僕」を変化させて欲しいということだろう。 早速PCに向かった私は、最初の画面デザインを作成した。

バージョン1の画面では、「君」が「涙のとき」である場合、「僕」の欄に「ポプラの枝になる」を表示する。

バージョン1: 君が涙のときに、僕にポプラの枝を表示
バージョン1: 君が「涙のとき」には、僕に「ポプラの枝になる」を表示

もちろん、「君」が「笑ってくれる」場合にも対応している。この場合、「僕」の欄に「悪にでもなる」を表示する。

君が笑ってくれるなら、僕に「悪にでもなる」を表示
君が「笑ってくれる」なら、僕に「悪にでもなる」を表示

最初のバージョンとしては十分な実装だろう。これを最初の案として顧客に見せることにした。

空と君のあいだに:バージョン1 - JSFiddle

フィードバック

「えーと、実はですね……」

顧客から帰ってきた反応は芳しくないものだった。どうやら要望から外れたものを出してしまったようだ。

しかしこれも織り込み済みの事態である。ここからフィードバックを得て、改善を積み重ねていくのだ。 早い段階で第1案を提案でき、フィードバックを得られたのはむしろ僥倖と言えよう。

改めて顧客から聞き取りを行った結果、以下の事実が判明した。

  • 「君」は泣き笑いをする

つまり「涙のとき」と「笑ってくれる」が同時に起こりうる、とのことだった。 なるほど、今の画面では泣き笑いを表現できない。

自社に帰った私は、このフィードバックを元に画面を改良した。

バージョン2の画面では、従来の機能を保持したまま「泣き笑い」に対応している。

まずは従来どおり、「君」が「涙のとき」には、「僕」の欄に「ポプラの枝になる」を表示する。

バージョン2: 君が「涙のとき」に、僕に「ポプラの枝になる」を表示
バージョン2: 君が「涙のとき」には、僕に「ポプラの枝になる」を表示

「君」が「笑ってくれる」なら、「僕」の欄に「悪にでもなる」を表示する機能も同様だ。

今回追加した機能として、「泣き笑い」にも対応している。 「涙のとき」と「笑ってくれる」が同時に起こっている場合、「悪のポプラの枝にでもなる」を表示するのだ。

バージョン2: 君が「涙のとき」かつ「笑ってくれる」場合に、僕に「悪のポプラの枝にでもなる」を表示
バージョン2: 君が「涙のとき」かつ「笑ってくれる」場合に、僕に「悪のポプラの枝にでもなる」を表示

これで顧客のフィードバックに対応することができた。 完成した画面を顧客に見せた時の反応も上々で、私はとても充実した気持ちで家に帰った。

空と君のあいだに:バージョン2 - JSFiddle

誤算

「空と君のあいだに」の実装も終盤に差し掛かったある日、その連絡は届いた。

「すみません、ちょっと相談が……」

電話口の営業担当の声が暗い。何か良くないことが起こったのは明白だった。 話を聞けば、どうやら顧客から仕様変更の依頼が来たらしい。

この時期にプログラムを変更するリスクは高い。 下手な仕様変更は避けたいところだが、かといって話を聞かないという選択肢もない。 的はずれな製品を納入した所で、それは顧客の役に立たないのだ。

私は急いで顧客の元に向かい、再度の聞き取りを行った。

仕様変更

問題があったのは、「僕は悪にでもなる」の部分であった。

ひとくちに「悪にでもなる」といっても、悪にならないケースもあり得るらしい。 実際に悪になるかどうかは、状況によって変わりうるそうだ。

これを受けて、悪になるかどうかの選択肢を「僕」に設ける改修を行った。

バージョン3の画面では、「君」が「笑ってくれる」ときに選択肢が現れる。 その選択によって、「僕」が悪になるかどうかを選ぶことができる。

バージョン3: 僕が悪になるかどうか、選択肢を表示する様子
バージョン3: 僕が悪になるかどうか、選択肢を表示する様子

ここで明示的に「僕」が「悪になる」ことを選択して初めて、「僕」は「悪になる」のだ。

バージョン3: 「悪になる」を選択した結果、僕が「悪になる」様子

もちろん以前のフィードバックも忘れていない。「悪のポプラの枝になる」機能も実装済みだ。 「君」が「笑ってくれる」かつ「君が涙のとき」に、「僕」が「悪になる」を選択すれば良い。

バージョン3: 僕が「悪のポプラの枝になる」様子
バージョン3: 僕が「悪のポプラの枝になる」様子

この画面を改めて顧客に見せたところ「今度こそ間違いない」との回答を得られた。 急な仕様変更であったが、どうやら上手く対応できたようだ。

空と君のあいだに:バージョン3 - JSFiddle

リリース、そして……

その後は大きなトラブルもなくプロジェクトが進み、無事に「空と君のあいだに」システムをリリースすることができた。 我が社の営業担当から聞いた話によれば、顧客の反応は上々なようだ。

しかし、今回実装したのは「空と君のあいだに」のうち一部に過ぎない。 最優先の機能は実装できたものの、まだ実装するべき機能が残っているのだ。

私は「空と君のあいだに」のシステム改修に向けて、今日も顧客との打ち合わせに向かうのだった……。

あとがき

ネタを思いついてしまい、ついカッとなってやった。今では反省している。

システムを作る際には「曖昧なところを確認して、明確な仕様を作る」という作業が必要だったりします。 その過程でこのようなやり取りがあったりするのです……という空気が伝わればいいなぁ。