【勉強会メモ】PHP Conference Kansai 2018
- 日時:7月 14日 (土曜日) 10:00~18:00
- 場所:グランフロント大阪 北館 タワーC 8階
毎年恒例のPHPカンファレンスですが、今回初参加です。PHPは仕事では使ったことがないしあまり詳しくないのですが、今回は弊社のメンバーが登壇するとのことで午後から参加してきました。
チャットディーラーの高速開発を支えるLaravel
坂田晃平さん
10年以上PHPでノンフレームワークで開発してきたチームがLaravelで高速開発
言語・フレームワーク
- PHP 7.1
- Laravel 5.5
- Node.js,Express,Socket.IO
開発チーム構成
- バックエンド(PHP)3名
- チャット(Node.js)3名
- 設計〜リリースまで半年(開発は実質2ヶ月)
新サービス立ち上げの課題
- 短納期
- レガシーからの脱却
フレームワークを使ってメンテナンス性向上
長期サポートされる条件を検討
- 使用者数が多く人気がある
- 活発なコミュニティ
- LTSを宣言している
Laravel
機能性
フレームワーク選定まとめ
- 長期サポート
- 機能性…フルスタック
Laravelで良かったこと
- オールインワンでスピード開発に向いていた
- 標準ライブラリが使いやすい
Laravelで困ったこと
Q: 実装2ヶ月Laravelの勉強法は?
- 事前の要件定義や設計の期間2ヶ月で勉強
- 本や学習サイト
Q: BootstrapやjQueryとVue.jsはどのようなところ?
- フロントの画面制御の処理はVue.js
- jQueryはVueでの実装方法がわからなかったり実装が簡単、ライブラリがある場合などに使用
- それぞれ使いやすいところで使った
Q: LaravelでWebSocketまわりは触っているのか?
- Laravelから直接は触っていない
- バックエンドサーバとチャットのサーバは別
- Laravelはスタッフ側の管理機能
PHPアプリケーションのコンテナ化入門
藤原吉規さん
コンテナが注目されている背景
コンテナの技術
コンテナとは
- リソース隔離されたプロセス
コンテナの特徴とメリット
- ゲストOSがリソースを持っていない
- リソース効率…オーバーヘッドが少ない
- スピード…起動が早い
- 柔軟性
- 可搬性
Dockerの登場
Dockerキーとなるコンポーネント
- Dockerコンテナ…プロせスとして起動するアプリの実行環境
- Dockerイメージ…OSやアプリを含むコンテナのテンプレート
- Dockerレジストリ…Dockerイメージを格納するレジストリ
- Dockerfile…OSのイメージからアプリまでが動作する環境がコードとして記述されたファイル
- Dockerクライアント…Docokerを操作
Docker環境の動作イメージ
- ライブデモ
- ApachとPHP 7.2を入れたDockerfileをgit cloneしてきて修正→コミットしてpush
- コードパイプラインでビルド、ステージングで確認して承認し、本番反映
(詳細は省略)
※参考
https://github.com/twingo-b/ecs-demo-php-simple-app https://aws.amazon.com/jp/cloudformation/aws-cloudformation-templates/?nc1=h_ls
コンテナ活用のポイント
- アプリ開発に考え方の変革が必要
- 12 Factor Apps (https://12factor.net/ja/)
- 複雑さを避けてシンプルに
- コンテナ内にタスク、ログ、設定、データを全部入り→アンチパターン
- 運用を考慮した仕組みが必要
- 複数ホストでどうコンテナを管理するか
- どのホスト上でコンテナを可動させるべきか?
AWSコンテナ関連サービス
- ECS,EKS…コンテナ管理
- ECR…マネージド型Dockerコンテナレジストリ
- Fargate…EC2インスタンスの管理不要。計算リソースの使い方を根本的に変える
- 先月から東京リージョンも利用可能になった
フロントエンドエンジニアが伝えたい最近の事情
大原壯太さん
最近のフロントエンド
- 登場人物が豊富でツライ世界
- 変数の巻き上げ
- thisの指すものが異なる
- 型変換の問題
9 + '1'
と9 - '1'
など
罠を回避する環境が整いつつある
- ES2015のletかconstを使う
- アロー関数はthisの対象が変更されない
- FlowType or TypeScriptで型を導入する
- コールバック地獄→PromiseやAsync/Await
- class構文
- Template Literalなどなど
JavaScriptも進化してきている⇒SPA,SSR,BFF
SPA(Single Page Applicatio)
Routingはフロント側で行って必要な情報をAPIで取得
- 高速なページ遷移
- UX向上
- 開発・運用コストが低い
マイナス
SSR(Server Side Rendering)
- 初回アクセスのときだけServer側でRenderingする
- 初回アクセス以降はSPAとしてクライアント側でレンダリング
↓解消
BFF(Backend for Frontends)
なぜBFFが必要なのか
- 従来
- HTMLテンプレート
- 更新はform
- SPA
- ページごとにAjax
⇒1ページ表示するのに何回もAPIを投げるのは無駄が多い
フロントエンドエンジニアとうまく協業する
Swagger
- YAML or JSON
- REST APIの設計、ドキュメント化、テスト
- Swagger Editor
HerokuでPHPアプリ開発速度を倍にする
岡本充洋さん
HerokuはSalesforceファミリーのサービス
PHPアプリの開発の速度を上げたい
開発スピードを上げるには?
⇒Herokuは開発者のためのPaaS
Herokuの実行環境
- Dyno…アプリを動かす
- Data…データベース
- Elements…追加機能
Heroku で環境を構築&デプロイするには
サポートしているPHP環境
- 5.6系、7.x系
- Apache 2.4もしくは Nginx 1.8
- 各種Extensionにも対応
開発を早めるには
- Heroku CI…GitHubにあるHerokuアプリを自動テスト
- Heroku Pipelines…複数のHerokuアプリを管理
後藤さん
(デモは省略)
GAE に PHPアプリを継続的デプロイする
岸田健一郎さん
サンプルコード
- PHP/Java/Go/Python/Node.js/C#/Ruby
- Standard Edition(VM)とFlex Edition(Container)
- Standardは28インスタンス時間/日まで無料
- PHP Standardは5.5, 7.2がα
- gVisorがホットな話題
- phpusers-ja.slack.comの#gae
※参考
継続的デプロイ
継続的結合
Container Builder
- 1日あたり120分まで無料
- 120分以上は$0.0034/分
- フルマネージドサービス
- ビルドトリガーでCI/CDを自動化
- Dockerコンテナを実行
- SDKを使うとローカルビルドもできる
Container Registry
- プライベートDockerレポイトリ
- 高速なpush/pull
- 様々なCI/CDツールとの連携も可能
- Docker V2 Registry API対応
- ストレージと下りの通信量が課金対象
説明&デモ
- GAEバージョン管理
- 1つのプロジェクトにフロントとバックエンドを共存可能
- 新規プロジェクトの作成と設定
- ビルド&デプロイ用イメージの作成 ビルドしてイメージをpush
- ビルドトリガーの作成
- GitHubなどにPushするとビルド&デプロイ
- Dockerイメージを作ってデプロイもできる
※参考資料
ここからLT
ネコとワタシとPHP in 沖縄
ねこにしさん
一人でおうちで作業していてさみしい
そんなあなたに ネコ駆動開発
沖縄で働くメリット
- 他県に比べて優位性
- インターネット回線がとおってる
- たまにフリーのWifiが飛んでる
- コンビニがある
- 道に自販機がある
- 海が近い
勉強会は結構たくさんある
- PyData
- Startup
- ハッカーズチャンプルなどなど
コワーキングスペースもそこそこある
- イングリッシュガーデン
- 750円/日でフリードリンク
沖縄でネコ駆動開発いいですよ!
誰かフィクスチャ書いてくれるんなら俺もテスト書くわ
たなかひさてるさん
- ORMやFWとは独立して冗長な記述を減らしサービスの成長を阻害しないフィクスチャローダを作った話
- DBのテストのデモ
(高速な発表だったのでメモの詳細は追いつかず…)
※参考
mixed型なんてけしからんと社内チャットでつぶやいたら炎上した
@kawanamiyuu さん
PHP: rfc:mixed-typehint ⇒けしからん
- 結局なにも型を指定しないのと一緒では?
- PHP7でスカラー型(型に対して安全になった)⇒逆光している?
↓
PHPチャットルームが炎上
肯定的意見
- mixedを推奨したわけではない
- mixedだから気をつけてという明示
- 型を指定するハードルが下がって良い
- レガシーコードでどうしても型を絞れないときにマーキング
⇒熱いものを感じる
まとめ
- mixedはけしからん
- 型をちゃんと書きたい
- レガシーとも向き合う必要がある
- mixed型1つでいろいろな意見がある
⇒みんな実はPHPが好き
テストを書いたことがないエンジニアがテストを書けるようになるまでやったこと
テストを書けるいろいろなステージがある
そもそもなぜテストを書くのか
- ちゃんとテストを書いたという自信とストレス軽減
ステージ1:自分のコードにテストを書く
- 最初にきれいに書こうとしない
- 迷ったらテストを書く
⇒難しくないことがわかる
ステージ2:テスト観点の網羅を意識する
- 十分なテストを書こう
- テストが仕様書になる
ステージ3:既存コードにテストを書く
- 既存コードの動作を保証する
- バグなのか仕様なのか⇒現在の動作を保証する
- テストしやすいコードに改善⇒仕組みを使う
ステージ4:テスト駆動開発を実践してみる
- テスト駆動開発を学習する⇒実践
ステージ5:XXX
- まだまだ先はある
- デザインパターン
- 抽象化
私のDDD学習ノート「境界の設計は大事」
@kuma_nana さん
www.slideshare.net
- ドメイン
- 解決しようとしている問題の領域
境界づけられたコンテキスト
事例
- 背景:自社サービスで外部のWebAPIログインを利用
- ログインAPIのレスポンス結果をバリデーション
レガシーな例
- コントローラークラスにべた書き
- 複数のドメインの知識があってもつれている
STEP1:サブドメインの抽出
STEP2:ドメインの設計
まとめ