サマータイムになったら自作の超簡単なAndroidアプリごときでも結構影響あるって話

課長秘書ともみのGooglePlayの画面

 「サマータイム導入の検討が始まった」というニュースを受けて、なんだかネットが騒々しい。「SEを殺す気か」に始まり、「たいした影響ないだろ」という記事がでて、「影響あるだろ」と怒号が乱れ飛んでいます。

 で、実際システム屋さんは大変なことになるのでしょうか? “システム”と一括りにされますが、実社会には様々なものがあります。ですので、違うものをざっくりくくってマクロ視点で考えてもイマイチわかりにくい。マクロでわからないときはミクロで見てみよう。そんなわけで、サマータイム導入により、私が作ったどー見ても超簡単な仕組みしか使っていないAndroidアプリ「課長秘書★ともみ」に、何が起きるのかを考えてみました。

 結構、大変かもしれない。

 バグったとしても放置を決め込めば大変ではないんですけど。まじめに対応しようとすると大変だなーと思った話をします。

「課長秘書★ともみ」とは

 「課長秘書★ともみ」はアプリを起動すると“何か言う”。それだけのアプリです。

 「課長。シャーペンの芯を細かく折って、入れなおしておきました」「課長。オムライスが食べたいです。」などと発言します。あらかじめ設定したセリフをランダムで表示しているだけだと思われるかもしれませんが、もう少し手が込んでいます。

 どのセリフがどういう設定だったか具体的なことは忘れてしまいましたが、「課長。オムライスが食べたいです。」は昼休み前の時間帯にしか発言しない設定になっていたように思います。暗に課長に「ランチ行こうよ。オムライスおごって」と言ってるんですね。

Android端末の時間はサマータイムになるのか?

 オムライス発言だけでなく、「課長秘書★ともみ」はアプリを起動する時間で回答が変わるようになっています。たとえば深夜0時を過ぎるとパジャマ姿で「ぐー。ぐー。」とか言います。

 さて、「深夜0時~午前6時は寝ていることにする」というプログラムで使っている“時刻”は何を基準にしているんでしょうか。time()みたいな関数をアプリ用のプログラムに書くと、Android端末が「今、何時ですよー」という返事をします。この値を使っています。

 さて、サマータイムになったら、Android端末からサマータイム対応した時間が返ってくるのか・返ってこないのか。

 答え:知らない。

 欧米では実施されているルールなので、なんらかのルールが決まっているんだろうとは思います。けれどもホイコさんレベルの個人アプリ開発者なんて、そんなこと知らないのですよ。こういう話すると「○○なんて常識だろー。」って人がいっぱい現れるので、SEと呼ばれる人は誰もがみんなすっげー知識あると思われてるかもしれませんけど、通常そんなことないですよ。私が過去に仕事でかかわったSEさんの半分以上は、私より知識なかったからねー!ということで、サマータイム対応しようとすると、調べるところから始まるのです。

 ああ、めんどくさい。

 そのうえ「サマータイムになったら弊社の昼休みは13時からね」とか妙なルールが実社会で作られ始めたら、オムライスは何時に食べたいと言えばいいのか、マジわからん。

いちばん厄介なのは「バルス問題」

 今までの話で、サマータイム対応されない「課長秘書★ともみ」は、サマータイムになるとちょっと変な時間に起きたり・寝たり・オムライスをねだったりする可能性があるということがわかりました。

 ところが、もっと大きい問題があるのです。それは「バルス問題」です。

 「課長秘書★ともみ」はですね、無駄に高機能でして、世の中の情報に関連したことを発言することがあります。たとえば日経平均株価を監視していて、株価が上がっているとき「課長。今日のカチョノミクスが成功し、株価が上昇したようです。」などと発言します。

課長秘書ともみ 株についての発言例
株価の上昇はカチョノミクスのおかげらしい

 さて「バルス問題」に話を戻しましょう。「課長秘書★ともみ」には「ラピュタの放送がある日には、バルスが出る時刻を予想し、その時刻に『課長。バルス』と発言する」というプログラムが仕込まれています。サマータイムになったら、ちゃんとした時間にバルスって発言するだろうなー!というのが「バルス問題」です。1時間ずれただけでおかしいことが明白になってしまう機能なので、おそらくこれが「課長秘書★ともみ」の中でいちばん時間にシビアな機能ではないかと思います。

 まずは、この機能をどう実現しているか説明しましょう。

  1. 自分が借りているレンタルサーバーで、午前5時にテレビ番組表を取得します
  2. ラピュタが放送されるならば、放送時刻などの情報をサーバー上のファイルに書き込みます
  3. Android端末でアプリが起動されたら、レンタルサーバーにファイルを見に行きます
    (このとき通信が切れていたら端末内のセリフデータと前回受信したセリフのうち枯れていないセリフを使う)
  4. 現時刻放送時刻の○%~○%時点なら「課長。バルス」というセリフを発言候補に入れます
  5. 発言候補のなかから、どれかひとつを発言します。
  6. サーバー側では放送時刻が過ぎたら、ファイルからデータを消します

 ってな具合です。さて、このプログラムで使用している“時刻”はいくつあったでしょうか?太字にしておいたところがなんらかの時刻です。

 いろいろな時刻が出てきました。大変そうですね。さあ、それぞれのサマータイム対応を考えていきましょう。

いったい何人の人間が働いたら「バルス問題」は解決できるのか

 ひとつひとつの“時刻”について、どんな作業が発生するのか検討していきましょう。

午前5時にテレビ番組表を取得する

 この時刻は放置でも問題ありません。午前5時にデータを取得しているのは、テレビ番組表を提供しているサイトのサーバー負荷を考えて、人が少なさそうな時間に設定しているだけです。1時間ずれても問題はありません。

 そうはいっても思考訓練なので、これが「絶対に午前5時(サマータイムで)じゃないと嫌だ」となったらどうなるか考えてみましょう。

 まず、レンタルサーバーにPHP言語で書いたプログラムがおいてあります。これが5分おきとかで自動実行されています。
 プログラムには、天気予報だの株価だのいろいろな情報を取得する命令が書いてあります。1日1回取得すれば十分な情報は「現在時刻が○時以降で今日はまだ取得していなかったら取得する」みたいに書かれています。

 「○時以降なら取得」の○時は、サーバーに「いま何時?」と聞いたら答えてくる時刻です。
 さて、このサーバーの返事は、サマータイムになったら、サマータイムで答えてくるのでしょうか?

 答え:知らない。

 そう、さっきと同じで、これも調べないとわかりません。常識みたいなことは知ってる人は知ってるんだろうけど。サーバー管理会社が「こうするよ」って発表しない限り、正確なことはわからないと思われます。

ラピュタの放送時刻を取得

 さて、ラピュタの放送時刻はどう取得しているのでしょうか?単純にテレビ番組表を見ています(実際にはRSSを取得しています)。

 さすがにテレビ番組表なので、テレビ番組表を提供している人が書く内容をサマータイムにしてくれるとは思いますが、あくまでも「思います。」のレベルです。「あ、やろうと思ってたけど忘れてた♪テヘペロ」なんてことが起きないとも限らない。

 テレビ番組表を提供する会社が何をするかは、私にはわからない。

 ということが言えます。

現時刻が放送時刻の○%~○%時点なら「課長。バルス」と発言

 この見出しの表現はわかりにくいので補足しておきます。放送時間が全体で2時間だったとすると、だいたい始まって70%くらい、1時間24分くらいでバルス来るかな。みたいなざっくりしとした予想をしています。細かいパラメータは忘れました。

 話を戻しましょう。“現時刻”というのは、AndroidアプリがAndroid端末に問い合わせて取得しています。この時刻がサマータイムなのか・そうでないのか、現時点でよくわからないというのは前述のとおりです。

 後者の“放送時刻”は、テレビ番組表から取得した値です。

 結局、どちらの時刻もどうなるのか現時点でホイコさんはわからないということになります。わからないけど「サマータイム初日にラピュタの放送があってもちゃんと動くように」とか指示されたら泣くね。悲鳴を上げているSEさんはこういうことが複雑に絡まってるんだと思うんですよ。

 ないとは思いますが、端末のOSのバージョンによってサマータイムに対応したり・しなかったりなんてあったら、もうお手上げですよね。

放送時刻が過ぎたらレンタルサーバーのデータを消す

 放送時刻は、何度も登場しているテレビ番組表の話です。これを“過ぎたら”というのは、レンタルサーバーの時刻を使って判断します。レンタルサーバーの時刻がサマータイムになるのか・ならないのか。前述のとおり調べてみないとわからないのです。どちらか片方だけがサマータイム対応したら、プログラムの挙動がおかしくなることは想像しやすいかと思います。

サマータイム対応は想像以上にやること多い!

 というわけで、こんなちっぽけなアプリでも、サマータイムで考えなくてはいけないことが色々あることが伝わったでしょうか。「北朝鮮がミサイル発射したら…」とか「地震が起きたら…」とか「早明浦ダムの貯水率が下がったら」とか、無駄な有意義で素晴らしいプログラムが大量に仕込まれているので、対応させるのは結構大変なんですよ!

 まとめると、

  • 時刻はプログラムのいろんな場所に影響する
  • 影響箇所ごとに、どう対応すべきか調べなくちゃいけない
  • 調べても、やっぱりわからないこともある
  • っていうか、決まってないことも多い

 ということになるでしょう。これに加えて「どうせ欧米とは微妙に異なる日本独自仕様が制度開始直前に誕生するんだろ」という悲観的な気持ちがモチベーションをダダ下げします。「○○なんて常識」っていう話だって欧米の常識であって、日本の常識とは限らないからなっ!

 そうはいっても、サマータイムでちゃんとした時間に「バルス」って発言しなくても、誰の人生にも影響を与えないので、私は気楽なもんです。本業のみなさま、おつかれさまです。

 誰の人生にも影響を与えないアプリなので「課長秘書★ともみ」は、「課長。サマータイムでバグってます。」というセリフだけ追加して、「サマータイム対応でバージョンアップしました!」としようと思ったのですが、パスワードがわからない。これがわからなくなったら、絶対に何もできないと警告が出ていたパスワードがわからない。そう、こうやって工数はかさんでいくんだよ。
 ワッホイ、ワッホイ。