忍者ブログ

STEP UP BLOG

Home > ブログ > 記事一覧

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Laravel4で発行されているSQLを取得する

Laravelで今発行しようとしているSQLを知りたい場合があります。
explainしてパフォーマンスチューニングしたいときなど知りたいですよね。
そんなときのために用意されているのがtoSql()です。
以下、使用方法。
・クエリービルダの場合
$sql = DB::table('user')->where('name', '=', '一郎')->toSql();

ただ注意点として、取得できるSQLはプレースホルダが置き換えられる前となります。
select * from `user` where `name` = ?

こんな感じです。
・Eloquent ORMの場合
こちらもクエリービルダと同様です。ちなみにEloquentは「エロクアント」と読むそうです。
$sql = User::where('name', '=', '一郎')->toSql();

これで同じように取得できます。
toSql()とexplainを駆使してどんどん高速化していきましょう。速いことはいいこと!
PR

Laravel4でルーティング一覧を表示する

Laravel4ではルーティングの設定はapp/routes.phpに記述します。
またフィルターはroutes.php以外にコントローラにも設定を記述できます。
いろいろ作っていくと、どんなルーティングしてるのか、どこにどんなフィルターを適用しているのかこんがらがってくることもあります。
そんなときのための便利コマンドが以下!
$ php artisan route

これで設定されているルーティングの一覧が出ます。
ちなみにartisanは「アーティザン」と読むらしいです。 上記コマンドで出力される項目は
Domain, URI, Name, Action, Before Filters, After Filters
+--------+-------------------------------------------------------------------------------+--------+----------------------------------------+----------------------+---------------+
| Domain | URI                                                                           | Name   | Action                                 | Before Filters       | After Filters |
+--------+-------------------------------------------------------------------------------+--------+----------------------------------------+----------------------+---------------+
|        | GET|HEAD login                                                                |        | LoginController@index                  |                      |               |
|        | POST login                                                                    | login  | LoginController@login                  | csrf                 | log           |
|        | GET|HEAD logout                                                               | logout | LoginController@logout                 | log                  |               |

こんな感じに出力されます。
どんなフィルターが適用されているかも出力されるので便利です。

PHPの保守性を高めるためのタイプヒンティング

PHPは語弊を恐れずに言えば、なんでもできる言語です。
変数にはどんな値でも入れられます。
例えばC言語で
int x = 1;
x = "こんにちは";
はコンパイルエラーが出ます。しかしPHPは、
$x = 1
$x = array(1,2,3)
でもエラーが出ません。
つまり変数の中に何が入っていても文句は言われないのです。

そんなPHPで関数に何か値が渡されてきたとします。
引数で渡された値が文字列なのか配列なのか、よくやるチェックに
function f($x)
{
  if (is_array($x)) {
     // 配列用の処理
  } else {
     // 配列以外の処理
  }
}

みたいなのがあると思います。
チェックしないで$x[0]とかすると、$xが文字列でもエラーは出ません(文字列の1文字目が返される)。
これは正常実行されるので、その後でこれが元のエラーが出ても原因がわかりづらい。
そこでタイプヒンティングです。
function f(array $x)
{
  // 配列の処理
}

とすることで、引数として配列が必ず渡ってくるものと宣言します。
配列が来なかったらエラーが発生します。
これで予測不可能なエラーから予測可能なエラーになりました(^^)b
タイプヒンティングにはクラスも指定できるので、特定のクラスで渡されてこなかったらエラーみたいなのもできます。
後から読む人もこれで、どんな型の値が渡されてくる関数かある程度予測でき保守性も上がるのでどんどん活用していきましょう。


まあ、基本的に配列型かスカラー型のどちらでも送られてくる可能性のある関数は実装上よろしくないなと思っています。。

LaravelでPHPUnitを使う

2014/10/23現在、ComposerでLaravelをインストールするとPHPUnitは入っていません。
既に環境にPHPUnitがインストールされていればよいのですが、そうでない場合は一手間かかります。
まずはcomposer.jsonを編集します。
"require-dev": {
  "phpunit/phpunit": "4.3.*",
  "phpunit/dbunit": ">=1.2",
  "mockery/mockery": "dev-master@dev"
},
こちらを追加しましょう。mockeryはモックのライブラリです。
$ composer update
これで上記のライブラリがインストールされます。
その後、vendor/binをPATHに追加することでPHPUnitが使えるはずです。
$ phpunit --version
PHPUnit 4.3.4 by Sebastian Bergmann.
Laravelでは、テストをapp/tests以下に置きます。
既にサンプルのテストケースがあると思うので、それに合わせて作ってみるのが手っ取り早いです。
http://laravel4.kore1server.com/docs/testing
DBを使う場合は以下URLを参考にしました。
http://qiita.com/ngmy/items/c1487991d48ddba9688d
テスト時はapp/config/testingの設定が使われます。
自分は開発とは別にテスト用のDBを用意して、 app/config/testing/database.php に記述しました。
それほど戸惑うことなくテスト実行までできたかなという印象です。
モックの使い方はまたこんど。。

PHPカンファレンス2014に行ってきた

Web開発者は常に最新の情報を抑えておかなければいけません。
勉学を怠ったときから化石化が始まります。
というわけで書くのが遅くなってしまいましたが、
PHPの最新事情を知るべくPHPカンファレンス2014に行ってきました。


お目当てだったセッションはこちら。
「安全なPHPアプリケーションの作り方2014 〜必要最低限のセキュリティ対策はこれだ〜」
徳丸本で有名な徳丸浩氏です。スライドのURLは以下。
特に目新しいことはなく、セキュリティの基本を再確認といったところでしょうか。
PHPのバージョンは常に最新を取り入れていきたいところです。
あと、面白かったセッションは新原雅司氏の
「Ansibleではじめるサーバ作業の自動化」
http://www.slideshare.net/shin1x1/ansible-40576166
でした。
Ansibleは、Chefなどに代表されるインフラ自動化ツールの一種です。
覚えることが少なく簡単に始められるのが特徴だそうです。
私もセッションを聞いただけですが、難しいところは特になさそうで、
ちょっと試してみようかなという気になりました。
その後の予定の関係で途中までしかいられなかったんですが、
こういうイベントには積極的に参加していきたいなと思いました。
他の参加者の感想を調べるとHHVM/Hackのセッションは見たかったなと今更ながら。。

PAGE TOP