大辞泉1.0.1不具合騒動の顛末

Share on Facebook
このエントリーをはてなブックマークに追加

先日、大辞泉1.0.1をリリースしたら、それが操作できないもので、急遽1.0.2に再度アップデートした、というゴタゴタがありました。1.0.1にアップデートしてしまい、操作不能状態に陥った方々、ご迷惑をおかけして申し訳ありませんでした。

で、なんでそんな問題が起こったか、起きた後どういう対応をとったのか、ということをここにまとめておきます。言い訳めいたものになるけど、反省をして、再発を防ぐためです。

結論から言うと、今回の事態の原因は弊社のミスです。アプリケーションファイルに、辞書のデータベースファイルが含まれていませんでした。これにより当然の事ながら、まったく検索不可能になりました。単純なミスでした。こういったミスを犯さないようにたくさんの防御策があるのですが、今回はそれらをすり抜けられてしまいました。それを検証します。

まず、大辞泉の開発体制ですけど、ソースコードは社内のSubversionで管理してます。Subversionっていうのは、バージョン管理システムと呼ばれるもので、複数の人間でソースコードを編集するときに、それを管理してくれるものです。リリースするときは、「ここまで!」というタイミングでしめきって、最終テストフェーズに移行します。このフェーズでは、リリース用ビルドを使って全員でテストを行い、致命的な問題なしと確認されたら、ビルドの作成およびAppleへの審査提出、って流れになっています。

で、最初に1.0.1のビルドを作ったときは、何の問題も無かったです。だけど審査提出後、緊急の修正を行う事になりました。これはバグが見つかった訳ではなくて、コンテンツ提供元からちょっとした修正をしてくれ、と要望が入ったためです。そこで、Appleへの審査を取り下げて(Developer Rejectと呼ばれる)、もう一回ビルドを作り直す事にしました。

だけど、1.0.1の開発が終わって、もう次バージョンである1.1の開発が始まっていました。Subversionで管理しているソースコードの本筋(trunkと呼ばれる)は、1.1開発状態です。そこで、1.0.1用のソースコードをフリーズした状態にしてあるものの方で(tagと呼ばれる)修正する事にしました。修正自体は簡単なもので、ここでバグは入りませんでした。ただし、落とし穴がいくつかありました。

まず、1.0.1フリーズソースコード上で作業したんですけど、こちらの構成にはソースコードのみがあり、辞書のデータベースファイルがコピーされていませんでした。これは、データベースファイルはとても大きいので、Subversionに入れるとストレージを圧迫してしまうのであえて外していたのです。結果、できあがったビルドはデータベースファイルが入っていませんでした。これが、落とし穴その1。

でも、データベースファイルが抜け落ちていれば、開発中に気付きそうなものです。ところが、iOSアプリの開発中は、デバイスにインストールするとき、すべてのファイルが置き換わるのではなく、更新されたファイルだけ上書きされます。なので、デバイスにある前のバージョンのデータベースファイルがそのまま使われてしまい、気付きませんでした。これが、落とし穴その2。

でも、みんなでテストすれば、誰がかが気付きそうなものです。ところが、この修正はほんとに軽微なもので、もうすでにみんな1.1の開発に没頭していたいので、テストを省略してしまいました。これが、落とし穴その3。結果的には、これが一番の問題でした。

こうして、新しく作られたビルドはデータベースファイルなしの欠陥品のまま、Appleの審査に提出されてしまいました。でも、Appleがレビューを行ってくれます。Appleのレビューチームにより、操作不能なアプリであればリジェクトされるはずです。いままでもいろんな理由でリジェクトされてきましたから。ところが、今回に限って、この操作不能アプリがスルッと審査を通過してしまいました。なんでや。これが、落とし穴その4。

でも、アプリがリリースされたらすぐ動作確認して、まずいと思ったら配信停止すれば、ユーザに被害が及ぶ前に止める事ができます。アプリのリリースは、審査終了後、自動的に公開するかマニュアルで公開するかを選択する事ができます。ところが、今回は一刻も早くリリースしたいと思って、自動公開にしてしまいました。これが、落とし穴その5。

ということで、いくつかのイレギュラーな事態と怠慢が重なって、操作不能なビルドがリリースされてしまいました。

続いて、リリース後の流れを追います。大辞泉1.0.1の審査通過したのが、5/26(日)の04:22。即時公開される。動作確認を行った弊社社員から緊急のSNSが送られてきたのが、05:48。飛び起きて事態を確認し、配信停止の処理を行ったのが、06:08。サポートページ、ブログ、Twitterなどで、1.0.1にアップデートしないよう告知。この時点で原因不明。事務所に移動して、開発環境およびリリースビルドを確認。こちらのミスだと分かって打ち拉がれたのが、07:30。修正して、テストを行って、1.0.2として再度審査提出、および緊急審査の要請(expedite review requestって呼ぶ)を行ったのが、08:30。その後、悶々とした針の筵の数日を過ごし、ようやく1.0.2が公開されたのが、5/29(水)。

初動があまり遅れなかったのと、日曜日の早朝という事が幸いして、広く出回る前に差し止める事はできました。それでも、2,000人以上の方がアップデートしてしまったようで、ほんとうに申し訳ないです。今後は、このようなことが発生しないように留意します。

とは言っても、究極の解決策という素敵なものは、ないと考えています。問題は常に起きます。ミスもどうしたって起きます。それが被害として出回らないように、弊社を含めて開発会社は幾重もの予防策を施しています。大部分は未遂で済みます。それでも、その隙間をすり抜けることは、絶対に起きます。すり抜けてしまったら、被害が広まらないように防ぎます。経緯を見直して、次回に役立てます。技術ってのは、その繰り返しです。それしかないです。しんどいですが、それしかないです。

大辞泉サポートページは、こちら
HMDT大辞泉Facebookページは、こちら

  1. コメントはまだありません。

  1. トラックバックはまだありません。