27
var_dump ををををを WordPress ををををを ををををを をを をを

var dumpを使わないWordPress開発フロー

  • Upload
    -

  • View
    6.783

  • Download
    0

Embed Size (px)

Citation preview

Page 1: var dumpを使わないWordPress開発フロー

var_dump を使わない WordPress 開発フロー

エンジニア 田島 優也

Page 2: var dumpを使わないWordPress開発フロー

本日お話すること

PHP を開発コア言語とする Web アプリケーション開発において、 var_dump を使わずに開発を行うという意味と手法についてお話します。

Page 3: var dumpを使わないWordPress開発フロー

田島 優也プライム・ストラテジー株式会社チーフエンジニア、第二グループリーダー

システム開発はもちろん、ディレクション、セールスなど枠にとらわれることなく日々社内外の課題解決に従事しています

講演実績:『必ず押さえておきたい今すぐできるセキュリティ対策』

(WordCamp Tokyo 2014)『案件で使えるプラグイン特集』 (WordBench 東京 ) など

執筆実績 : 『詳解 WordPress 』 ( 株式会社オライリー・ジャパン )『本格ビジネスサイトを作りながら学ぶ WordPress の教科書 2 』

(SB クリエイティブ株式会社 )

自己紹介

Twitter : @tajima_tasofacebook: demontajima

Page 4: var dumpを使わないWordPress開発フロー

PHP ファイルを編集している時、こんな経験ありませんか?

Page 5: var dumpを使わないWordPress開発フロー

変数 $wp_query の中身を知りたい(WordPress のグローバル変数 )

Page 6: var dumpを使わないWordPress開発フロー

single.php

Page 7: var dumpを使わないWordPress開発フロー

single.php

Page 8: var dumpを使わないWordPress開発フロー

うんざりするくらいの見づらさ…

Page 9: var dumpを使わないWordPress開発フロー

var_dump の嫌なところ

・変数の中身によっては著しく見た目を損ない、デバッグの効率が悪い。

・クライアントが確認できるような環境で作業している場合、見た目が崩れていることによって、意図しないクレームにつながる。

・見た目を崩したままデバッグしていると、フロント側 (JavaScript 、 CSS など ) で何か問題が起こっていることに気づかない可能性がある。

・ Ajax など非同期の通信の場合、単純に var_dumpするだけではデバッグできない。

Page 10: var dumpを使わないWordPress開発フロー

本来の var_dump の機能は?

var_dump 変数に関する情報をダンプする

この関数は、指定した式に関してその型や値を含む構造化された情報を返します。配列の場合、その構造を表示するために各値について再帰的に 探索されます。

下記『 PHP マニュアル』より引用http://php.net/manual/ja/function.var-dump.php

Page 11: var dumpを使わないWordPress開発フロー

変数に関する情報をダンプするという役割

情報がどういう状況で、どこに出力されるかは、 var_dump から切り離すことが可能。

今回の場合は、アプリケーションの最終的な表示領域を var_dump の出力先としていたことが問題なのでそこについて検討する。

Page 12: var dumpを使わないWordPress開発フロー

クライアント サーバーブラウザ

コンテンツ

デバッグ

コンテンツ

デバッグ

こうなっているのを…

Page 13: var dumpを使わないWordPress開発フロー

クライアント サーバーブラウザ コンテンツ

デバッグ

コンテンツ

デバッグ

こうしたい

ブラウザ以外の何か

Page 14: var dumpを使わないWordPress開発フロー

クライアント サーバーブラウザ コンテンツ

デバッグ

コンテンツ

デバッグ

この赤枠内は閉じられていて、いかなる影響も受けないようにしたい

ブラウザ以外の何か

Page 15: var dumpを使わないWordPress開発フロー

var_dump の問題点 ( と思っていたもの ) の整理

問題点・クライアント確認の効率を悪くする。・フロント側の開発効率を悪くする。・バックエンド側のデバッグ効率が良いとは言えない。・デバッグできないケースがある。などなど…

色々な問題があるが、それらの問題を全て解決するには

ブラウザではない何かにvar_dump の結果を出力すれば良いだけ。

Page 16: var dumpを使わないWordPress開発フロー

var_dump の出力先を変更する。

コマンドラインベースで OS を操作したことがある方には馴染み深いリダイレクト ( ファイルディスクリプタの上書

き ) のような処理を PHP スクリプトで実装する。

cat test.txt > new_test.txt # new_text.txt に結果が出力される。# ブラウザではなくファイルに書き込まれるイメージ。

cat test.txt # 端末の画面に結果が出力される。# ブラウザに表示されるイメージ

Page 17: var dumpを使わないWordPress開発フロー

デバッグのフロー

・ var_dump で出力されるデフォルトの出力バッファへの書き込みを抑制する。

・出力バッファ領域を新たに確保して、そこに出力をためておく。

・ためておいた内容をログファイルに書き出す。

・ファイルの更新を監視させ、ファイルに書き込まれるたびに端末上に追記情報を流しつづけることによって、デバッグしたい情報をリアルタイムで確認。

Page 18: var dumpを使わないWordPress開発フロー

具体的な実装とフロー・ var_dump で出力されるデフォルトの出力バッファへの書き込みを抑制する。・出力バッファ領域を新たに確保して、そこに出力をためておく。ob_start(); var_dump( $dump ); $out = ob_get_contents();ob_end_clean();

・ファイルの更新を監視させ、端末上に結果を流しつづける。tail –f /var/log/test/log

・ためておいた出力結果をファイルに書き出す。file_put_contents( ‘/var/tmp/test.log’, $out, FILE_APPEND | LOCK_EX );

Page 19: var dumpを使わないWordPress開発フロー

WordPress での実装方法・ var_dump で出力されるデフォルトの出力バッファへの書き込みを抑制する。・出力バッファ領域を新たに確保して、そこに出力をためておく。ob_start(); var_dump( $dump ); $out = ob_get_contents();ob_end_clean();

・ためておいた出力結果をファイルに書き出す。file_put_contents( ‘/var/tmp/test.log’, $out, FILE_APPEND | LOCK_EX );

関数化した上記の処理を記述した php ファイルをmu-plugins フォルダへ置く。

Page 20: var dumpを使わないWordPress開発フロー

WordPress での実装方法

・ためておいた出力結果をファイルに書き出す。file_put_contents( ‘/var/tmp/test.log’, $out, FILE_APPEND | LOCK_EX );

CUI を使っている場合は、 touch /var/tmp/test.log ; chmod 666 /var/tmp/test.logなどの操作をしてファイルを作成しておき、 Web サーバからも書き込める状態にしておく。 GUI の場合は書き込めるテキストファイルを作成しておき同じく Web サーバから書き込める状態にしておく。※ただし、 PHP を CLI として使っている場合は実行しているユーザーが書

き込めることができれば良い。

Page 21: var dumpを使わないWordPress開発フロー

WordPress での実装方法

・ファイルの更新を監視させ、端末上に結果を流しつづける。tail –f /var/tmp/test.log

端末エミュレータを起動し、下記のコマンドを入力する。 ( 必要に応じてバックグラウンドで )

Page 22: var dumpを使わないWordPress開発フロー

single.php

Page 23: var dumpを使わないWordPress開発フロー

ブラウザリロード時変化なし

Page 24: var dumpを使わないWordPress開発フロー

ターミナルなどの画面に、情報がリアルタイムで更新され続ける。もちろん、あとからテキストファイルを開いて、ゆっくり確認することも可能。

Page 25: var dumpを使わないWordPress開発フロー

console_log 関数の詳細

https://github.com/yuya-tajima/console_log

今回使用した console_log 関数は単純に var_dump をテキストファイルに出力するだけでなく、色々な追加情報を表示するような実装になっています。

まだまだ開発中ですが、下記のリポジトリで定期的に改修しているので、改善案、要望案などございましたらご連絡頂けると嬉しいです。

Page 26: var dumpを使わないWordPress開発フロー

まとめ・プログラミング言語のビルトイン関数は必要最低限

の機能が多く、それぞれの状況に応じて変更したいというケースがあるので、独自にラッパー関数をつくるか、ライブラリで提供しているラッパー関数を使って開発効率をあげる。

・新たな問題に直面した時は、既存のソリューションを組み合わせて新たなソリューションを創りだせないか考えてみる。

Page 27: var dumpを使わないWordPress開発フロー

ご清聴ありがとうございました!