ククログ

株式会社クリアコード > ククログ > ある日突然Thunderbirdのアドオンが動作しなくなった、という時の原因の切り分け方

ある日突然Thunderbirdのアドオンが動作しなくなった、という時の原因の切り分け方

FirefoxやThunderbirdのアドオンを使用していて、ある日急に動かなくなった、という話はよくあります。 そのような場合にどうやって原因を特定し解決するのか、Thunderbird用のアドオンであるTheme Font & Size Changer for TBでの場合を例に解説してみます。 トラブルシューティングの一事例として参考にしていただければ幸いです。

アドオンの性質を見極める

まず何をおいても最初に確認するべきは、そのアドオンがどのような性質を持ちどのような機能を実現するアドオンなのかという点です。

今回問題が起こった「Theme Font & Size Changer for TB」はThunderbirdのGUIの文字サイズや配色を変更するアドオンです。 Thunderbirdではメールの内容を解釈したり表示したりする部分と全体的なUIを制御する部分とはほとんど関係がないため、例えば「受信したメールの内容」は問題と無関係である可能性が高い、といった推測ができます。 また、特定のWebサービスと連携するようなアドオンでもないため、Webサービス側からの接続遮断や、Webサービスのメンテナンスによる機能停止といった物もこの問題には関係していないと考えられます。

このように、原因究明を迅速に行うためには、可能性が低い事柄を調査の対象から一旦除外するのが有効です。

問題が起こるようになる直前に自分で行った操作の影響を疑う

次に確認するべきなのは、可能性として除外しきれなかった範囲における、問題が発生し始めた時期に行った操作との関連性です。 例えば以下のような事柄です。

  • Thunderbirdの設定を変更した

  • アドオンを新しくインストールした

  • アドオンをアンインストールした

変化が可逆的な物である場合、まずそれを元に戻してみるのが基本です。 今回の事例では問題の発生前後で特にこれといった操作を行っておらず(休暇明けに出勤したら突然アドオンが動作しなくなっていた、のような状況を想像して下さい)、ユーザーが行った操作は原因ではない可能性が高いと思われました。

Thunderbird自体の更新の影響を疑う

Thunderbirdは自動更新機能を持っており、ユーザーが気がつかないうちに新しいバージョンがダウンロードされている事があります。 アドオンが新しいバージョンのThunderbirdに対応していない場合、Thunderbirdの自動更新に伴ってアドオンが無効化されたり、アドオンが動作しなくなったりする事があります。

今回の事例では、問題の発生前後でThunderbirdの新しいリリースは行われていませんでした。 ですので、この可能性は除外しました。

アドオンの更新の影響を疑う

Thunderbird本体と同様に、自動更新によってアドオンが新しいバージョンに入れ替わった事で問題が起こる事もあります。 一般的にはあまりありませんが、「更新前は正常に動いていた機能が更新後には動かなくなる」という種類の問題(後退バグ、あるいはリグレッション)が混入する場合があるからです。

また、問題が起こっているアドオンそのもの以外の他のアドオンが更新された事がきっかけで問題が起こる事もあります。 アドオン同士が衝突して片方あるいは両方の動作が妨げられるという事例は枚挙にいとまがありません。

ただ、今回の事例では、問題の発生前後でアドオンの更新は特に発生していませんでした。 問題が起こっているアドオンの最終更新日は2017年11月で、だいぶ以前の事ですので、自動更新が急に行われたという事は考えにくいです。

アドオン自体の問題を疑う

問題の発生前後で特にこれといった変化が無かったとなると、後はアドオンの初期化処理を丁寧に追って、どの時点で問題が発生しているのかを突き止めるという事になります。

Thunderbird用アドオンは、現在Firefox用のアドオンで「レガシー」と位置づけられている種類のアドオンと同様の作りになっています。 今回問題となったアドオンの、問題発生時の最新版であるバージョン62.0は、その中でもBootstrapped Extensionと呼ばれる、アドオンのインストール・アンインストール時にThunderbird自体の再起動が不要な種類の物でした。

Bootstrapped Extensionの初期化処理のステップを追うと、以下の箇所のThemeFontSizeChangerBootstrapAddon.compile()falseを返しているために初期化処理が中断されているという事が分かりました。

function startup(data, reason) {
    try{
        if(!ThemeFontSizeChangerBootstrapAddon.compile()) return;
        ThemeFontSizeChangerBootstrapAddon.startup(data,reason);
    } catch(e){
        ThemeFontSizeChangerBootstrapAddon.lg(e,1);
    }
}

さらにこのメソッドの内容を調査すると、以下の通り実装されている事が分かりました。

...
const build = 1507391194;
...
    compile:function(){
        if((build+'').length != 10) Services.prompt.alert(null, 'CompileAddon', 'An error occured');
        if(new Date().getTime() > ((build+'').length == 10 ? build*1000 : build)+(3*30*24*60*60*1000)) return false;
        return true;
    }

new Date().getTime()は実行時のUNIX時刻をミリ秒単位で取得する物です。1507391194というのはいわゆるUNIX時間(協定世界時1970年1月1日0時0分0秒からの経過秒数による日時の表現)で2017年10月7日15時46分34秒を指しており、この箇所全体では「現在日時がその3ヶ月後(2018年1月5日15時46分34秒)を超えているとfalseが返される」という意味になっています。 つまり、それまでは全く正常に動作していたこのアドオンは、世界中で今年の1月5日以降急に動作しなくなるよう設計されていたという、時限式のタイマーが組み込まれていたという事が分かりました。

以上の事から、この問題の対策として「当該箇所を無害化する改修を施す」あるいは「実行環境の時計を意図的にずらす」のいずれかを実施する必要があるという事になります。

まとめ

「Theme Font & Size Changer for TB」を例にとって、アドオンが急に動作しなくなったという場合の調査の具体的な進め方をご紹介しました。

当社のFirefox/Thunderbrid法人向けサポートでは、アドオンに関するものについても、障害の原因調査から対策のご提案、改修版のアドオンの提供や開発元へのフィードバックなどの対応を有償にて行っております。 業務で使用しているアドオンで致命的な問題が発生していてお困りの場合には、ぜひ一度当社までご相談下さい