玩式草子─ソフトウェアとたわむれる日々

第3回 みんなでテスト,みんなでデバッグ。~あるいはLinusの法則

この記事を読むのに必要な時間:およそ 4 分

前回紹介したfile-rollerのデバッグでは,ソースコードにデバッグ用のメッセージを追加しながら動作を逐一追いかけてみました。最近ではgdb(GNU debugger)DDD(Data Display Debugger)などの便利なデバッグ用ツールやEclipseのような統合開発環境もあり,デバッグ作業もずいぶん便利になりましたが,⁠デバッグ」という作業がソフトウェアの振舞いを地道に追いかける孤独な作業であることは変わりありません。

一方,最近ではインターネット上に膨大な情報が蓄積されており,Google等で検索すれば,たいていのバグはすでに報告され,パッチ等の対策も提案されており,一人でコツコツとソースコードを追いかける必要はほとんど無くなっていることも事実です。

今回はそのような例として,totemのYouTube検索モジュールのトラブル対策の例を紹介しましょう。

totemのYouTube検索モジュール

totemはGNOMEデスクトップ環境の標準的なマルチメディアプレイヤーで,GStreamerを用いてさまざまな形式の動画・音声ファイルに対応しています。

GStreamerは,統一したAPIでさまざまな形式のファイルを処理できるように設計されたマルチメディアフレームワーク(ライブラリ集)で,プラグイン形式で新しいフォーマットを追加できるようになっています。

totem は以前からさまざまな形式のファイルに対応していて便利だったのですが,GNOME-2.26に含まれている totem-2.26 系では totem 自身にさまざまな機能を追加できるプラグイン機能が装備されました。

その中でも便利だな,と思ったのがYouTubeの動画ファイルを閲覧できる機能です。この機能は ⁠編集]⁠⁠plugin]から[YouTube ブラウザ]を選択することで利用可能になります。この機能を使えば,サイドバーのYouTubeコラムからキーワード検索もできますし,ある動画に関連づけられた動画を芋づる式に見てゆくことも可能です。

図1 totemでYouTubeの動画が見えている例

図1 totemでYouTubeの動画が見えている例

この機能を使えば,ブラウザを起動しなくてもYouTube上の動画を見ることができて便利なので,⁠Plamo-4.7の新機能」に紹介してもいいな,と思っていましたが,ある時期から急にYouTubeにアクセスできなくなりました。

厳密に言うと,YouTubeにアクセスしてキーワードから動画を検索することはできるものの,見つかった動画を再生しようとすると「エラーが発生しました」というメッセージが表示されます。totemを起動したターミナルにも"Not Found"なエラーが表示されています。

図2 ある日,totemでYouTubeを見れなくなった。

図2 ある日,totemでYouTubeを見れなくなった。

当初はYouTubeにメンテナンスでも入っているのかな,と思って放置していましたが,数日経っても復旧しないようなので,少し調べてみることにしました。

トラブル状況の確認

トラブル解決の第一歩は,どのような問題が起きているのかをできるだけ正確に把握することです。今回のように YouTube というインターネット上のサービスを利用する際に生じた問題では,原因がこちら側にあるのか,サーバの側にあるのか,あるいは途中のネットワーク接続にあるのか,さまざまな可能性を考慮しなければなりません。

原因把握の一例として,今回のトラブルで「あれれ?」と思った時に,私が頭の中で考えたことを,やや誇張ぎみですが自問自答風に紹介してみましょう。

  • 「ネットワークの問題?」
    「いや,他のWebアプリもメールも読めているからネットワークではないだろう」

  • 「YouTubeの側の問題?」
    「可能性はある。totem以外でどうなるかを調べないと」

  • 「Pythonの問題?」
    「Python-2.6に更新した影響はありうるが,他は問題ないので可能性は低そう」

  • 「GNOME環境の問題?」⁠GNOMEというよりはGStreamerのレベルだろうな。GStreamの新しいの出てたかな?」

  • 「totem自身の問題?」
    「totem を更新したのはいつだっけ?」

  • 「設定ファイルの問題?」
    「totemが参照している設定ファイルに古い情報が残っていたりするのかな?」

  • 「キャッシュの問題?」
    「以前にアクセスした際のキャッシュがイタズラしてるのかな?」

ここではざっと7つほど可能性を考えてみました。トラブル調査の最初の段階では,思いつく限りの可能性を考えておくことが重要になります。この段階で特定の可能性のみに固執してしまうと視野狭窄におちいって,目の前にある事実が見えなくなったり,事実をねじまげて都合よく解釈してしまうことすらあります。

トラブルの原因となる可能性をさまざまに考えると共に,それらを検証する方法も考えていきます。YouTube側の問題かどうかは,totem以外のブラウザでどうなるかを確認すべきでしょう。設定ファイルやキャッシュの問題は自分のホームディレクトリ下に残っているそれらのファイルを消して再起動すれば確認できるでしょう。一方,PythonやGStreamerの問題は,パッケージのバージョン等を調べたり,インストールやバージョンアップした時期,新しいバージョンの有無を確認する必要もあるので後回しにしておきましょう。

合わせてtotem自身が出力しているエラーメッセージも確認しておきます。図2のようにコンソール(端末)ソフトウェアから⁠totem⁠というコマンドを直接起動してやると,totem自身が表示する「エラーが発生しました。場所を開けませんでした(そのファイルを開く権限がありません)。」というメッセージ以外にも

% totem
/usr/lib/python2.6/site-packages/gdata/tlslite/utils/cryptomath.py:9: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sha
** Message: Error: "http://www.youtube.com/get_video?video_id=hqH43tDiHjE&t=vjVQa1PpcFNgUxX5nlJZ9DZyEmTCbTr79SR0l8R_SWY%253D": Not Found
gstsouphttpsrc.c(1084): gst_soup_http_src_parse_status (): /GstPlayBin:play/GstSoupHTTPSrc:source:
404 Not Found

というエラーメッセージが表示されていることがわかります。

メッセージの前半はモジュールが古くなっていることの警告なので無視してもよさそうですが,後半のYouTube上の動画ファイルのURIが見つからない旨のメッセージは,今回のトラブルの直接原因と考えてよさそうです。

指定された URI が見つからない,というのは YouTube 側の問題のような印象が強いですが,gst_soup_http_src_parse_status() がエラーになっているのを見ると GStreamer や libsoup がらみの可能性も捨て切れないところです。

さまざまな可能性(仮説)を考えたら,どれが正しいかを実験(テスト)しながら絞りこんで行きます。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

  • パケットキャプチャは?

    多くの目玉を投入することも大事ですが,虫眼鏡・望遠鏡みたいな適切な道具を使って問題をしっかり観察することも大事だと思います。

    今回の例ではパケットキャプチャを使ってHTTP通信をダンプして比較すれば自力で原因に到達できる可能性があったと思います。

    電子回路の世界ではオシロスコープ,物理現象に対してはレーザセンサなど,材料は電子顕微鏡など,様々な(高価な)道具を用いて,何が問題なのかを見極めて対処しています。
    それに比べればWireSharkなどのパケットキャプチャはコストもかからないのです。素晴らしいことだと思います。
    まあ,いろんな要素が影響するため,そういう世界と比べると問題を発見するのが難しいことは確かにそうですけどね。

    Commented : #1  kounoike (2009/10/02, 23:29)

コメントの記入