SlideShare a Scribd company logo
PSR-3 Logger Interface
のご紹介
第67回PHP勉強会@東京
@Hiraku
目次
• 最近のPHPフレームワーク界のトレンド
– 何故PHP-FIGが生まれたか
• PSR-0,1,2について
– おさらい
• ログは大事
– 本題!
• PSR-3によってもたらされる世界
自己紹介
• Hiraku (中野 拓)
• 某ポータルサイトのWeb
プログラマ
• ライブラリアン(サービス
作るのはあまり興味ない)
• そろそろPHP歴5年ぐらい
• PHP-FIGはROM専です
https://twitter.com/Hiraku
https://github.com/hirak
http://blog.tojiru.net/
このスライドの主張は多分に
個人の見解が混じっています
おことわり
• 最近のPHPフレームワーク界のトレンド
– 何故PHP-FIGが生まれたか
• PSR-0,1,2について
– おさらい
• ログは大事
– 本題!
• PSR-3によってもたらされる世界
最近のPHP界のトレンド?
• フルスタック指向 • コンポーネント指向
最近のPHP界のトレンド?
• フレームワークの一部だけ使ったり
• 組み合わせたり
• マイクロフレームワークの増加
• Composer/Packagistの盛り上がり
キメラ錬成
• 色々組み合わせて「ぼくの考えた最強の
怪物フレームワーク」を作れる
脱・フルスタック
• フレームワークにない機能も外から
持ってこれる
• やるかやらないかは別
• 基本的に選択肢が増えるのはいいこと
だがちょっと待ってほしい
フレームワークの組み合わせ
なんて可能なのか?
フレームワーク間にそびえ立つ壁
• 命名規則
• コーディング規約
• ディレクトリ構造
• 例外の使い方
• インターフェースがバラバラ
…etc
そこでPHP-FIGですよ
• フレームワークの相互運用性について議
論するグループ
http://www.php-fig.org/
大御所いっぱい参加
余談
• FuelPHPやCodeIgniterが入ってません
• 仲悪いのかな?
話を戻すと
• PHP-FIGで決まったことを元に、
フレームワーク同士の相互運用性を高め
ていこう!という雰囲気
• 究極的には、ありとあらゆるフレーム
ワークやライブラリが組み合わせて使え
る世界を目指している
PHP-FIGが決定したもの:
PSR(Propersed Standards
Recommendation)
• 最近のPHPフレームワーク界のトレンド
– 何故PHP-FIGが生まれたか
• PSR-0,1,2について
– おさらい
• ログは大事
– 本題!
• PSR-3によってもたらされる世界
PSR-0
Autoloading Standard
PSR-0
• 要約:
– クラス名は被らないようにしろ
– クラス名とファイルパスは合わせろ
• 名前空間先頭はvendor prefix
– Symfony¥Foo
– Zend¥Foo
– Acme¥Foo
• Autoloaderが共通化できる
PSR-1
Basic Coding Standard
PSR-1
• 要約:変な作りにするな
– PSR-0に従え
– ソースコードはUTF-8(without BOM)で書け
– 副作用(Side Effect) はクラス定義と分割しろ
• 読み込んだだけで勝手にechoすんじゃねえ
• php.iniの設定を勝手に変えるな
• スクリプトのロードも勝手にするな
– 定数はSUPER_CASE、メソッドは
camelCaseとか
PSR-2
Coding Style Guide
PSR-2
• ほぼコーディング規約っぽい何かです
– 詳細は省略
• PHP_CodeSnifferでチェックできます
– http://pear.php.net/package/PHP_CodeSniffer/
• CS Fixerもあるよ
– http://cs.sensiolabs.org/
• PSR-2準拠を謳うライブラリ増加中
-ここまで前置き-
長くなりましたが
• 最近のPHPフレームワーク界のトレンド
– 何故PHP-FIGが生まれたか
• PSR-0,1,2について
– おさらい
• ログは大事
– 本題!
• PSR-3によってもたらされる世界
PSR-3
PSR-3 Logger Interface
• 2013-01-05にacceptedになった
• 読んで字のごとくロガーのインター
フェース規約
• https://github.com/php-fig/fig-
standards/blob/master/accepted/PSR-3-logger-interface.md
• 今までのPSR-0,1,2と雰囲気が違う
– 「PSR-2に従え」って書いてない
– コーディング規約っぽくない
PSR-3の基本
• ロガーはPsr/Log/LoggerInterfaceを
実装したクラス。
• psr/logに一式揃っている
– https://packagist.org/packages/psr/log
• インスタンス化して利用する
• ログレベル定義はsyslog(RFC5424)に
準じる
– emergency, alert, critical, error,
warning, notice, info, debug
PSR-3準拠のロガーイメージ
<?php
require 'vendor/autoload.php';
class JsonLogger extends Psr¥Log¥AbstractLogger
{
function log($level, $message, array $context=array())
{
error_log(json_encode(
compact('level', 'message') + $context
));
}
}
$log = new JsonLogger; //このインスタンスを色々な場所で使いまわす
$log->emergency('oh my god!');
…正直なところ
• PSR-3自体はそんなに大したことは書い
てない
• 読んでも「ふーん」で終わる
• ここからはロガーがPSR化されたこと
の意義を考察する
デバッグについて
ちょっと話をそらしますが
質問
• デバッグってどうやってますか?
• デバッガ使ってる?
• var_dump()?
割とどうでもいい(個人の見解)
• デバッガはデプロイ後には役に立たない
– ユーザーが体験した「不具合」を再現できれ
ば使えるけど…
– ユーザーのデータがレアケースだったり再現
性がない不具合だったり…
ログの力
• デプロイ後の不具合究明に役立つのが
アプリケーションログ
– 不具合が起きたら問題をロギングする
– Web APIなどはきちんと叩けたこともロギン
グしておくとよい
• アリバイとして役に立つ
• ログを見れば犯人がわかる状態が理想
参考:表明(assertion)
• assert()でtrueになるはずの条件をコード
中に列挙しておく
– assert($param instanceof DateTime)とか
– 小さなユニットテストが常に実行される状態
を作る
– もしassert()がfalseを受けたらエラーを吐く
• デバッグログと似た概念
• PHPのassert()は関数なので、ロガーで代
替しても性能はあまり変わらない
オレが思う重要度
1. アプリケーションログの設計
2. 例外とスタックトレース
=====越えられない壁======
3. var_dump()デバッグ
4. デバッガの使い方
要するに
ログは重要
• 最近のPHPフレームワーク界のトレンド
– 何故PHP-FIGが生まれたか
• PSR-0,1,2について
– おさらい
• ログは大事
– 本題!
• PSR-3によってもたらされる世界
ログは重要なので
• あちこちのフレームワーク内で再実装さ
れている
• 車輪の再発明されまくり
monolog
PEAR_Log
Zend¥Log
この状態でキメラ錬成すると
• 「10個ライブラリを組み合わせたよ」
– 10個ともオレオレロガーを内包している
• 「ログレベルをデバッグに切り替えて」
• 「ログの出力先をDBに切り替えて」
– 10か所設定を変えないと駄目
つらい!!
どうする?
• 1つのロガーだけを使うようにして、
自前実装を禁じよう
– まちがい!
• ロガーのインターフェースを揃えて、
差し替え可能にしよう
– せいかい!
PSR-3にみんな準拠したら
• ロガーは差し替えて統一できる!
• 組み合わせこわくない
CakePHP Symfony Zend
Framework
PSR準拠
ロガー
PSR準拠
ロガー
PSR準拠
ロガー
monolog
PHP-FIGの目指すもの
• 究極的には、ありとあらゆるフレーム
ワークやライブラリが組み合わせて使え
る世界を目指している(再掲)
• PSRはただのコーディング規約じゃない、
その先を見ている
まとめ
• ログは大事
• PSRに定められるほど大事
• ロガーがPSRになったことの意義は大きい
• 今後のPSR-nは似たような取り決めが増
えるかもしれない
– HTTPクライアントとか議論されてた
補足:普及度
• PSR-3準拠のロガーはまだまだ少ない
• monolog ぐらい?
http://github.com/Seldaek/monolog
• Zend¥Logとかも対応してない
PSR-3の理想のために
• 例えばZend¥Logを使うにしても、一度
PSR-3のインターフェースにラッピング
してから使うようにする
– 面倒くさいけどな!
– PSR-3に従っておいた方が他のロガーとの交
換性が高くなるはず…

More Related Content

PDF
gRPC入門
PDF
Riderはいいぞ!
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
PDF
Twitterのsnowflakeについて
PDF
オンラインゲームの仕組みと工夫
PDF
ナレッジグラフ入門
PDF
がんばれ PHP Fiber
gRPC入門
Riderはいいぞ!
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
Twitterのsnowflakeについて
オンラインゲームの仕組みと工夫
ナレッジグラフ入門
がんばれ PHP Fiber

What's hot (20)

PDF
クラシックゲームを用いたディープラーニングの近年の発展
PDF
研究室における研究・実装ノウハウの共有
PDF
DynamoDBの初心者に伝えたい初めて触るときの勘所
PDF
.NET Core 3.0時代のメモリ管理
PDF
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
PPTX
テストコードの DRY と DAMP
PDF
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
PDF
No skk, no life.
PDF
Pythonによる黒魔術入門
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
PDF
Marp for VS Code で作る PowerPoint スライド
PDF
katagaitai CTF勉強会 #5 Crypto
PDF
イミュータブルデータモデル(入門編)
PDF
VRM 標準シェーダ MToon の使い方
PDF
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
PDF
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
PDF
情報抽出入門 〜非構造化データを構造化させる技術〜
PDF
一般的なチートの手法と対策について
PDF
DeNAの大規模ライブ配信基盤を支える技術
クラシックゲームを用いたディープラーニングの近年の発展
研究室における研究・実装ノウハウの共有
DynamoDBの初心者に伝えたい初めて触るときの勘所
.NET Core 3.0時代のメモリ管理
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
テストコードの DRY と DAMP
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
No skk, no life.
Pythonによる黒魔術入門
ネットワーク ゲームにおけるTCPとUDPの使い分け
RSA暗号運用でやってはいけない n のこと #ssmjp
Marp for VS Code で作る PowerPoint スライド
katagaitai CTF勉強会 #5 Crypto
イミュータブルデータモデル(入門編)
VRM 標準シェーダ MToon の使い方
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
情報抽出入門 〜非構造化データを構造化させる技術〜
一般的なチートの手法と対策について
DeNAの大規模ライブ配信基盤を支える技術
Ad

Viewers also liked (20)

PDF
新標準PSRに学ぶきれいなPHP
PDF
Phpをいじり倒す10の方法
PDF
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
PDF
CodeIgniter をモダンに改造してみた
PDF
このPHP拡張がすごい!2017
PPTX
GANMA!でDDDをやってみてから1年くらい経った
PPT
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
PPTX
Plan de clase
PDF
だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回
PDF
صداقت حضرت مسیح موعود علیہ السلام از احادیث
PDF
Ne principles of islam
PDF
Solliciteren: social media of toch die traditionele sollicitatiebrief? (Natio...
PDF
Tutorial for the ReportLinker App
PDF
SHERRI GOODWIN Resume 1 (2)
PPTX
Povezovanje kemijske panoge in delo z mladimi, KOCKE, Ziga Lampe, Drzava za g...
PPT
Međuinduktivitet i zračni transformatori (slike)
PDF
A world without islam-graham e. fuller
PDF
Modified maximum tangential stress criterion for fracture behavior of zirconi...
PDF
YoonSeo Link
PPSX
Happy New Year
新標準PSRに学ぶきれいなPHP
Phpをいじり倒す10の方法
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
CodeIgniter をモダンに改造してみた
このPHP拡張がすごい!2017
GANMA!でDDDをやってみてから1年くらい経った
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
Plan de clase
だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回
صداقت حضرت مسیح موعود علیہ السلام از احادیث
Ne principles of islam
Solliciteren: social media of toch die traditionele sollicitatiebrief? (Natio...
Tutorial for the ReportLinker App
SHERRI GOODWIN Resume 1 (2)
Povezovanje kemijske panoge in delo z mladimi, KOCKE, Ziga Lampe, Drzava za g...
Međuinduktivitet i zračni transformatori (slike)
A world without islam-graham e. fuller
Modified maximum tangential stress criterion for fracture behavior of zirconi...
YoonSeo Link
Happy New Year
Ad

Similar to PSR-3 Logger Interfaceの紹介 (19)

PDF
第67回PHP勉強会LT(その2)
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
PDF
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PDF
第67回PHP勉強会LT
PPTX
PHPで並列処理する ライブラリを作った
PDF
PHP Source Code Search with PHP
PDF
WordPress on PHP7 on CentOS7 on Saraku-VPS
PDF
深層学習ライブラリのプログラミングモデル
PDF
composer-scriptsについて
PDF
Composerはじめました
PPTX
♡PHPが恋しい話♡
PDF
フレームワークを使うべき 3 つの理由
PDF
PHPの今と未来を語る
PDF
FukuokaPHP 3
PDF
Phjosh(仮)プロジェクト
PDF
#phpmatsuri LT大会システムの中身
PPTX
やさしいGitの内部構造 - yapcasia2013
PDF
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
PDF
グラフデータベース「Neo4j」の 導入の導入
第67回PHP勉強会LT(その2)
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
第67回PHP勉強会LT
PHPで並列処理する ライブラリを作った
PHP Source Code Search with PHP
WordPress on PHP7 on CentOS7 on Saraku-VPS
深層学習ライブラリのプログラミングモデル
composer-scriptsについて
Composerはじめました
♡PHPが恋しい話♡
フレームワークを使うべき 3 つの理由
PHPの今と未来を語る
FukuokaPHP 3
Phjosh(仮)プロジェクト
#phpmatsuri LT大会システムの中身
やさしいGitの内部構造 - yapcasia2013
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
グラフデータベース「Neo4j」の 導入の導入

More from Hiraku Nakano (8)

PDF
composerの遅さをまじめに考える #phpstudy
PDF
Composer並列化プラグイン #phpblt
PDF
Scrutinizer CIでPHPも静的解析 #phpstudy
PDF
JSON SchemaとPHP
PDF
こわくない同時実行制御
PPTX
pecl-AOPの紹介
PPTX
URLで遊ぼう
PPTX
Xml builderの紹介
composerの遅さをまじめに考える #phpstudy
Composer並列化プラグイン #phpblt
Scrutinizer CIでPHPも静的解析 #phpstudy
JSON SchemaとPHP
こわくない同時実行制御
pecl-AOPの紹介
URLで遊ぼう
Xml builderの紹介

PSR-3 Logger Interfaceの紹介