Laravelで多機能なアプリケーションをモジュラモノリスとして開発・メンテナンスしていこうとする時、Modelの依存は悩ましい点になっていると思います。AモジュールにあるModelがUserを、UserがBモジュールにある別のModelを参照してしまうと、結局疎結合にできず、メンテナンス時に依存を排除できません。
LaravelであってもORMとしてEloquentではなくDoctrineを使うことで、モジュール同士が依存しない、疎結合なモジュールによるモジュラモノリスが実現可能です。
実践的なモジュラモノリスLaravelのサンプルコードとともに、LaravelからDoctrineを使う実装についてご紹介します。
スプラトゥーン3やってますか?
スプラトゥーン3って魅力的なブキが多く、どのブキ使うかつい迷っちゃいますよね?
今流行りのChatGPTに直接聞けば教えてくれますが、ChatGPTのおすすめブキ以外にも自分にあったブキがあるんじゃなイカ?
そう思って、ChatGPTとPinecone使ってスプラトゥーン3ブキのレコメンド機能をSymfonyで作りました。
機械学習の知識がほぼない状態で、どのように作っていったか5分でお話しするでし。
使用技術
SPA全盛の時代ですが、まだまだ古き良きMPA(Multi Page Application)のシステムを触る機会は多いですし、
凝ったUIを必要としない社内システムなどでは、新規開発でもMPA構成を採用することは普通にあります。
MPAだとビューのテストは基本的にPHPフレームワークが提供してくれる結合テスト基盤を使って行うことになると思いますが、
結合テストで検証できるのはあくまでHTTPレスポンスの内容までで、その後ブラウザ上でJavaScriptを使ってある程度複雑な処理が行われる場合に、その部分をテストすることができません。
MPAであっても、一部の画面にだけちょっとしたDOM操作や非同期処理が必要になるケースは多く(例えばいいねボタンとか)、
このようなJSの処理は上記の理由から自動テストがサボられがちです。
このトークでは、こういったMPA上のJavaScriptの処理を楽にテストする方法を、Laravelにおける実装例をもとに解説します。
(例としてLaravelを取り上げますが、他のフレームワークにも容易に応用可能な内容です)
既存のMPAに後付けで簡単に導入することが可能なので、すぐにでも実務に活かせる内容になると思います。乞うご期待。
SPA全盛の時代ですが、まだまだ古き良きMPA(Multi Page Application)のシステムを触る機会は多いですし、
凝ったUIを必要としない社内システムなどでは、新規開発でもMPA構成を採用することは普通にあります。
MPAだとビューのテストは基本的にPHPフレームワークが提供してくれる結合テスト基盤を使って行うことになると思いますが、
結合テストで検証できるのはあくまでHTTPレスポンスの内容までで、その後ブラウザ上でJavaScriptを使ってある程度複雑な処理が行われる場合に、その部分をテストすることができません。
MPAであっても、一部の画面にだけちょっとしたDOM操作や非同期処理が必要になるケースは多く(例えばいいねボタンとか)、
このようなJSの処理は上記の理由から自動テストがサボられがちです。
このトークでは、こういったMPA上のJavaScriptの処理を楽にテストする方法を、LaravelおよびSymfonyにおける実装例をもとに解説します。
(例としてLaravelとSymfonyを取り上げますが、他のフレームワークにも容易に応用可能な内容です)
既存のMPAに後付けで簡単に導入することが可能なので、すぐにでも実務に活かせる内容になると思います。乞うご期待。
本LTでは、3ヶ月の新卒研修を経た新米エンジニアの私が、研修中に直面した課題や失敗、それから得た学びを紹介します。
そして、少しだけ未来の自分に伝えたいメッセージをお話します。
ここ数年で、エンジニアを取り巻く環境は目まぐるしく変化しています。
GPT-4を始めとするGenerative AIの台頭が、モノづくりの生産性や、エンジニアという職業そのものに与えるインパクトは計り知れません。
数ヶ月、半年のような短いスパンでも、私たちをめぐる世界は大きく変化しているかもしれません。
エンジニアとして成長し生き残るために、私自身が大切だと感じたことをお伝えしたいと思います。
本LTは、PHPに直接関連する内容ではありません。
しかし、多くのエンジニア(社会人・学生問わず)の方に共感していただけるようなお話をしたいと考えています。
「新卒エンジニアあるある」的な体験談や失敗談で、エンジニアの方々に懐かしんでいただけるように。
これから社会人エンジニアになろうとしている学生の方には、少しだけ近い目線でお話ができるように。
そして、今を生きるエンジニアとして、未来の自分に送るタイムカプセルになるようなLTができればと思います。
現代では「動的な」ウェブサイトを作ることが当たり前になっています。しかしなぜ「動的」なものを作らないといけないのでしょうか。
「ウェブサイト」とは、かつてはサーバー上にある静的なドキュメントにアクセスするためのものでした。
しかし、CGI の開発により動的なコンテンツを扱うメディアとして進化を遂げていきます。
HTML 内で動的な値を表示することができる「ページインライン」モデルの PHP が生まれ、
データベースと接続したウェブアプリケーションが普及していきます。
全世界のウェブサイトの多くが WordPress によって作られるようになっていきました。
今は動的な値を扱うウェブサイトにおいて、いかに早くユーザー体験を損なわずに必要な情報を届けられるかの工夫がされるようになります。
本発表ではそうしたウェブサイトの歴史的背景に加え、動的なウェブサイトにおける課題と改善のために生まれた技術・手法について触れ、今後のウェブサイト・ウェブアプリケーションの開発動向についても考えていきます。
PHPカンファレンスに参加される方の中には、またプログラミング経験がほとんどなく
これからPHPを勉強しようと考えているという方も多くいらっしゃると思います。
そんな方々へ向けて、Webアプリケーション開発に必須の知識である
データベースやSQLというものを、世界一分かりやすく解説します。
このトークのゴールは、
・データベースという概念をなんとなく理解すること
・簡単なSQLを自力で書けるようになること
です。
私自身が初心者の頃にこういう説明をしてほしかった…と思うような
順序と言葉遣い、例示を用いて、初心者向けに本当に世界一丁寧に(当社調べ)解説します。
初心者の方の「データベースってなんだか難しそう」という印象を吹き飛ばせたらと思います。
※データベース/SQLというものを全く知らない方に基本のキを腑に落としていただくことが目的のトークなので、
分かりやすさを優先して厳密さを多少犠牲にする場面があります。上級者の方はご注意ください。
※このトークはPHPに直接関連しない汎用的なトークとなっています。
この発表ではSREの概念や手法をDevOpsに適用するための具体的なアプローチを紹介し、組織に適したSREの実践方法を探求していきます。
2022年9月29日に発表されたState of DevOps 2022は、ソフトウェアデリバリーパフォーマンスに関する調査結果レポートであり、年に1回Google Cloud内のDevOps Research and Assessment(DORA)チームが公表しています。このレポートでは、ソフトウェアデリバリーパフォーマンスを評価するFour Keysの指標や、Four Keysを改善する上で効果が高いとされるケイパビリティについて、さらにソフトウェアサプライチェーンのセキュリティに関する調査の詳細が記載されています。
DevOpsは、開発(Development)と運用(Operations)の連携を強化し、ソフトウェア開発プロセスの効率化を目指すアプローチです。一方で、SREは開発と運用双方に取り組み、システムの信頼性や効率性を高めるエンジニアリング手法です。DevOpsとSREは相互に補完的な関係にあり、DevOps実践を具体的で効果的に進める指針を提供します。
ただし、SREの概念や手法を盲目的に適用すると、DevOpsの本来の目的や価値が見失われる可能性があります。自社の状況やニーズに合わせてSREの考え方や手法を適切に採用し、DevOps実践を効果的に推進することが重要です。
この発表では、State of DevOps 2022を紹介しつつ、組織に適したSREの実践方法を探求します。具体的には、SRE導入時のコミュニケーション戦略、チーム構成や役割の再定義、適切なツールや技術の選択など、効率や生産性を向上させる具体的なアプローチに焦点を当てます。
昨今WEBの開発現場では当たり前になりつつある、フィーチャーフラグですが、PHP○の時代では一般的ではなかったために、環境変数などで機能リリースを行うことも少なくありません。
古いPHPほどテストがなく、リリースに対する不安が大きいのが世の常ですが、PHP○でもフィーチャーフラグを利用する方法があるので、紹介します。
Domain Modeling Made Functionalは、静的型付けによる関数型プログラミング言語でのドメインモデリングの手法について説明した書籍です。重要なコンセプトは、業務ドメインを型で表現し、異なる概念には異なる型を作成することです。静的型付けによる関数型プログラミングとは対照的に、PHPは動的型付け言語ですが、業務ドメインを型で表現することは可能です。本講演ではそのメリットについて検証し、具体的なコードを使用して説明します。
ドメインモデリングとは何なのかという点についても、冒頭で説明しますので、馴染みのない方もぜひ参加してください。
新しく入社した会社で任される仕事は既存のシステムの技術的負債の返済。このような経験をほとんどの方が受けているのではないでしょうか。
「なんて醜いコードなんだ」と思ったり「こんなコード,メンテナンスしたくない」と思う時もあるはずです。
さらに言えば「なぜ初めからもっと丁寧に書けるエンジニアを採用しなかったのか」と思うこともあるでしょう。
そして「自分はこのようなコードを絶対に書かないぞ」と決心するはずです。
しかし,技術的負債は,なぜ生まれるのでしょうか。「採用力がなかったから」「経営陣の実力不足」「経営陣がエンジニアへの理解に乏しいから」など様々な理由を思い浮かべるはずです。
また,技術的負債を作った当人達は,人事評価で好印象を与えやすく,逆に後から入社したエンジニアは技術的負債を返済し,堅牢なアプリケーションを作っているのにも関わらず,満足行く人事評価を得られないことがあるなどして,軋轢が生まれやすところです。
技術的負債が生まれないようにするには,技術的負債が生まれる理由を知らなければ根本的な解決は望めません。
本トークでは,CTO という経営に近い立場から,技術的負債が生まれる原因を解明していきます。
そして,本トークを経て,オーディエンスの皆様が技術的負債と前向きに向き合うキッカケの一つになれば幸いです。
※本トークは,PHP に関連するトークではなく,汎用的なトークとなっています。
昨今のWEBサービスにおいてはインフルエンサーによる広報や、ニュースサイトでの掲載により、突然の大量アクセスが発生することがあります。そのような場合に、サイトがダウンしてしまったり、やむなくレートリミットをかけることがあります。
このような状況において、WEB上に仮想待合室を作ることで、ユーザーを待ち行列に並ばせることで、効率的にリソース制御しながらサービスを提供することができます。
本セッションではngx_mrubyとGoで作成した高速な待合室APIを用いて、かんたんに仮想待合室を実現する方法を紹介します。
技術的なトピックとしては、Nginxの詳細な仕様や、機能に触れながら、Go、Redisを用いて高速なAPIを作る方法について紹介します。
昨年11月のPHP TechCafe、『PHPerのための「PHPフレームワーク」を語り合う』でLTした、『それぞれの特徴から考えるフレームワーク選び』。それをもうちょっと深掘りし、今までWebアプリケーション開発で経験して感じた"Laravel", "CakePHP", "Symfony"それぞれのフレームワークの特徴と適している利用シーン、今後のプロダクト作りのフレームワーク選定する際に注目するポイントについてお話しします。
LT時のスライド:
https://speakerdeck.com/ippey/soresorenote-zheng-karakao-eruhuremuwakuxuan-hi
発表者のチームではPull Request毎にProduction同等の動作確認用の環境を自動的に生成してリリースサイクルをスムーズに回せるようにしています。
GitOpsを用いたシンプルなインターフェイスと通知によって、デザイナーなどの非エンジニアでも簡単に利用できる工夫があります。
本発表では、その工夫について紹介するとともに、発生した課題に対してOSSを開発したり、ArgoCDに機能追加をした話を交えてお話します。
変数のスコープ、意識していますか?
ライフサイクルやスコープを意識していないと思わぬバグを埋め込んでしまったり、踏んでしまったりすることがありますよね!
このトークではサンプルソースコードを交えてスコープと変数のライフサイクルに目を向けてみます。
変数がいつ生まれ、いつ消えていくのかを意識してバグを減らし、保守性の高いコードを書けるようになりましょう!
突然ですが、皆さんの現場のPHPはバージョンはいくつでしょうか?
既にPHP7系もEOLとなって久しく、先日行われたPHPerKaigiで行われたアンケートでは8系がマジョリティーとなっていました。
CIで静的解析やユニットテストが回り、デプロイは自動化され、RectorやDependabotでライブラリは最新、エディタはPhpStorm一択!
といったモダンな現場がある一方で、無視できないのは少なくない「5系」に入った票です。
現実には様々なしがらみからレガシィ化してしまったコードベースは存在します。
無限に広がるarrayの可能性、なくならないバグやデグレ、属人化したデプロイ作業...
そんなPHPの闇の中でもDeveloper eXperienceを諦めたくない!
このトークではレガシィな環境で戦ってきた中で培った自分なりの工夫、実際の現場で使っているツールや行っている取り組みをお話します。
過去の自分と同じような境遇の方の参考になれば幸いです。
gRPCというワードを聞いて、「何から始めればいいの?」「何がメリットなの?」「REST
APIでよくない?」という疑問が浮かぶ方に向けて、gRPCの基礎から具体的なアプローチまでお話します。
gRPCの概要をはじめ、gRPCを活用したWebアプリケーション開発を中心にフロントエンドからバックエンドまでの実装における実践的なポイントについてお話します。
私自身もほんの数ヶ月前までgRPCが全くわからなかった人間なので、「大丈夫!gRPCは怖くないよ!」ということがお伝えできれば幸いです。
【トーク予定内容】
・ gRPCの概要
・ 各レイヤー(フロントエンド/バックエンド)の実装方法
・ 周辺ツールの紹介
・ 成功体験/失敗体験
など
コンテナでの運用が当たり前になった現代、Laravel を ECS Fargate で動かしている方も多いのではないかと思います
非同期処理を行うための worker を ECS Fargate で動かす事もそれなりに一般的だと思いますが、Queue の詰まり具合に応じて worker の数をオートスケールさせようとすると、scale in の際にエラーを吐く事があります
このセッションでは laravel の worker を ECS Fargate で動かす際にエラーを吐かないように設定する Tips を紹介します
Laravelでアプリケーションを開発するとき、デフォルトORM(Object Relational Mapper)であるEloquent(Model)を使うことが多いと思います。しかし、EloquentはPHPの世界の唯一のORMではありません。この機会に普通のModelとは一味違ったORM, Doctrineに入門してみませんか?
特にDoctrineMigrationsの便利さは、Laravelユーザーの皆さんに一度体験してみて欲しいです!
■予定内容
アプリケーションを実装する時にEventDispatcherを使ったことのある人は多いと思います。
そんな便利に使っているEventDispatcherの仕組みはご存知でしょうか?
まずSymfonyのEventDispatcherの仕組みを参加者の皆さんと一緒にソースコードリーディングで解明するとともに、SymfonyのEventDispatcherがどのようにPSR-14を実装しているかも見ていきます。