目次
エラーメッセージを検索しても出てこない
アプリ開発やプログラミングの学習の際にエラーが発生してプログラムが動作しないとき、
ブラウザやコンソールに出力されたエラーメッセージをそのままコピペしてGoogleで検索を行うことは一般的な方法ですが、ときたま検索に全くヒットしないエラーメッセージもあります。
その場合、プログラミング言語や開発環境のエラーではなく、開発中のアプリケーションの内部で別な開発者(学習コンテンツの場合、その作成者など)が任意で用意したエラーメッセージの可能性があります。
アプリケーション固有のメッセージは広く普及しているものでなければ、インターネット上の検索で見つけることができないことがあります。
とくにエラーメッセージが英語で書かれている場合、初学者や経験の浅い方にとって、他のGoogle検索でヒットするエラーメッセージと区別がつかず、やみくもに検索をかけてしまい、エラーの解決策を見つけることが困難になってしまうことがあるかと思います。
そこで、この記事ではそうした類のエラーを解決するためのプロセスを紹介してみたいと思います。
アプリケーションの内部で全文検索しよう
エラーメッセージがアプリケーション固有のものと思われる場合は、アプリケーション内部で全文検索をかけることで、エラーが発生している箇所をまずは特定することができます。
VSCodeなど高機能なテキストエディタを使用している場合は、エディタ内の検索機能を使用することができますが、
より汎用的かつ確実な手段として以下のUnixコマンドを使用した方法を紹介します。
全文検索用シェルコマンド
DockerコンテナやMac OSなど、開発環境でUnixコマンドが使用できる場合は、以下のコマンドを実行することでプログラム内部で全文検索をかけることが可能です。
find . -type f -exec grep "検索するエラーメッセージ" {} +;
findコマンドで検索対象のパスを指定、grepコマンドで検索をかけたいエラーメッセージをそのまま指定します。
その他のオプション等は定型的な決まりのようなものですが、興味のある方は調べてみてください。
上記の場合ですとカレントディレクトリをパスに指定しています。
(実例) Webフレームワーク内部でエラーメッセージを検索
上記で紹介した全文検索コマンドを使用して、エラーとその原因を特定するプロセスを、
PHPのアプリケーションフレームワーク、Zend Framework(1.7.6)の開発環境構築の際に発生したエラーを例に取り上げて解説します。
ただし、こちらはメジャーな技術分野ですので、Google検索でも多くの文献が見つかるかと思いますが、今回はプログラムの内部エラーを調査するというプロセスの部分にフォーカスして参考にしていただければと思います。
画面に表示されたエラー
Zend Frameworkをインストールし、デモ画面の表示を試みたところ画面に以下のエラーが発生。
エラーメッセージ
「Image CAPTCHA requires FT fonts support」
こちらのエラーメッセージをZend Framework本体のプログラムに対して全文検索を行います。
開発環境上のZend Framework本体をインストールしたパスに移動して、以下を実行
find . -type f -exec grep "Image CAPTCHA requires FT fonts support" {} +;
(検索結果)
./Captcha/Image.php: throw new Zend_Captcha_Exception("Image CAPTCHA requires FT fonts support");
上記検索結果より、./Captcha/Image.phpというファイル内で例外をスローしている箇所があり、その際に該当のエラーメッセージを指定していることがわかります。
次に、この例外がどのような場合にスローされているかを特定することで、エラーが発生した根本的な原因がわかりそうですので、
./Captcha/Image.phpをエディタで開いて詳細を確認します。
(例外発生箇所をエディタで展開)
if (!function_exists("imageftbbox")) {
require_once 'Zend/Captcha/Exception.php';
throw new Zend_Captcha_Exception("Image CAPTCHA requires FT fonts support");
}
PHPのソースコードより、imageftbboxという関数が存在しない場合に今回の例外がスローされることがわかりました。
imageftbboxという関数はおそらくPHP本体の機能としてデフォルトとして用意されている関数と思われますので、次に調べるべきはimageftbbox関数が存在していない、あるいは関数を呼び出すことができない原因は何であるかということになります。
ここから先はGoogle検索を使って、PHPの公式ドキュメントにあたること、PHPの環境構築方法についての文献を探すことで解決策が得られていく思われます。
長くなりましたが、本記事で紹介したエラー解決のプロセスが初学者の方などの学習やアプリ開発のヒントとなれば幸いです。