Laravel4、エラー位置を希望のIDEやエディターで開く
ベータ期間中にどんどん変わったのが、エラー時などの例外の表示ページです。最終的にはWhoopsというツールを取りこむことになりました。
Whoopsも開発が活発なため、旧記事は役に立たなくなりました。そのため、新しくやり方を紹介します。
基礎知識
Laravelで例外が表示される、オレンジ色のページはWhoopsという、表示ツールを利用しています。左側にスタックトレース、右側に対象行の詳細情報です。
一番上には、対象行の前後のコードが表示されています。そのちょっと上をよく見てもらうと、ファイルの位置が表示されており、一番左には"open:"と表示されます。
ファイルパスはリンクになっています。デフォルトではsublというプロトコルに結び付けられています。これは、Sublime Textエディターの人気が高いため、そのエディター名を省略したものと思われます。
sublというプロトコルは、独自なものです。こうした、独自なプロトコルのリンクがクリックされた時、ブラウザはそれに対応したプログラムを起動することができます。これを利用し、エラーが発生した行を自分の好みの、エディターやIDEで確認できます。
前準備
今回は、Linux系のOSでの指定方法です。
適当なディレクトリーにsublopenというファイルを作成してください。続いて、エディターで開き、以下の内容を入力します。
!/bin/bash f=`echo $1 | cut -d \\& -f 1 | sed 's/subl:\/\/open?url=file:\/\///'| perl -MURI::Escape -lne 'print uri_unescape($_)'` l=`echo $1 | cut -d \\& -f 2 | sed 's/line=//'` # 以下ではNetBeansを起動しています。お好きなプログラムを指定してください。 /home/hiro/netbeans-7.3/bin/netbeans --open $f:$l
このスクリプトは、ブラウザから渡された引数、その引数はリンクで指定されているものですが、それをパースし、ファイル名(f)と行番号(l)を取り出しています。
最終行でnetbeansを起動しています。ここをお好きなエディターや、IDEのコマンドラインに変更してください。各プログラムごとに、ファイル名、引数の指定方法が異なります。
スクリプトの中でperlを使っています。パーセンテージURLをデコードしています。nkfでの変換ではアンダーバーが空白になってしまうための方策です。trとnkfを使用して、下線を削除しない方法をご存知であれば、そちらに置き換えてもらっても、構いません。(もちろん、現状で差支えはありません。perlがインストールされていないような環境では、対応する必要があるかも知れません。)
ファイルを保存したら、実行権限を付けてください。
chmod +x sublopen
起動プログラムの指定
特定のプロトコルに対する、起動プログラムの指定は、ブラウザにより方法が異なります。今回はFirefoxでの方法を紹介します。
- 上部のロケーションバーに"about:config"と入力し、Enterを叩いてください。警告ダイアログがでますが、OKボタンをクリックし、進めてください。
- 設定名と値の一覧が表示されます。どこでも良いので右クリックし、メニューの中から「新規作成」→「真偽値」を選びます。
- 設定名に"network.protocol-handler.expose.subl"と入力し、値は"false"を選択します。最後の"subl"がプロトコル名です。
これで、Whoopsのファイル場所パスリンクをクリックしてください。Firefoxから、どのプログラムを起動するか、尋ねられます。先ほど作成した、シェルスクリプトを指定してください。
これで、次回から、いつでもクリックするだけで、スタックトレース上の対象パスをお好きなIDEやエディターで編集できます。