2020/9/18に行われたオンライン勉強会 https://connehito.connpass.com/event/187729/ で発表した資料です。
最近のCakePHP4バージョンアップの取り組みについて発表させていただきました。
2020/9/25 Connehito Marché OnlineランサーズのCakePHP4移行についてhttps://www.lancers.jp/
View Slide
2020/9/25 Connehito Marché Online自己紹介 2氏名:金澤 裕毅出身:宮城県仙台市Lancers, Inc. / Site Reliability Engineer (2013/11 -)趣味: 将棋(ウォーズ初段、将棋倶楽部24で1000点くらい)Github:yKanazawaTwitter: @yakitori009Language: C++, Java, PHP, Go
2020/9/25 Connehito Marché OnlineAbout Lancershttps://www.lancers.jp/Genre: CrowdsourcingStart: 2008/4PHP5.2 → 5.3 → 5.6 → 7.3CakePHP1.2 → 1.3 → 2.8 → 2.102017年時点 現在
2020/9/25 Connehito Marché OnlinePHPバージョンアップの歴史
2020/9/25 Connehito Marché OnlineランサーズのPHPバージョンアップの歴史1.3 -> 2.82.8 -> 2.102.10 -> 4.x .. more5.3 -> 5.65.6 -> 7.3->PHP5.6requires2017/6/62 months1.7 year2019/2/51.8 month2019/3/272019/3/281 day2019/5/282 monthsCakePHP2.10requiresPHP7.3requires
2020/9/25 Connehito Marché Onlineソースコードの分離
2020/9/25 Connehito Marché OnlinePruduct scale (https://www.lancers.jp/)files stepsConfig 190 60000Console 170 30000Controller 350 110000Lib 1100 153000Model 420 105000View 2800 240000All 5030 698000
2020/9/25 Connehito Marché OnlinePHP7.3CakePHP2.10lancersPHP7.3CakePHP2.10lancersPHP7.3CakePHP2.10lancers8ランサーズのサーバー構成EC2instanceCloudFront Route 53ALBAutoScaling AppAuroraReaderAuroraReaderAuroraWriterランサーズBatchMySQL5.7ALBAdmin管理画面全て同じリポジトリ
2020/9/25 Connehito Marché Onlineサービス分割CakePHP1.3CakePHP2.8●lancers_cakephpの巨大リポジトリから各機能を分離○管理画面(CakePHP4で再構築)○バッチ(CakePHP4で再構築)○LP○その他巨大リポジトリBatchAppAdminS3S3LambdaCakePHP4で新規作成CakePHP4で新規作成
2020/9/25 Connehito Marché Onlineバッチのリポジトリ分離
2020/9/25 Connehito Marché Online●ShellクラスはCakePHP5で廃止○ShellからCommandへの移行コンソールコマンドの採用
2020/9/25 Connehito Marché Online多重起動防止処理を共通クラスに実装declare(strict_types=1);namespace App¥Command;use Cake¥Console¥Command;use ReflectionClass;class BaseCommand extends Command{public $className;public $lockFileName;public $isLockfileExit = false;public function __construct(){parent::__construct();$this->className = (new ReflectionClass($this))->getShortName();$this->lockFileName = TMP . $this->className .'.lock';// ロックファイルのプロセスIDをチェックif ($this->checkLockFile()) {$this->isLockfileExit = true;exit;}// ロックファイルの作成file_put_contents($this->lockFileName, getmypid());}public function __destruct(){// プロセスがすでに存在して強制終了でなければif (!$this->isLockfileExit) {// ロックファイルの削除unlink($this->lockFileName);}}/** ロックファイルのプロセスIDをチェック*/protected function checkLockFile(): bool{// ロックファイルの存在確認if (!file_exists($this->lockFileName)) {return false;}// ファイル内に記載されているプロセスIDを取得$pid = file_get_contents($this->lockFileName);$pid = str_replace(PHP_EOL, '', $pid);if (!is_numeric($pid)) {return false;}//取得したプロセスIDが動いていないかチェック$output = [];$cmd = "ps h " . $pid;exec($cmd, $output);if (isset($output[0])) {echo "Process already exist.¥n";echo $output[0] . "¥n";return true;}return false;}}
2020/9/25 Connehito Marché Online●現バッチ○独自の分岐処理を実装●新バッチ○プラグインで分岐■cakephp-master-replicaプラグイン●コネヒト社製参照系DBへの切り替えBatchWriter Reader
2020/9/25 Connehito Marché Online切り替え処理の共通化declare(strict_types=1);namespace App¥Model¥Table;use Cake¥Datasource¥EntityInterface;use Cake¥ORM¥Query;use Cake¥ORM¥Table;abstract class BaseTable extends Table{public function __call($method, $args){if (preg_match('/^find(?:¥w+)?By/', $method) > 0) {$this->getConnection()->switchRole('replica');$result = parent::__call($method, $args);$this->getConnection()->switchRole('master');return $result;}return parent::__call($method, $args);}public function find(string $type = 'all', array $options = []): Query{$this->getConnection()->switchRole('replica');$result = parent::find($type, $options);$this->getConnection()->switchRole('master');return $result;}…●Tableクラスの以下の関数をオーバーライド○__call○find○findAll○findList○findThreaded○get
2020/9/25 Connehito Marché Online管理画面のリポジトリ分離
2020/9/25 Connehito Marché Online●CakePHP1.3ベース○手当たり次第にメニューを追加○画面がはみ出てもお構いなし昔の管理画面細かすぎるメニュー!
2020/9/25 Connehito Marché Online●CakePHP1.3ベース○メニューをまとめる○画面の調整管理画面のプチリニューアル
2020/9/25 Connehito Marché Online●CakePHP1.3ベース○新しい画面からBootstrapで作るようになった○デザインが統一されていないという問題も。。Bootstrapの導入経理系画面で導入した新UI
2020/9/25 Connehito Marché Online●CakePHP用のAdminLTEプラグインを採用新管理画面
2020/9/25 Connehito Marché OnlineCakePHP4関連のOSS活動
2020/9/25 Connehito Marché Online●CakePHP用AdminLTEプラグイン○ランサーズが最速でCakePHP4対応AdminLTEのCakePHP4対応
2020/9/25 Connehito Marché Online●コネヒト社製プラグイン○ランサーズがCakePHP4対応cakephp-master-replicaのCakePHP4対応
2020/9/25 Connehito Marché Online●CakePHP4ドキュメントの日本語訳○cakephp/docs 28 Pull Requestsマージ済cakephp/docsのCakePHP4日本語化
2020/9/25 Connehito Marché OnlineThank You!