[0][4] = "カレンダーコンポーネント異常終了事件{5}"
「部長、ただ今戻りました」
人の少なくなったオフィスでは部長が帰り支度をしていた。
「ああ、戻ってきてくれたか。急に呼び出してすまなかった。せっかくセルビ銀行の仕事がすぐに終わったのに」
彼はほっと息を吐いて、デスクに立て掛けられた大きなスーツケースを握った。
「また新しい仕事が入ってきてしまった。顧客によると、明日リリース予定のサービスに致命的なバグが眠っていたらしい。明日の朝までに原因を突き止めてくれとの依頼で、今佐倉君が対応しているが難航しているようだ。やってくれるか?」
「わかりました。命に代えても解決してみせます」
そう言うと、部長は首を横に振った。
「いや、命なんてかけなくていい。こんな仕事を頼んでおいてなんだが、自分の身を大事にしてくれ」
「ですが放置していては、また十年前のようにALISAに取り込まれるかもしれません」
「その通り。だけど、一日二日でどうにかなるものでもないだろう。他の支部に頼むこともできるから、自分の健康の範囲内でできる限りのことは頼む」
「承知しました」
「私はこれから、欧州ALISA対策会議に行かなければならない。すまないが、後のことは任せた。あとこれを」
そう言って部長が手渡してきたのはなにか英数字が書かれたメモだった。
「御園君のパブリックナンバーだ。必要であれば彼も呼んでくれ」
「来ても役に立ちませんよ、彼」
「その辺は君の判断に任せる。あと終わったら佐倉君ともども代休を取ること、前みたいに二日も三日も徹夜するのは許可しない。わかったね?」
「承知しました」
そう言うと、部長は重そうなスーツケースを転がしながら執務室を出て行った。
私は部長から転送されたテキストメッセージを見ながらコンピューターで開発環境構築用のコマンドを叩くと、佐倉さんのデスクへと向かった。
「進捗どうですか?」
彼女はいつもよりも白い顔をこちらに向けると、ぱっと花が咲いたような笑顔を見せた。
「ノズちゃん、来てくれたんだ。ゴメン、帰るところだったのに……」
「いいですよ。それより進捗はどうですか?」
「今、がんばってるところ」
「がんばってるとかじゃなくて進捗を訊いてます」
「ええと……」
この様子だとなにも進んでないのだろう。仕方ない。適任でない人にこんな仕事を振るのが悪いんだ。佐倉さんが悪いわけじゃない。
「今、この前ノズちゃんに教えてもらった通り、問題の整理をしてるの」
「じゃあそれを教えてもらえますか」
「う、うん。わかった」
彼女は大きな目をモニターに向けて、ファイルに書かれている文章を読み上げた。
「本問題は、カレンダーコンポーネントになにか特定の値を入れたときにアプリケーションごと終了してしまう問題である」
カレンダーコンポーネントというのは、画面上でカレンダーを使って日付を入れる部品のことだ。直接入力と選択式の両方をサポートしないといけないこと、国ごとに表示方式が違うこと、暦自体の仕様が難しいことから、よく問題が起こりやすい部分ではある。
「本カレンダーコンポーネントは入力として西暦と和暦の両方をサポートしており、内部的にはすべて西暦でデータを保持している」
「え、今時、和暦とかあるんですか?」
「そうみたい……これお役所向けにデータ連携もしてるシステムらしいから仕方ないのかも……」
「なるほど。続けてください」
「コンポーネントはバイナリとして提供されており、ソースコードは存在していない。また開発者も既に退職しており、誰も仕様を理解していない」
「ソースコードがない? なんでそんなコンポーネント使おうと思ったんですか」
「そんなのわからないよ。でも先方の人がそう言ってるから」
「それで他には?」
「今のところそれだけ……。あ、あと動作環境は作っておいたの、あとでアドレスを送るね」
「わかりました、取りかかります」
「ごめんね。ノズちゃん。私、がんばるから」
私はまずは先方と佐倉さんのやり取りに目を通した。概ね佐倉さんのまとめた内容で間違いはなさそうだ。一番大きな問題は、どの値を入れれば事象が発生するかがわかっていない、ということだ。
このバグが起こるケースとして思いつくのは以下のようなパターンだろうか。私は愛用のノートに一つ一つまとめていった。
1.元号の切り替わるタイミングなど境界値付近の処理が間違っている
2.記号・英数字しか入力できないところで、ひらがな、カタカナなどでの入力を許容してしまっている
3.半角ハイフン、スラッシュなど記号の処理が上手くいっていない
4.欧米のように、22/12/2012のような表記をしたときに意図しない問題が発生する
5.2012年3月2日を201232のようにゼロ埋めせずに年月日を入力したときにエラーが出る
6.その他、UIの処理による異常
可能性だけを考えれば無数に存在しそうだ。
「佐倉さん、とりあえずこの1から5までを潰しましょう」
「わかった! なにをすれば良い?」
「まずは元号の境界値を見ていきましょう」
そう言って、私は画面を開いた。先方から指示された操作手順通りにページを切り替えていくと、問題のコンポーネントが現れた。
「動きから逆起こしした仕様書によると、元号の頭文字のアルファベット、年の数字って形式で和暦入力ができるみたい」
私は言われたとおりに値を入力していく。
H31.04.30
R01.05.01
H31.05.01
R01.04.30
「上の二つは平成と令和の区間内だから入力成功。下の二つは区間外だから入力に失敗したけどエラーにはならなかったね」
「さすがにこの辺は制御できてますね。次は平成とその前……。平成の前の元号ってなんでしたっけ?」
「昭和のこと? 昭和は六十四年の一月七日までだよ」
「なるほど」
S64.01.07
H01.01.08
S64.01.08
H01.01.07
「さっきと同じだね」
「じゃあ、江戸あたりまで飛びますか。江戸は何年から何年ですか?」
そう訊くと佐倉さんはおかしそうに笑った。
「ノズちゃん。江戸って元号はなくて、江戸時代の最後は確か慶応だったはずだよ。今調べるね……わかった。明治の前は慶応四年九月七日。あ、だけど『慶応四年を以て明治元年とする』って布告が出てるから、慶応三年十二月三十日までかな」
「三十日? 十二月は三十一日までじゃないんですか?」
「たぶん、旧暦だからだよ。昔の日本は今みたいに太陽暦じゃなくて月? を基準にした暦を使ってたらしいから」
「そうなんですか。佐倉さん、妙に詳しいですね」
褒めたわけでもなかったが、佐倉さんは嬉しそうに頷いた。
「うち実家が古くさくて、旧暦カレンダーとか貼ってあったから。とりあえず入れてみる?」
K03.12.30
M01.01.01
K03.12.31
K04.01.01
「何かダイアログが出ますね……。『有効な元号ではありません』。明治から前は制御されているみたいです」
「成功したのは上から二個目、明治元年一月一日だけだったね」
それから明治大正昭和と下って値を入力していったが、いずれも正しく制御されていた。
「境界値じゃないかもしれないですね」
私がそう諦め始めたときに、佐倉さんがあっと声を上げた。
「
「閏月?」
「そうそう。旧暦だと暦を調整するために定期的に一ヶ月まるまる増やすことがあったって聞いたことがある」
「でも、明治より前は対応してないんですよ、このカレンダー。旧暦とか関係ないんじゃないですか?」
「暦って明治になってすぐに切り替わったわけじゃないんだよ。明治の初期の頃はまだ旧暦で……閏月が発生したのは確か……」
佐倉さんがデバイスを使って検索をしている。
「明治三年
「入れてみますか」
そう返したが、私の手はすぐに止まった。
「どうやって入れるんですか? 閏十月って」
「まず年を明治三年にして……」
「1から12までの表示しかありませんね」
「じゃあ直接入力するのかな」
しばらく二人で考えていたが、なにも思いつかなかった。
「仕方ないですね。先方に聞いてみましょう」
テキストメッセージを送ると、すぐに返答が帰ってきた。
「開発者のメモによると『閏月の入力には対応しない。ただし、前後の月について西暦へ変換する時は当然考慮する』となっているらしいです」
実際に閏月前後の値をいくつか入れてみたが正しく西暦に変換されているように見えた。
やはり別の方向から検討した方が良いかもしれない。
「佐倉さん。じゃあ後は一個一個潰していきましょう」
「うん、わかった。二人で帰れるようにがんばるね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます