PHPカンファレンス福岡2023で組織において教育がいかに大切であるかやその体系的な理論について話しました。
本セッションではその話に更に実際現場であった課題などに対しどのように教育を進めていけば良いのかという点も踏まえて話をします。
プロダクト開発におけるエンジニア教育の効用
良いプロダクトを作るために必要な組織の特徴
組織を作るために欠かせない採用と教育
エンジニア教育する際のマインド、モチベーションをいかに引き出すか
質とスピードはトレードオフでは無いが、成長機会とトレードオフである
レベルごとの教育スタンス(ティーチング、コーチングの使い分け)
教育にまつわる理論(認知特性やラーニングピラミッドを活用する話)
実践的な1on1の進め方
個のスキルから組織のスキルへの転換の仕組みづくり
具体的な組織での教育の仕組みづくり
だいぶ市民権を得てきたフリーランスという働き方。
フリーランスになって4年目を迎えた私が、フリーランスのWebエンジニアとして働くということについて広くお話します。
フロントエンドやバックエンドのような技術的関心事で担当領域を区切るのではなく、プロダクトが価値を提供するために技術面全般へ責任を持つ「フルサイクルエンジニア (full-cycle developer)」という考え方が流行りつつあります。
本トークでは、フルサイクルエンジニアとして5年ほど仕事をしてきた私が「フルサイクルエンジニアってそもそも何だっけ?」みたいなところから、キャリア的な話や良いところ・大変なところについてお話します。
みなさん、Unit of Workパターンはご存知でしょうか?
こちらのUnit of Workパターン、少し調べてみると、
を実現するパターンのようです。
永続化、トランザクションと聞いて、ウッとなる方も多いのではないでしょうか?
ユースケース層に滲み出る永続化の知識、とてつもなく広いトランザクション、etc。
これら問題に対する解決方法の一つとして興味が湧きませんか?
というわけで、このパターンを用いると何が解決できるのかを、コード例と共に発表できればと思います。
今年 3 月に開催された PHPerKaigi 2023 にて「いろいろなフレームワークの仕組みを index.php から読み解こう」と題して 4 つの Web アプリケーションフレームワークの共通点から、(PHP の)Web アプリケーションフレームワークと呼ばれるものがどうやって動作するのか、一般に何の役割を担っているのか、というお話をしました。
ならば今度は「共通点」ではなく「差異」に着目し、各フレームワークが提供しようとしている価値や設計思想の違いについて比較、考察した結果をお話します。
今回は index.php にとどまらず、フレームワークが備える機能やエコシステム、公式ドキュメント等も比較の材料として扱います。
本トークで扱うフレームワークは以下の通りです。
ドメイン駆動開発でクリーンアーキテクチャパターンで初めて実装した際にアレ?となったり、何故かしっくりこなかったケースはありませんか?
私はその原因の一つとして、ActiveRecordパターンに引きづられて設計が歪んでしまっているのでは?と考えています。
シンプルで理解しやすく強力なActiveRecordとMVCパターンですが、強力な故にそのパラダイムから抜け出せなくなる罠があると思います。
かつて私もそこから抜け出せなくて悩んだり失敗したりしました。ActiveRecordパターンでは良いとされていた物が逆評価になったり、まったく別の考え方がクリーンアーキテクチャパターンでは有効だったりしました。
本セッションではクリーンアーキテクチャでのアンチパターンを紹介しつつ、Unlearn(学びほぐし)して設計思想のギャップを少なくすることを目標とします。
私は中学生のMSXというパソコンのCPUであるZ80のマシン語をプログラミング言語として体験していました。
25年後の2016年、PHPで書かれたゲームボーイエミュレータのコードを読んで衝撃を受けました。ゲームボーイのCPUはZ80をベースに開発されたものであり、エミュレータで実装されていたのはまさにそのZ80の命令だったのです。
その後、書籍「CPUの創りかた」で紹介されている4ビットCPU TD4を実装したり、Z80のハードウェアエミュレータを開発したりしています。
このトークでは私がこの数年で触れてきた4形態のCPUについて解説し、CPUの楽しさをみなさんにお伝えします。
どれも"CPU"ですが、それぞれ開発時に見える世界が全く異なっています。
このトークを通してみなさんがCPUの設計や動作に興味を持ち、いっしょにCPUについて語れることを楽しみにしています!
現代のコンピュータはハードウェアから私たちプログラマが書くプログラムの動作までの間が多くのレイヤーに分けられて動作しています。
各レイヤーは自分より下を抽象化し、下のレイヤーを詳しく理解しなくても多くの場合プログラマはプログラムを書けます。
一方、プログラムが期待した様に動作しない時には下のレイヤーの動作の理解が問題の解決の助けになることもあります。
このトークでは私たちが愛するPHPをスタート地点にして、「CPUによる"プログラム実行"」「 PHPやJavaとC言語の根本的な違い」など、コンピュータプログラムがどの様に動作するのかを解説します。
コンピュータのレイヤー構造を理解すると、いままでは見えていなかった角度からプログラミングを楽しめるようになります。
このトークを通じて、低レイヤーが好きになったり、いろいろなレイヤーで面白いことをしたりする方が増えることを期待しています!
私はこの数ヶ月、趣味プロジェクトとして1980年代に栄華を誇った名作CPUである"Z80"のハードウェアエミュレータを開発しています。
これはZ80で動作しているコンピュータからZ80を取り外して、代わりに自作のZ80ハードウェアエミュレータを取り付けて動作させるというもので、Raspberry Pi に自作のハードウェアを接続した形になっています。
このトークではZ80ハードウェアエミュレータの解説を軸に、CPUの作り方や、その楽しさをお伝えします。
主なトピック:
・CPUを作るために必要なもの
・ソフトウェアエミュレータとハードウェアエミュレータの違い
・Raspberry PiでCPUを作る方法
CPUを作ってみたい方はもちろん、コンピュータの仕組みを理解したい方や、プログラムが実行された時にコンピュータの中で何が起きているのかを知りたい方などにもお楽しみ頂けると思います。
「コンピュータは0と1しか処理できない」とよく言われています。
ビット演算があったり、浮動小数点演算があったり、文字コードが16進数だったりと、PHPerのみなさんもなんとなく実感としてはあると思いますが、なぜ「0と1しか処理できない」のでしょうか。
このトークではアナログの世界・電気回路でデジタルの世界・コンピュータ処理がどの様に表現されるのか、私たちがC言語やPHPで書いたプログラムの実行結果がディスプレイやスピーカーで認識できるところまでがどの様にできているかをお話します。
ふだんの活動ではあまり気にすることのないコンピュータの基本的な仕組みの話になりますが、このトークを聞いたみなさんが今までより少し解像度の上がった目でコンピュータを楽しめることを願っています。
ソフトウェアが変更される理由はさまざまですが、本トークではよくある3つのパターンをもとに、変化に耐えうるコードを書くためにはどうすればいいかについてお話しします。言語はもちろん PHP でフレームワークは Laravel を想定し一部 Laravel 固有のコードを対象としますが、他のフレームワークをお使いの方でも参考になるよう、全体的にはできるだけフレームワークに依存しない内容にする予定です。
主な対象者
話すこと
このトークは、新卒エンジニアの情熱と探求心が燃え上がる瞬間を共有する場です!私がLaravelの内部仕様を探求し、その果てに見えた知識と洞察をお伝えします。
LaravelもPHPも初めてな私が、その世界に足を踏み入れてから早数ヶ月が経ちました。その間、Laravelの内部仕様に私は常に興味津々で、「単に使うだけでなく、Laravelがどのように動いているのかを理解しながら活用したい!」そう考えていました。様々な内部仕様について調べたそのプロセス・結果・知見を交えて、聴衆の皆さんに刺激を届けます!
新卒エンジニアならではの視点から、Laravelを通した私の情熱と成長のストーリーをお伝えしつつ、具体的な内部仕様を複数取り上げ、それについて熱く解説します!
このトークを通じて、皆さんと共に学び、成長し、Laravelの魅力を深く探求する喜びを共有できることを心から楽しみにしています!
Laravelのキャッシュは多様な保存先を提供していますが、bladeのキャッシュについては疑問符が残るところがあります。
一方で、AWSのFargateはVolumeの設定をセキュリティの向上のためにReadOnlyにできたり、またイミュータブルインフラではWebサーバがステートレスであることが求められます。
そういった中で、Laravelではどういったキャッシュの持ち方をするといいのか、そんな問いかけや提案ができたらと考えています。
私が所属している「株式会社Relic」は、新規事業開発に特化した会社です。
当然、開発プロジェクトも「新規事業」に関するものが殆どとなっています。
私は技術選定なども行う立場にありますが、数多くのプロジェクトでPHP/Laravelが採用されています。
「どうして」PHP/Laravelを採用するのか、その理由について語らせてください!
またPHP/Laravelについて、入門記事や個別のHowToについては、WEBで多くの記事が見つかりますが、
「こんな感じで運用してます!」という実例を紹介している記事は、なんだか少ないように感じています。
「どのように」Laravel/PHPを利用しているかについても、紹介させていただければと思います。
特に、これからPHP/Laravelの採用を検討しているチームの助けになれば、大変嬉しく思います。
Webアプリケーションは生き物です。
作って終わりではなく、日々運用を行っていかなければいけません。
しかし、日々成長するWebアプリケーションは突然パフォーマンスが問題になり、サービス障害を生み出します。
そこで今日はシンプルなLAMP環境で動くようなWerbアプリケーションのパフォーマンス・チューニングの勘所についてご紹介します。
基本的な考え方から実際の明日から役立つテクニックまで全部ご紹介します!
jMeter, Locust, k6, ... 負荷試験ツールは色々ありますが、どれも PHP でシナリオを書くことができません。 PHP のコードは PHP でシナリオも書いてしまった方が一貫性があって良いですよね? PHP 8.1 から Fiber が入ったことで、 PHP でも非同期・並行的な処理が簡単に実装出来るようになりました。 PHP によるシナリオツール、 ないなら作ろう精神 で、自作することにしました。
Fiber ままで並行処理を作るのは大変なので、今回は amphp を使って簡単に distributed なシステムを構築します。
今回は何故自作したのか、どのように並行処理を実装したのかを紹介します。
みなさんは、「PHPではnull + nullが0になる」理由を答えられますか?
このトークはnullの挙動に苦しんで時間を無駄にした自身の経験から生まれました。
皆様の時間の節約につながればと願っております。
テストコードの書き方について説明する資料等は世の中に充実しつつあります。
一方で具体的にテストコードを書いていく様子を説明、実演する資料というのはまだ数が限られています。
そこで今回はソフトウェアテストの領域でよく題材とされる「マイヤーズの三角形問題」の実装を取り上げ、
素朴な PHP コードからはじまり、テストコードを補いながら、ときにつまづきつつ、解くべき問題を捉えたコードへと洗練させていく過程を実演します。
ジェネレータは、特に大量のデータを効率的に処理する際に有効な手法です。
例えば、LaravelのCollectionは便利な機能ですが、多用するあまり気づかずに大量のデータを扱ってしまい、意図せずパフォーマンスに影響を与えることがあります。
本セッションでは、PHPとLaravelにおいてジェネレータを活用し大量データ処理のパフォーマンスを改善する方法について説明します。
普段PHPで開発しており、運用上のデータ量増加問題についてまだ考えてない方、あるいは現在悩んでいる方
みなさんは、ブラウザからのアクセスなど外部からの入力をどのように扱っているでしょうか。
PHPには$_GET/$_POSTのようなスーパーグローバル変数やfilter_var(), filter_input()などの関数、各フレームワーク独自の方法など、さまざまな方法があります。
また、近年ではJSONエンコードされたリクエストなどの用途も増えています。
このトークではHTTPレベルでの入出力をPHPがどう扱っているのか、どのように処理するのが安全なのか、さまざまな実装パターンと型の関係について紹介します。