皆さんはテスト環境をどのように用意していますか?
理想を言えば本番環境と同一の構成を用意してしまうのが安心です。
しかし、マネージドサービス多用の構成のインフラコストが馬鹿にならず、全部入りVMを使う構成に落ち着くことはありませんか?
実際、弊社にも全てを詰め込んだEC2一台で運用されるテスト環境が存在しており、
インフラコストの代わりに運用コストが高くなっているなと感じています。
本トークでは、コンテナやDBなどのマネージドサービスを使って運用コストを下げつつもインフラコストにも配慮した構成を模索します。
テスト環境だけでなく、小規模サービスや個人開発のインフラ構築の参考にもなれば幸いです。
● お話ししたいこと
● お話ししないこと
PHPerのみなさま、テストコード書いてますか
機能実装に比べて軽視されがちなテストコードですが、
記述することで様々なメリットが得られます。
今回はPHPUnitを利用してテストコードを書く方法について学ぶことで
テストコードにより得られるメリットや、そのはじめ方について入門します。
本セッションを通して、テストコードの第一歩を踏み出しましょう。
Webアプリケーションはどうして動くのでしょうか
ブラウザ等のクライアントから送信されたHTTPリクエストを契機に、
Webアプリケーションでは様々なレイヤーでの情報処理が行われます
今回はその情報処理の流れをLaravelを例に追うことで、
Webサーバー、Laravelアプリケーション、データーベースと
レイヤー毎で行われている処理と、そのレイヤー毎のつなぎ込み部分に迫ります。
HTTPヘッダーを含むHTTPリクエストの流れを追って、真にWebアプリケーションがどうして動くのかを知り、
必要な処理をどこに組み込むことが効果的なのかを知る一助になれば幸いです。
Webアプリケーションを運用する上で、監視の仕組みは欠かせません。
SREの文脈で特に重要性が高まるアプリケーション監視ですが、世の中には様々な監視サービスが存在します。
今回は特にAmazon CloudWatchをコアに据え、どの様にWebアプリケーションを監視する事が出来るのかを考察します。
AWS以外のオンプレミスも対象とした、提供するアプリケーションに対して
コストメリットも含めた監視サービスについてお話します。
フルサーバーレスな構成を取る場合、様々なクラウドサービスの知識に加え
実践的な利用方法が求められます
またAWS上でフルサーバーレスなアプリケーションを作成しようとしても、
AWS LambdaのネイティブランタイムにPHPはありません
フルサーバーレスの恩恵を受けたいが、その第一歩が難しい
その悩みをAWS Amplifyは解消してくれます
普段はPHPで実装するバックエンドをAWS Amplifyに任せることで、
React + GraphQLで作成するログイン付きのサンプルWebアプリケーションを作成する流れについてご説明します
具体的な手法をなぞることでフルサーバーレスなアプリケーションを作成手法を学びましょう
Laravel を使っている皆さん,Laravel の実装(Illuminate)は読んでいますか?
僕はいつも寝る前の読書の時間に Laravel のソースコードリーディングをしています(大嘘)
冗談はさておき,Laravel(に限らずライブラリやフレームワーク)の実装を読むことは,自分の成長にも繋がりますし,より Laravel を使いこなす上で非常に大切だと考えています.
本セッションでは,まだあまりフレームワークのコードを読んだことが無い方に向けて,Laravel の実装を読むメリットや読み方,読むべきタイミングなどを解説します!
自前で作る時に何かと考えることの多いエディタ部分をGitHub Issueに肩代わりしてもらって運用するブログをCakePHP4で実装しました。
追加したIssueを元に記事を生成してデプロイする仕組みをGitHub Actionsで作りつつそれを下支えするCakePHP4のブログアプリケーションの実装例を紹介します。 GitHub Actionsの成分がやや多めで、こんな感じのことが出来るんだというのがわかる内容です。
あらすじ
・ GitHub Issueでブログを書こう
・ アプリケーションの構成
・ GitHub Actionsについて
・ GitHub Actionsを使ってデプロイを自動化する
・ CakePHP4でIssueの情報を取得し静的HTML化する
・ 個人開発のモチベーション
みなさんはスクラムで開発されていますか?スクラムマスターを経験したことがありますか?
何となくスクラムマスターはエンジニアマネージャーやリーダー適性のある人だけがやるものだと思っていませんか?
確かに適性はあるかもしれませんが、スクラムマスターを経験することで、エンジニアとしてのパフォーマンスが上がるきっかけも手に入れられると自分は考えています。
スクラムマスター経験を通じて得られた学びが、現在エンジニアとしてどのように活かされているのか、ご紹介できればと思います。
▼エンジニアにも効くスクラムマスター経験の学び
・ユーザ価値をより意識する
・アンラーンの面白さ
・ファシリテーション能力
・チームの観察と声かけ
本トークを聞いて、迷っていたけどスクラムやってみようかな?スクラムマスターやってみようかなと思って貰える人が少しでも増えたら幸いです!
新機能のリリースはどのように行っていますか?
私が所属している会社ではFeatureToggleを利用した機能リリースを行っています。
FeatureToggleとは、新機能のコードを含んだままデプロイを行い、フラグ機能により新機能の有効化・無効化を制御する手法です。
FeatureToggleでリリースするメリットとデメリットについて、またどのように運用をしているのかを紹介できればと思います。
近年、PHPを用いた開発では、PsalmやPHPStanのような型情報を扱う静的解析ツールが取り入れられることが増えてきました。JetBrainsによる調査結果からも年々静的解析ツールの利用者が増えていると伺えます。
まさに世は大静的解析時代と言っても過言ではないでしょう。
またPHPそのものも、徐々に型に厳密な言語へと生れ変わりつつあります。
だがちょっと待って欲しい
そもそも動的型付け言語として誕生したPHPに専用のツールを使ってまで、わざわざ型を付けるのはどのようなメリットがあるのでしょうか?
本トークではPHPに型を付けるメリットについて、下記の観点を中心にあらためて考え直してみたいと思います。
LaravelのORMであるEloquentは、Laravelの多彩な機能の中でも特に重要なものです。
しかし多機能で、とても大きなモジュールです。みなさんは十分に理解して使えているでしょうか?
関連するクラス・トレイトが主要なものだけでも10以上、Eloquent\Modelを継承したオブジェクトから使用できるpublicメソッドは、少なく見積もっても300以上と、巨大で複雑です。
素直にコードを読んで理解しようとすると、何日かかるかわかりません。
しかし大きくて複雑な問題も、小さく分割して、抽象化することで対処できます。
このセッションでは、Eloquentを使用してきた経験、公式ドキュメントの記述、実際にコードがどう分割されているか、どのようなタイプのメソッドがあるのかなどのあらゆる視点を駆使して、巨大なEloquentの全貌を解き明かしていきます。
RDBにおける候補キーとは一意にレコードを定めることができるカラムのことを指します。
これにnot null制約が課されることでよく知られている主キー(primary key)になります。
つまり候補キーは各テーブルで非常に重要なキーであり、更にこれは正規化するにあたって必要な要素になります。
そのため、候補キーを見つけることはテーブル設計において大事な役割を果たします。
実は任意のテーブルに対してその候補キーを見つけるためのアルゴリズムが存在し、1つ見つける場合は多項式オーダーの時間計算量で済むことが知られています。
そこで、本セッションではそのアルゴリズムについてできる限り詳しく紹介したいと思います。
現在、正規化という手法はDB設計においてよく知られている手法となっています。
しかし、現場では以下のようなテーブルを見かけることは珍しくありません。
・1 つのカラムに複数の値が入ったテーブル
・カラム数が多いまたは、1 つの情報変更で更新処理が多く必要なテーブル
・JOINすると期待通りの結果が得られないテーブル
これらは低次の正規化により一定解決できます。もちろん闇雲に分割すればいい訳ではなく、
正規化の概念を正しく理解した上で分割を行う必要があります。
そこで本セッションでは、リレーショナルデータモデルが集合論に立脚していることから、数学的背景に着目して第1〜第2正規化について紹介します。
具体的には、RDBの用語(候補キー・関数従属性・情報無損失分解・正規形)を適宜厳密に解説しつつ
実際の正規化の例を通して、PHPer が向かうべきテーブル分割の手法を持ち帰っていただきます。
CakePHP2とCakePHP4が混在する環境でPHP7.3→8.1にバージョンアップを行いました。
このトークでは、この環境におけるバージョンアップのアプローチと、バージョンアップの際に発生した問題点、
そして、それをどのように解決したかを話します。
主なトピック
・サーバー構成とサービス分割について
・CakePHPバージョンと、それに対応するPHPバージョン
・バージョンアップの前準備
・サーバーのコンテナ化、Immutable化
・リリースフローの変更
・M1 Mac等のArm環境でも動作する開発環境について
・PHP8.1バージョンアップ時に生じた問題と解決方法
・PHP8.1に対応していないCakePHP2に対するアプローチ
昨今多くのサービスで導入されている二要素認証、みなさんのサービスには導入済みですか?
Google Authenticator(Google認証システム)が一番有名ですが、実はアレ、結構簡単に導入できちゃうんです。
今回は5分間で、LaravelのAPI型アプリケーションに二要素認証を気軽にサクッとシンプルに導入するための手順をご紹介します。
開発がスケールしたり、開発年数が経過すると、様々な要因で開発生産性の低下が起こります。
そこで現場のエンジニアは改善をしたくなるかと思いますが、大抵の場合、ステークホルダーと工数確保の合意が必用になります。
その際にこのようなことを言われがちではないでしょうか?
パフォーマンスチューニングの世界には「推測するな計測せよ」という言葉がありますが、開発組織における生産性についても測定してモニタリングする必用があると思います。
以上を踏まえ、本セッションでは開発組織とステークホルダーの間の共通言語を獲得することを目標に以下の内容についてお話します。
Laravel Dacapoという自作のOSSライブラリの話をします。
https://github.com/ucan-lab/laravel-dacapo
・開発初期段階のマイグレーションについて
・マイグレーションで困っていること
・ダカーポを導入するメリット
・簡単な使い方やコマンドのご紹介
Laravel Dacapoという自作のOSSライブラリの話をします。
https://github.com/ucan-lab/laravel-dacapo
・開発初期段階のマイグレーションについて
・マイグレーションで困っていること
・ダカーポを導入するメリット
・簡単な使い方やコマンドのご紹介
GraphQL初心者向けに下記のような話をします!
・GraphQLとは何か
・GraphQLのクエリ、ミューテーションの説明
・クエリの記述方法の説明
・Laravelでの導入方法
・実務で使ってみてどうだったか?
テスト書いてますか?
テストを書く理由と実際のテストコードを紹介する実践編に分け、TDD を3年間実践してきた経験に基づいてお話しします。
テストを書いたことのない方が、テストを書いてみたいと思ってもらえることを目指します。
サンプルコードは PHP + PHPUnit ですが、他言語でも通用する考え方を紹介します。
■ 概要
・なぜテストコードを書くのか
・レガシーコードとは、テストのないコード
・テストはコストが安いフィードバックループである
■ 実践編
・テストケースは日本語で書こう
・いろんな assertion を知ろう
・arrange / act / assertion のテストコード実装パターン
・set up / tear down を使って前処理/後処理をする
・dataProvider でテストをまとめる(ただし早すぎる抽象化に気をつけよう)