PHPカンファレンス福岡2016
PHPカンファレンス福岡2016に参加してきました。
がっつりメモを取れたものだけまとめを書いていきます。
もう確認した?『PHPカンファレンス福岡2016』全スライドまとめ #phpconfuk
制約でコードに秩序を
制約とは
- アクセス修飾子
- タイプヒンディング
- インターフェイス
- 不変オブジェクト
case1 カートに商品を追加
- タイプヒンディング
- public function(Item $item)
- 引数に入力するオブジェクトにItemクラスしか受け付けない
case2 不変オブジェクト
- コンストラクタで設定したら関数で値を返すようにする
- 再設定ができなくなるので料金を書き換えるバグを抑止できる
- 消費税の加算計算などはオブジェクト内部で保持してコード保全
case3 インターフェイス
- JSONでオブジェクトを返す
- 共通関数にしたいがItemクラスもCartクラスも受け付けたい
- Interface
- ItemクラスにもCartクラスにも同じ属性を持たせることができる
まとめ
- 自由を奪う面倒なものではなくコードに秩序をもたらすもの
- かっこいいコード書きたいんだったらPHP7
- protected と privateをどうやって使い分けるか
- まずはprivate/必要ならprotected
- いつか呼ばれるかもしれないからprotected
- You ain’t gonna need it
- 他人が作ったシステムをメンテナンスするとprivate万歳
- traitがあるので、機能のために継承する必要がない
Guzzle Promiseを使った 非同期処理によるAPIコールの高速化
Guzzleってどういう意味
- 大酒を飲む、ガツガツ食べる
- 大規模処理に向いている?
使い方
- Clientを作ってリクエストを投げる
- $client->request(‘get’,’http://localhost/’)
- $client->get(‘http://localhost/’) などの省略も可能
- post,delete,putなどのメソッドもサポートされている
非同期リクエスト
- $client->getAsync(‘http://localhost/’)
- 書き換えるだけでいけると思ったらダメだった
- Promiseオブジェクトを返す
- PromiseといえばJavaScript
- JavaScript Promiseの本
- 非同期処理を抽象化したオブジェクト
- 非同期処理の実行, resolve, reject
Guzzle Promise
- Promiseオブジェクトが返ってくる
- メソッドチェーン
- 成功時と失敗時のメソッドチェーンをつなげる
大量にリクエストする場合
- ループでPromiseオブジェクト配列にぶちこむんで一気に非同期リクエスト
- promiseオブジェクトはメモリを食う
- 一気に捌くには大量のメモリが必要
- Generator, Yield
Pool
- Poolオブジェクト
- concurrency 同時実行数
- fulfilled リクエスト成功時に実行する関数
- rejected リクエスト失敗時に実行する関数
- concurrencyで同時リクエスト数を増やしてその分を一気に投げる
- 速いしメモリも問題ない
質疑
- concurrencyの値をいくつくらいに設定するべきか
- 受け側のサーバ性能によるところもあるので実際に少しずつ調整すると良い
CakePHP3に乗り換えよう
- http://qiita.com/kozo でCakePHPの情報をゲット
cake2→3に移行するメリット
- クエリビルダ
- オブジェクト化されてメソッドチェーンでクエリをかける
- さらにクエリビルダ
- 複雑なSQLをかける
- matching inner_join
- where句にサブクエリもかける
- 複雑なSQLをかける
- table, entity
- 今までのmodelクラスが2つに
- TableはDBへのアクセス
- EntityがDBの1レコードをさす
- html修正が楽
- namespaceに対応した
- 大規模開発向けにさらに良くなった
おすすめプラグイン
- fusic/Apollon
- 基本的なバリデーションルールをまとめているValidationクラス
- composer require fusic/Apollon
- fusic/encount
- 本番環境でfatelエラーなどがおきたらメールなどで通知してくれる
- Senderクラスを自作すればSlackなどに投げられる
- composer require fusic/encount
- kozo/Partial
- 同一コントローラ内で使える小さいスコープのテンプレート
- 共通する部分を別ファイルにする
- 新規登録、編集画面などで共通にできる
クエリビルダのススメ
クエリビルダとは
- SQLを組み上げるもの
- Illuminate/Databases
SELECT name,price FROM books WHERE name like '%PHP%' ORDER BY price desc LIMIT 10
↓
$builder->table('books') ->where('name','like','PHP') ->orderby('price','desc') ->take(10) ->select('name','price');
メリット
- 書きやすい
- SQLインジェクションなどが対策できる
- データとクエリが分けられるので読みやすい
- 再利用性
insertがいいぞ
- バルクインサートに勝手に書き換えてくれる
PHPデベロッパーのためのJavaScriptセキュリティ入門
- なぜJSの話か
- ブラウザ・JavaScriptの処理の高速化
- JSが扱うデータが増加し、脆弱性も比例して増加
- フロントエンドのセキュリティも大事
フロントエンドのセキュリティ問題
- 受動的攻撃が多くなってる
- 攻撃側は新しいweb技術を最も活用できる
- 最低限のセキュリティ対策
脆弱性とは
- 機能や性能を損なう原因となりうる安全性上の問題箇所 etc
- 脆弱性はバグの一種。本来できてはいけないことをできるようにしてしまうバグ
- まずはプログラムの品質をあげよう
JSのセキュリティ
JSによるオープンリダイレクタ
- 任意のサイトにリダイレクとされてしまう
- いつの間にかフィッシングサイトなどに飛んでしまう
- 対策
- 固定オブジェクトとして繊維先を保存しておく
- 自サイトのドメインを毎度指定する
DOM-based XSS
- ソースとシンク
- シンクとなるDocument.innerHTMLやlocation.hrefなどは使わない
- 固定値リストをちゃんと使ってね
PHPから離れて感じるPHPの良さ
Composer
- Pythonではpip
- 依存性の解決が素晴らしい
- 光の速さで遅い
PHPは優秀なライブラリが多い
- Carbon
- SwiftMailer
- Monolog
- Guzzle
- SymfonyComponents
PHPから離れて
- PHP依存の悪循環
- 結局離れられていない
LTで気になったもの
swaggerでかっこいい APIドキュメントを作ろう
- APIの定義をドキュメントブロックに書く
- API定義情報のリストをjsonで吐き出せる
- パラメータを指定してリクエスト結果などを確認できるAPIドキュメントページが出来る
まとめ
以上です。
初めてPHPカンファレンスに参加しましたが、かなり勉強になりました。
また行きたいなー