SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
ランサーズ株式会社
エンジニア / 上野諒一
CakePHP3.5における各種実装例
〜 LancersTopの開発現場からTipsを喋り倒す 〜
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
自己紹介
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
自己紹介 3
上野諒一
Github: ryoichi-u
Twitter: @waldo0515
略歴
 大学時代は北海道で機械/触媒
 ランサーズには2014年に新卒入社
 2016年 ランサーズストア 立ち上げ
 2017年 Lancers Top 立ち上げ
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
目次 4
 はじめに
 CakePHPについて
 実装例を交えた各種知見の紹介
① 初期開発時はDBを簡単にリセットする手段を作ると楽ちん
② FixtureとSeedは共通化できる
③ Sessionは3箇所の設定値を注意する
④ emailバリデーションはひらがな通るので差し替えとくのが無難
⑤ 設定値は.envに寄せてapp.phpをgit管理にすると楽になった
⑥ CIにPHPMD, PHPCS, phpunit載せるときの設定
今日のTipsたち
ちなみに喋りきれなかったAppendixも6つあります
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Lancersのサービスについて
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
はじめに
ランサーズとは
6
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
提供しているサービス(一部抜粋) 7
デジタルマーケティングクラウドソーシング
シェアリングエコノミー
スキルマーケット
エンジニア向け案件紹介
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
LancersTopのちょっと宣伝 8
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
LancersTop について 9
実力を可視化するLancers Topのスキルテストについて
トップタレント
三次審査:スキルテスト(3段階)
二次審査:面談
一次審査:レジュメ
タレント
■応用/プログラムテスト合格者:
最低保証額700,000円〜
■実践/記述式テスト合格者:
最低保証額600,000円〜
■知識/選択式テスト合格者:
最低保証額500,000円〜
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Lancers Top プロジェクト概要
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
プロジェクトメンバー 11
企画戦略段階(上野 + 取締役)
立ち上げ開発(eng x3人 + des x1人 + テスト作成 x1人)
事業開始(eng x2人 + des x1人 + 営業 x3人)
2017 / 2
2017 / 6
開発開始
2017 / 8
closed βリリース
2017 / 10
一般リリース
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Lancers Top サーバー構成 12
skill test
EC2
App
S3
ELB
Route53
ErastiCache
Memcached
Aurora
Reader
Aurora
Writer
EC2
instance
Batch
EC2
instance
Log
SES
S3
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Lancers Top を支える技術 13
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CakePHP について
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CakePHP3系について 15
2015 に3.0がリリース、クラウドソーシングランサーズでは1.3系をサービス初期から利用
半年に一度程のペースでマイナーバージョンアップを重ねて 2017/11/20 現在で最新は 3.5.6
3.x 系はORM周りが大きく変化
Model => Entity, Tableの分離(+ Query, CollectionTraitによる各種インターフェイス変更)
https://cakephp.org
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
ディレクトリ構成 16
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CakePHP3 導入の背景 17
LancersのCakePHPバージョンアップ施策について
PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 PJ推進する自分自身が慣れていてスピードを出せる
 別途進行中のバージョンアップ対応への橋頭堡を担う
 業務レベルで使った経験あるメンバーなし
 javascript, css, imageファイルの管理どうしよう
 レンダリングページとwebAPI呼び出しのエラー表示
 routing / counroller構成どうしよう
 etc...
とは言え導入にあたり悩みはつきない
今日はLancers Top 開発でのTips話します
なのでカッコイイ解決というより一つでも活かせる実装があれば嬉しいです
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
実装例を交えて各種知見を紹介
~ 時間ある限りTips 話します ~
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
目次 19
 はじめに
 CakePHPについて
 実装例を交えた各種知見の紹介
① 初期開発時はDBを簡単にリセットする手段を作ると楽ちん
② FixtureとSeedは共通化できる
③ Sessionは3箇所の設定値を注意する
④ emailバリデーションはひらがな通るので差し替えとくのが無難
⑤ 設定値は.envに寄せてapp.phpをgit管理にすると楽になった
⑥ CIにPHPMD, PHPCS, phpunit載せるときの設定
今日のTipsたち
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
① 初期開発時はDBを簡単にリセット
② seedsとtests/fixturesの共通化
migrationでの工夫
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CakePHPにはmigrationツールが付属されています 21
実行時間を管理してくれてSQLの実行順が… と行ったことから解放され
migrationの状態確認や巻き戻しなどが楽にできます。
CakeにはPhinxをラップしたプラグインを標準装備 ( https://phinx.org/ )
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その① ~ 環境リセット ~ 22
• 常に同一のDB環境で開発したい
• dockerのmysqlコンテナは他のプロジェクトとも共用
背景
新しいブランチ取り込んだら
DBでエラーになります
デザイナー
なんかエラーになりました
データ変になっている...
エンジニア
表示が変になります
毎回毎回対応するの大変だな
エンジニア
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その① ~ 環境リセット ~ 23
とりあえずこのコマンド打っ
てください
新しいブランチ取り込んだら
DBでエラーになります
デザイナー エンジニア
泥臭いですが、数行で幸せに
実際のコード例
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その① ~ 環境リセット ~ 24
他のアプローチ
まともにmigrationに乗っかると
• 201706200001_CreateUsers.php
• 201706230001_ChangeUsers.php
• 201706270001_ChangeUsers.php
• …
リリース後はこれでいい。
初期開発には向かない
rollbackの仕組み使うと
• 同じファイル内容でrollbackしないとエラーになる
• developmentでrollback => 開発ブランチでmigration
めんどくさい
dockerコンテナの再作成
• 別プロジェクトのデータリセットしたくない DBコンテナ独立してたら楽
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
① 初期開発時はDBを簡単にリセット
② seedsとtests/fixturesの共通化
migrationでの工夫
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 26
• phpunitでテストを作っているとfixtureとしてほしいデータが同一
• メンテナンスがめんどくさい
背景
調べてみると…
• fixture と seed で使っているテーブルの配列が一緒
• fixtureのスキーマはmigration => bakeにより一致を保証
エンジニア
新しいテーブル作る
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 27
背景
エンジニア
新しいテーブル作るから開
発環境用にseed作る
新しいテーブルに関係する
テスト作ろう
スキーマ変更したから
seed作り変えよう
エンジニア
fixtureも変えなきゃだよ。もはや同じ
ような記述何回もしてる。
なんとかならんかね
CIが落ちています !!!!!
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 28
実際のコード例 Seed側
insertが要求する配列が同じことを利用
調べてみると…
• fixture と seed で使っているテーブルの配列が一緒
• fixtureのスキーマはmigration => bakeにより一致を保証
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 29
実際のコード例 Fixture側
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
③ Session(memcached)のexpire設定
④ app.php はgit管理に入れて .envを活用
設定値に関わるTips
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Session(memcached)のexpire設定 31
Lancers Top ではsessionストレージとしてmemcachedを採用
しかし、意図しないタイミングでログインが切れてしまう
なんかセッション切れる…
cookie, memcache両方ともexpire
は想定通り入っている
それが数十分で突然消えます
ね
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Session(memcached)のexpire設定 32
 app.phpのSession設定でストレージとcookieのexpireを設定
 app.phpのCache設定でmemcachedのexpireを設定
 php.iniのsession.gc_maxlifetime (アプリケーション全体影響あり)
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
③ Session(memcached)のexpire設定
④ app.php はgit管理に入れて .envを活用
設定値に関わるTips
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
config/app.php はgit管理に入れて .envを活用 34
こことあそこと…
ん〜うまく動かない
設定ファイル変えました
差分はxxxxです
ごめん、yyyyの配列構造を少
し変更しています
config/app.php のみで管理していた時代
ようやく動いた
私の環境動かないです
それ、app.php.20171002の変
更取り込んでる?
取り込んでませんでした
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
app.php はgit管理に入れて .envを活用 35
 Cakephp3.5から.envはスケルトンにも導入された
 CircleCI でも環境変数設定ができるので管理がしやすい
 git管理外の情報は必要最低限にしたい(差分がわかりにくい!)
背景
Cakeデフォルトのapp.phpの役割
 構成設定の配列構造 + 設定値
分離後の役割
 config/app.php : 構成設定の配列構造 => git管理可能な情報
 config/.env : 設定値
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
app.php はgit管理に入れて .envを活用 36
実際のコード例 config/bootstrap.php
実際のコード例 config/.env
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
app.php はgit管理に入れて .envを活用 37
実際のコード例 config/app.php
環境によって異なるもの
gitで管理されてはまずいもの
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
⑤ ひらがなメールアドレスは true
バリデーションここは注意!
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
ひらがなメールアドレスは true 39
さらっとメールアドレスのエラーテストしようとしました
なんとこれが通らない。。。エラーにならない?
どういうこと?
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
ひらがなメールアドレスは true 40
PHP標準のemailフィルターを使用 (Laravelに合わせています)
cakephp/tests/TestCase/Validation/ValidationTest.php
Unicodeなら行けそうな雰囲気のテストになっている
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
⑥ CI によるコード品質の担保
~ CakePHPバージョン追従に向けて ~
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CircleCI によるコード品質の担保 42
 phpunitによる単体テスト ~ 簡単なコントローラーの振る舞いチェック
 PHPMDによるコードの複雑度や規約違反の警告
 php_cs_fixerによるインデント等の自動修正
LancersTopではCircleCIを用いています
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CircleCI によるコード品質の担保 43
php_cs_fixer.sh
phpmd.sh
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CircleCI によるコード品質の担保 44
この他、TestCafeによるE2Eテストを主要フローにおいて記述
バージョンアップ時の検証は以下2つで今のところ問題なく非常にスムーズ
 変更箇所を翻訳して調査
 githubにpush して各種ビルドとテストが通過しているか
 手元でTestCafe実行してエラーにならないか
3.4.6
3.4.11
3.5.2
3.5.6 <= ブランチで動作確認ずみ
サービスリリース
3.4.9
3.4.8
プロトタイプ作成
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
まとめ
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
まとめ 46
① 初期開発時はDBを簡単にリセットする手段を作ると楽ちん
② FixtureとSeedは共通化できる
③ Sessionは3箇所の設定値を注意する
④ 設定値は.envに寄せてapp.phpをgit管理にすると楽になった
⑤ emailバリデーションはひらがな通るので差し替えとくのが無難
⑥ CIにPHPMD, PHPCS, phpunit載せるときの設定
今日のTipsたち
話しきれなかったものはAppendixつけました。
この他、ここでは話しきれませんでしたが、
 docs系の管理
 jsの管理
 cssの管理
 プロジェクト推進など
色々と工夫してきた点あるので懇親会などで話しましょう!
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
で、いつもの
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
絶賛、募集中
ランサーズではエンジニアを募集中です が
● 弊社HP、Wantedly等
ご応募お待ちしてます
48
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
CakePHP3.x のクックブックリーディグ来ませんか
毎週木曜日にCakePHP3.xの
クックブックリーディングを行っています
49
https://lancers-engineer.connpass.com/お気軽に遊びに来てください!!
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
ご清聴ありがとうございました!
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Appendix
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Appemdix目次 52
① 静的ファイルのバージョン付与
② エラー表示 viewとapiで共通化
③ Elementのcacheでハマった話
④ PHP7.0の型指定は使っていったほうがいいよ
⑤ utf8mb4でのmigration (未解決)
⑥ その他作った便利クラス/便利メソッドたち
時間なくて省略したスライドたち
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
静的ファイルのバージョン付与
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
静的ファイルのバージョン付与 54
• よくある話ですが、、、
• リリース時ブラウザキャッシュによってcssやjsが正常に動作しない
• => リリース毎にキャッシュをクリアしたい
背景
外部CDNからの読み込みはなくパッケージ管理済み
• js => webpackで管理
• css => gulpで管理
• それぞれHtmlHelper経由でタグ出力
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
静的ファイルのバージョン付与 55
実際のコード例 オーバーライド箇所
バージョン文字列を後ろに付与
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
静的ファイルのバージョン付与 56
実際のコード例 出力
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
エラー表示 viewとapiで共通化
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
エラー表示 viewとapiで共通化 58
• Apiによる非同期処理が多くなりそうだった
• エラーフィールド出力のルール理解が厄介
背景
どのように解決しているか
• 配列のルールを決め、エラー解析用javascriptモジュールを用意しておく
• 形式はCakePHPの Validator::_errors の形式に揃える
• => APIでもレンダリングでも同じ形の配列を返すようにする
• => document.ready() と APIリクエストのコールバックで実行
FormHelperのエラー表示は非常に強力ですが、Lancers Topでは未使用です
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
エラー表示 viewとapiで共通化 59
errorMessages (常にconfigより出力)
errors (ControllerでSet)
テンプレートレンダリング時の処理
=> それぞれjson_encode()してjsに渡す
API呼び出し時の処理
errorMessages (すでに定数に存在)
errors (Response Bodyで受け取る)
errorListとしてエラー表示用に変換 {field: name, message: 入力してください}
エラー表示各種モジュール
 エラー項目表示
 エラーがあったら上部にアラート表示など
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
エラー表示 viewとapiで共通化 60
実際のコード例 webAPIとしてControllerで返すレスポンス
error はエラー配列が入っていることを示す識別子
table_nameはcontrollerで指定
Entity::getErrors()で出力される配列
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
エラー表示 viewとapiで共通化 61
実際のコード例 config/validation.phpでの設定
ネストされていないのはdefault設定値(table, field関係なくerrorのキーのみ)
controllerでsetしたものと同様の形式(優先)
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
エラー表示 viewとapiで共通化 62
実際のコード例 jsの処理の一つ
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Element の cache設定
~ ハマったのが恥ずかしい落とし穴 ~
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Element の cache設定 64
Element は キャッシュできます。
 最初はこのようにcacheしていました
 動的な処理が入ってきたのでcacheを無効にしました (したつもりでした)
中身変更しても消えない 。。。
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Element の cache設定 65
 正解はキー指定そのものを消すこと
 早くソースコード見ればよかった View::element()
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
PHP7系の型指定はできるだけ使う
~ 考えられる可能性を減らす ~
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
PHP7系の型指定はできるだけ使う 67
PHP7.0から型宣言が大幅に増えました。戻り値の指定も可能です
LancersTopの開発でも基本的につけるようにしています
falseと配列を返すのではなく何も
ないときは空配列返そう
効果
 実装者が型を統一するようになる
 関数の中で型チェックやキャストしないですむ
 間違ったら瞬時にエラーになるので気づきやすい
 フレームワークの関数の返り値を意識するようになり理解が深まる
find()のときってどんな型で返って
くる可能性があるんだ?
http://sssslide.com/speakerdeck.com/twada/php-conference-2016
このあたりは@t_wadaさんのスライドのほうが説得力があるのでそちらを
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
utf8mb4でのmigration (未解決)
~ どこかでPhnix側にPR出したい ~
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
utf8mb4でのmigration (未解決) 69
MySQLで4バイト文字(絵文字など)を取り扱えるようにutf8mb4にしたい
この場合varchar, textなどでindexを作成しようとすると
カラムのキープレフィックス上限の最大値767byteに達しエラーになる
この解決法はfile_formatを変更して圧縮すること
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
utf8mb4でのmigration (未解決) 70
PhnixではROW_FORMATの指定が未対応
オプションの充実はこれから
MysqlAdapter::createTable()
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
その他Tips
~ 作った便利クラス/メソッドたち ~
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
loadModels ~ 複数のTableをloadする ~ 72
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
nginxのログにUserIdを出力する 73
PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ
Controllerテストでは常にCSRFトークンONにする 74

Mais conteúdo relacionado

Mais procurados

今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれYuya Kikukawa
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことYuta Ohashi
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015Rui Hirokawa
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSTomoki Hasegawa
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うYuta Ohashi
 
三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなしYuta Ohashi
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven DevelopmentRyo Tomidokoro
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
anything-php-funcref-perl.el
anything-php-funcref-perl.elanything-php-funcref-perl.el
anything-php-funcref-perl.elKenichirou Oyama
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみたy-uti
 
Introduction of Programming language
Introduction of Programming languageIntroduction of Programming language
Introduction of Programming languagenasa9084
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界Yuuki Takezawa
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSLurasandesu
 

Mais procurados (20)

今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ
 
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのことLaravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合う
 
Linux debug
Linux debugLinux debug
Linux debug
 
三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし三項演算子を見ると「ウッ」てなる人のはなし
三項演算子を見ると「ウッ」てなる人のはなし
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
anything-php-funcref-perl.el
anything-php-funcref-perl.elanything-php-funcref-perl.el
anything-php-funcref-perl.el
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
 
Introduction of Programming language
Introduction of Programming languageIntroduction of Programming language
Introduction of Programming language
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
 

Semelhante a CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話Yuki Kanazawa
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例Yusuke Naka
 
PHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングminiPHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングminiTakhisa Hirokawa
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~takenao
 
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ーWeb デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ーKite Koga
 
Hashicorpツールズ
HashicorpツールズHashicorpツールズ
HashicorpツールズUchio Kondo
 
20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造do_aki
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバーk-motoyan
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020Rui Hirokawa
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022Rui Hirokawa
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装Kenjiro Kubota
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法Rui Hirokawa
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺Shogo Kawahara
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するYoshio Hanawa
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件y-uti
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションMasashi Shinbara
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Y Watanabe
 

Semelhante a CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~ (20)

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
PHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングminiPHPerのためのpostgresqlチューニングmini
PHPerのためのpostgresqlチューニングmini
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
 
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ーWeb デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
Web デザイナーが身に付けておきたい定番スキル ーPHP 初級編ー
 
Hashicorpツールズ
HashicorpツールズHashicorpツールズ
Hashicorpツールズ
 
20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバー
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
NanoA
NanoANanoA
NanoA
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーション
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 

CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~

  • 1. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ランサーズ株式会社 エンジニア / 上野諒一 CakePHP3.5における各種実装例 〜 LancersTopの開発現場からTipsを喋り倒す 〜
  • 2. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 自己紹介
  • 3. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 自己紹介 3 上野諒一 Github: ryoichi-u Twitter: @waldo0515 略歴  大学時代は北海道で機械/触媒  ランサーズには2014年に新卒入社  2016年 ランサーズストア 立ち上げ  2017年 Lancers Top 立ち上げ
  • 4. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 目次 4  はじめに  CakePHPについて  実装例を交えた各種知見の紹介 ① 初期開発時はDBを簡単にリセットする手段を作ると楽ちん ② FixtureとSeedは共通化できる ③ Sessionは3箇所の設定値を注意する ④ emailバリデーションはひらがな通るので差し替えとくのが無難 ⑤ 設定値は.envに寄せてapp.phpをgit管理にすると楽になった ⑥ CIにPHPMD, PHPCS, phpunit載せるときの設定 今日のTipsたち ちなみに喋りきれなかったAppendixも6つあります
  • 5. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Lancersのサービスについて
  • 6. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ はじめに ランサーズとは 6
  • 7. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 提供しているサービス(一部抜粋) 7 デジタルマーケティングクラウドソーシング シェアリングエコノミー スキルマーケット エンジニア向け案件紹介
  • 8. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ LancersTopのちょっと宣伝 8
  • 9. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ LancersTop について 9 実力を可視化するLancers Topのスキルテストについて トップタレント 三次審査:スキルテスト(3段階) 二次審査:面談 一次審査:レジュメ タレント ■応用/プログラムテスト合格者: 最低保証額700,000円〜 ■実践/記述式テスト合格者: 最低保証額600,000円〜 ■知識/選択式テスト合格者: 最低保証額500,000円〜
  • 10. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Lancers Top プロジェクト概要
  • 11. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ プロジェクトメンバー 11 企画戦略段階(上野 + 取締役) 立ち上げ開発(eng x3人 + des x1人 + テスト作成 x1人) 事業開始(eng x2人 + des x1人 + 営業 x3人) 2017 / 2 2017 / 6 開発開始 2017 / 8 closed βリリース 2017 / 10 一般リリース
  • 12. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Lancers Top サーバー構成 12 skill test EC2 App S3 ELB Route53 ErastiCache Memcached Aurora Reader Aurora Writer EC2 instance Batch EC2 instance Log SES S3
  • 13. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Lancers Top を支える技術 13
  • 14. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CakePHP について
  • 15. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CakePHP3系について 15 2015 に3.0がリリース、クラウドソーシングランサーズでは1.3系をサービス初期から利用 半年に一度程のペースでマイナーバージョンアップを重ねて 2017/11/20 現在で最新は 3.5.6 3.x 系はORM周りが大きく変化 Model => Entity, Tableの分離(+ Query, CollectionTraitによる各種インターフェイス変更) https://cakephp.org
  • 16. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ディレクトリ構成 16
  • 17. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CakePHP3 導入の背景 17 LancersのCakePHPバージョンアップ施策について PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話  PJ推進する自分自身が慣れていてスピードを出せる  別途進行中のバージョンアップ対応への橋頭堡を担う  業務レベルで使った経験あるメンバーなし  javascript, css, imageファイルの管理どうしよう  レンダリングページとwebAPI呼び出しのエラー表示  routing / counroller構成どうしよう  etc... とは言え導入にあたり悩みはつきない 今日はLancers Top 開発でのTips話します なのでカッコイイ解決というより一つでも活かせる実装があれば嬉しいです
  • 18. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 実装例を交えて各種知見を紹介 ~ 時間ある限りTips 話します ~
  • 19. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 目次 19  はじめに  CakePHPについて  実装例を交えた各種知見の紹介 ① 初期開発時はDBを簡単にリセットする手段を作ると楽ちん ② FixtureとSeedは共通化できる ③ Sessionは3箇所の設定値を注意する ④ emailバリデーションはひらがな通るので差し替えとくのが無難 ⑤ 設定値は.envに寄せてapp.phpをgit管理にすると楽になった ⑥ CIにPHPMD, PHPCS, phpunit載せるときの設定 今日のTipsたち
  • 20. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ① 初期開発時はDBを簡単にリセット ② seedsとtests/fixturesの共通化 migrationでの工夫
  • 21. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CakePHPにはmigrationツールが付属されています 21 実行時間を管理してくれてSQLの実行順が… と行ったことから解放され migrationの状態確認や巻き戻しなどが楽にできます。 CakeにはPhinxをラップしたプラグインを標準装備 ( https://phinx.org/ )
  • 22. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その① ~ 環境リセット ~ 22 • 常に同一のDB環境で開発したい • dockerのmysqlコンテナは他のプロジェクトとも共用 背景 新しいブランチ取り込んだら DBでエラーになります デザイナー なんかエラーになりました データ変になっている... エンジニア 表示が変になります 毎回毎回対応するの大変だな エンジニア
  • 23. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その① ~ 環境リセット ~ 23 とりあえずこのコマンド打っ てください 新しいブランチ取り込んだら DBでエラーになります デザイナー エンジニア 泥臭いですが、数行で幸せに 実際のコード例
  • 24. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その① ~ 環境リセット ~ 24 他のアプローチ まともにmigrationに乗っかると • 201706200001_CreateUsers.php • 201706230001_ChangeUsers.php • 201706270001_ChangeUsers.php • … リリース後はこれでいい。 初期開発には向かない rollbackの仕組み使うと • 同じファイル内容でrollbackしないとエラーになる • developmentでrollback => 開発ブランチでmigration めんどくさい dockerコンテナの再作成 • 別プロジェクトのデータリセットしたくない DBコンテナ独立してたら楽
  • 25. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ① 初期開発時はDBを簡単にリセット ② seedsとtests/fixturesの共通化 migrationでの工夫
  • 26. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 26 • phpunitでテストを作っているとfixtureとしてほしいデータが同一 • メンテナンスがめんどくさい 背景 調べてみると… • fixture と seed で使っているテーブルの配列が一緒 • fixtureのスキーマはmigration => bakeにより一致を保証 エンジニア 新しいテーブル作る
  • 27. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 27 背景 エンジニア 新しいテーブル作るから開 発環境用にseed作る 新しいテーブルに関係する テスト作ろう スキーマ変更したから seed作り変えよう エンジニア fixtureも変えなきゃだよ。もはや同じ ような記述何回もしてる。 なんとかならんかね CIが落ちています !!!!!
  • 28. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 28 実際のコード例 Seed側 insertが要求する配列が同じことを利用 調べてみると… • fixture と seed で使っているテーブルの配列が一緒 • fixtureのスキーマはmigration => bakeにより一致を保証
  • 29. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ migrationの工夫 その② ~ tests/fixturesとの共通化 ~ 29 実際のコード例 Fixture側
  • 30. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ③ Session(memcached)のexpire設定 ④ app.php はgit管理に入れて .envを活用 設定値に関わるTips
  • 31. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Session(memcached)のexpire設定 31 Lancers Top ではsessionストレージとしてmemcachedを採用 しかし、意図しないタイミングでログインが切れてしまう なんかセッション切れる… cookie, memcache両方ともexpire は想定通り入っている それが数十分で突然消えます ね
  • 32. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Session(memcached)のexpire設定 32  app.phpのSession設定でストレージとcookieのexpireを設定  app.phpのCache設定でmemcachedのexpireを設定  php.iniのsession.gc_maxlifetime (アプリケーション全体影響あり)
  • 33. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ③ Session(memcached)のexpire設定 ④ app.php はgit管理に入れて .envを活用 設定値に関わるTips
  • 34. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ config/app.php はgit管理に入れて .envを活用 34 こことあそこと… ん〜うまく動かない 設定ファイル変えました 差分はxxxxです ごめん、yyyyの配列構造を少 し変更しています config/app.php のみで管理していた時代 ようやく動いた 私の環境動かないです それ、app.php.20171002の変 更取り込んでる? 取り込んでませんでした
  • 35. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ app.php はgit管理に入れて .envを活用 35  Cakephp3.5から.envはスケルトンにも導入された  CircleCI でも環境変数設定ができるので管理がしやすい  git管理外の情報は必要最低限にしたい(差分がわかりにくい!) 背景 Cakeデフォルトのapp.phpの役割  構成設定の配列構造 + 設定値 分離後の役割  config/app.php : 構成設定の配列構造 => git管理可能な情報  config/.env : 設定値
  • 36. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ app.php はgit管理に入れて .envを活用 36 実際のコード例 config/bootstrap.php 実際のコード例 config/.env
  • 37. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ app.php はgit管理に入れて .envを活用 37 実際のコード例 config/app.php 環境によって異なるもの gitで管理されてはまずいもの
  • 38. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ⑤ ひらがなメールアドレスは true バリデーションここは注意!
  • 39. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ひらがなメールアドレスは true 39 さらっとメールアドレスのエラーテストしようとしました なんとこれが通らない。。。エラーにならない? どういうこと?
  • 40. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ひらがなメールアドレスは true 40 PHP標準のemailフィルターを使用 (Laravelに合わせています) cakephp/tests/TestCase/Validation/ValidationTest.php Unicodeなら行けそうな雰囲気のテストになっている
  • 41. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ⑥ CI によるコード品質の担保 ~ CakePHPバージョン追従に向けて ~
  • 42. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CircleCI によるコード品質の担保 42  phpunitによる単体テスト ~ 簡単なコントローラーの振る舞いチェック  PHPMDによるコードの複雑度や規約違反の警告  php_cs_fixerによるインデント等の自動修正 LancersTopではCircleCIを用いています
  • 43. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CircleCI によるコード品質の担保 43 php_cs_fixer.sh phpmd.sh
  • 44. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CircleCI によるコード品質の担保 44 この他、TestCafeによるE2Eテストを主要フローにおいて記述 バージョンアップ時の検証は以下2つで今のところ問題なく非常にスムーズ  変更箇所を翻訳して調査  githubにpush して各種ビルドとテストが通過しているか  手元でTestCafe実行してエラーにならないか 3.4.6 3.4.11 3.5.2 3.5.6 <= ブランチで動作確認ずみ サービスリリース 3.4.9 3.4.8 プロトタイプ作成
  • 45. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ まとめ
  • 46. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ まとめ 46 ① 初期開発時はDBを簡単にリセットする手段を作ると楽ちん ② FixtureとSeedは共通化できる ③ Sessionは3箇所の設定値を注意する ④ 設定値は.envに寄せてapp.phpをgit管理にすると楽になった ⑤ emailバリデーションはひらがな通るので差し替えとくのが無難 ⑥ CIにPHPMD, PHPCS, phpunit載せるときの設定 今日のTipsたち 話しきれなかったものはAppendixつけました。 この他、ここでは話しきれませんでしたが、  docs系の管理  jsの管理  cssの管理  プロジェクト推進など 色々と工夫してきた点あるので懇親会などで話しましょう!
  • 47. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ で、いつもの
  • 48. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 絶賛、募集中 ランサーズではエンジニアを募集中です が ● 弊社HP、Wantedly等 ご応募お待ちしてます 48
  • 49. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ CakePHP3.x のクックブックリーディグ来ませんか 毎週木曜日にCakePHP3.xの クックブックリーディングを行っています 49 https://lancers-engineer.connpass.com/お気軽に遊びに来てください!!
  • 50. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ ご清聴ありがとうございました!
  • 51. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Appendix
  • 52. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Appemdix目次 52 ① 静的ファイルのバージョン付与 ② エラー表示 viewとapiで共通化 ③ Elementのcacheでハマった話 ④ PHP7.0の型指定は使っていったほうがいいよ ⑤ utf8mb4でのmigration (未解決) ⑥ その他作った便利クラス/便利メソッドたち 時間なくて省略したスライドたち
  • 53. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 静的ファイルのバージョン付与
  • 54. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 静的ファイルのバージョン付与 54 • よくある話ですが、、、 • リリース時ブラウザキャッシュによってcssやjsが正常に動作しない • => リリース毎にキャッシュをクリアしたい 背景 外部CDNからの読み込みはなくパッケージ管理済み • js => webpackで管理 • css => gulpで管理 • それぞれHtmlHelper経由でタグ出力
  • 55. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 静的ファイルのバージョン付与 55 実際のコード例 オーバーライド箇所 バージョン文字列を後ろに付与
  • 56. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ 静的ファイルのバージョン付与 56 実際のコード例 出力
  • 57. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ エラー表示 viewとapiで共通化
  • 58. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ エラー表示 viewとapiで共通化 58 • Apiによる非同期処理が多くなりそうだった • エラーフィールド出力のルール理解が厄介 背景 どのように解決しているか • 配列のルールを決め、エラー解析用javascriptモジュールを用意しておく • 形式はCakePHPの Validator::_errors の形式に揃える • => APIでもレンダリングでも同じ形の配列を返すようにする • => document.ready() と APIリクエストのコールバックで実行 FormHelperのエラー表示は非常に強力ですが、Lancers Topでは未使用です
  • 59. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ エラー表示 viewとapiで共通化 59 errorMessages (常にconfigより出力) errors (ControllerでSet) テンプレートレンダリング時の処理 => それぞれjson_encode()してjsに渡す API呼び出し時の処理 errorMessages (すでに定数に存在) errors (Response Bodyで受け取る) errorListとしてエラー表示用に変換 {field: name, message: 入力してください} エラー表示各種モジュール  エラー項目表示  エラーがあったら上部にアラート表示など
  • 60. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ エラー表示 viewとapiで共通化 60 実際のコード例 webAPIとしてControllerで返すレスポンス error はエラー配列が入っていることを示す識別子 table_nameはcontrollerで指定 Entity::getErrors()で出力される配列
  • 61. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ エラー表示 viewとapiで共通化 61 実際のコード例 config/validation.phpでの設定 ネストされていないのはdefault設定値(table, field関係なくerrorのキーのみ) controllerでsetしたものと同様の形式(優先)
  • 62. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ エラー表示 viewとapiで共通化 62 実際のコード例 jsの処理の一つ
  • 63. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Element の cache設定 ~ ハマったのが恥ずかしい落とし穴 ~
  • 64. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Element の cache設定 64 Element は キャッシュできます。  最初はこのようにcacheしていました  動的な処理が入ってきたのでcacheを無効にしました (したつもりでした) 中身変更しても消えない 。。。
  • 65. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Element の cache設定 65  正解はキー指定そのものを消すこと  早くソースコード見ればよかった View::element()
  • 66. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ PHP7系の型指定はできるだけ使う ~ 考えられる可能性を減らす ~
  • 67. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ PHP7系の型指定はできるだけ使う 67 PHP7.0から型宣言が大幅に増えました。戻り値の指定も可能です LancersTopの開発でも基本的につけるようにしています falseと配列を返すのではなく何も ないときは空配列返そう 効果  実装者が型を統一するようになる  関数の中で型チェックやキャストしないですむ  間違ったら瞬時にエラーになるので気づきやすい  フレームワークの関数の返り値を意識するようになり理解が深まる find()のときってどんな型で返って くる可能性があるんだ? http://sssslide.com/speakerdeck.com/twada/php-conference-2016 このあたりは@t_wadaさんのスライドのほうが説得力があるのでそちらを
  • 68. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ utf8mb4でのmigration (未解決) ~ どこかでPhnix側にPR出したい ~
  • 69. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ utf8mb4でのmigration (未解決) 69 MySQLで4バイト文字(絵文字など)を取り扱えるようにutf8mb4にしたい この場合varchar, textなどでindexを作成しようとすると カラムのキープレフィックス上限の最大値767byteに達しエラーになる この解決法はfile_formatを変更して圧縮すること
  • 70. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ utf8mb4でのmigration (未解決) 70 PhnixではROW_FORMATの指定が未対応 オプションの充実はこれから MysqlAdapter::createTable()
  • 71. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ その他Tips ~ 作った便利クラス/メソッドたち ~
  • 72. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ loadModels ~ 複数のTableをloadする ~ 72
  • 73. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ nginxのログにUserIdを出力する 73
  • 74. PHP Tech Bash!!! 2017/11/21 #tech_eight_ #ランサーズ Controllerテストでは常にCSRFトークンONにする 74

Notas do Editor

  1. いつでも、どこでも、個人と企業がマッチング。 クラウドソーシングで「働く」を変える。
  2. 2年ぐらい前に? 2年ぐらいはかかるからリソースは割けない