Laravel4、エラー位置を希望のIDEやエディターで開く

タグ: Laravel4   NetBeans  

ベータ期間中にどんどん変わったのが、エラー時などの例外の表示ページです。最終的には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での方法を紹介します。

  1. 上部のロケーションバーに"about:config"と入力し、Enterを叩いてください。警告ダイアログがでますが、OKボタンをクリックし、進めてください。
  2. 設定名と値の一覧が表示されます。どこでも良いので右クリックし、メニューの中から「新規作成」→「真偽値」を選びます。
  3. 設定名に"network.protocol-handler.expose.subl"と入力し、値は"false"を選択します。最後の"subl"がプロトコル名です。

これで、Whoopsのファイル場所パスリンクをクリックしてください。Firefoxから、どのプログラムを起動するか、尋ねられます。先ほど作成した、シェルスクリプトを指定してください。

これで、次回から、いつでもクリックするだけで、スタックトレース上の対象パスをお好きなIDEやエディターで編集できます。