php の基本の foreach 。
しっかり正しく記述できていますか?
foreach は簡単そうに見えて柔軟すぎて、結局難しかったりします。
こんな悩みはありませんか?
・foreach の中に if 文がたくさん詰まってしまう。
・Promise を foreach で回すのが難しく感じる
・同時実行上限
・終了時上限の付与
・Generator が苦手
・遅延処理が書けるって聞くけどよくわからない
・結局 foreach で終了までを全部詰め直すから読みにくくなってしまう
それらを解決する概念が下記の3つです。
・map処理
・並列処理
・遅延処理
この概念をいい感じに foreach で説明できたらいいなって思います。
phpとはhypertext preprocessorである。
phpの機能が高度で複雑怪奇になっている現在、若者のhypertextのpreprocess離れが深刻である。
改めてpreprocessorとは何か、どんなことができるのか、またyay等のライブラリを用いて話していこうと思う。(lispによくある便利macroなども含めて話したい)
初心者も楽しめる、視聴者参加型の高速 LT クイズと解説です。
易しいレベルから、殆ど知られていない難しいレベルまでを4択クイズで高速 LT します。
チャットや Twitter などでどんどんお答えください!
初心者はプログラミングを始めていくと、記号が意外とググりにくいということに気づくと思います。
また他の言語を習得している上級者は、突然聞かれると一瞬他言語と混ざっちゃってわからなくなることがあると思います。
高速で問題を出されると、初心者も上級者も楽しめると思った次第です。
気分転換の頭の体操にいかがですか?
以下、例題です。これを問題文を読むところも含めて10秒程度で次々解いていくイメージです。
問題:べき乗 (例:2の3乗など)を計算する記号はどれ?
A. ^
B. **
C. ^^
D. 記号はない(pow() 関数で対応)
PHPは言語仕様上、stringやintegerといったスカラー型にRubyやPythonのような他の言語のようにメソッドが生えておらず、手続き型のAPIを用いてそれらを操作する必要があります。
しかしながら、メソッドが生えている方が便利な場面もあり「そのように書けたらなあ...」と思う事もあると思います。
これらを達成するのにエクステンションを用いて言語仕様を拡張しスカラー型にメソッドを生やす事も出来ますが、今後の言語仕様の追加や変更に追従しなければならないなどの点を考慮して、純粋なPHPのクラスでスカラー型をラップしてそこに便利に扱う為の関数を生やしたライブラリを作った話をしたいと思います。
PHPStan を入れると静的なコード解析が出来るのでとてもプロジェクト関わる開発者全員が恩恵を受けられると思います。
ただしある PHP stan は最初から入れている場合は良いのですが、ある程度アプリケーションが大きくなってからだと導入が難しい、もしくは出来たとしても大きなコストを支払わなければ導入出来ない、と考えている方は多いのではないでしょうか。
この LT では、それなりにアプリケーションが大きくなってから PHPStan を導入した際にやった事や辛み、現在の状況などを体験談としてお話しさせて頂きたいと思います。
Webサービスを運営していると、サービスからユーザーにせっかく送ったメールが届かないことがあります。
そのような、何らかの理由で目的のユーザーの元に届かなかったメール=バウンスメールをどう処理するかは、サービスにとって避けては通れない課題なのではないでしょうか。
また、AWS SESを使っている場合、バウンスメールの数が多すぎるとペナルティがあったりするなど、サービスにとってバウンスメール処理は意外に大事なものだったりします。
このLTでは、そもそもバウンスメールとは何なのか、AWS SESをつかってバウンスメールをサービスにフィードバックするまでを発表します
今まで仕事で携わってきたPHPでの開発において、可読性、保守性が明らかに低かったコードの例を話し、リファクタリングする場合はどうするかなどを説明します。
例えば、メソッドの引数が7個以上ある。変数名が解読不能。if文のネストが7つ以上あるなどです。
新卒エンジニアとして入社して、配属されたのはPHPで書かれた20年もののレガシープロダクト!?
エンジニアとしてプロダクトに関わるのは初めてだし、PHPを書くのも初めて!
一体私、どうなっちゃうの~!?
ということで、今回は新卒エンジニアとしてPHPプロダクトに参画していく中で、苦労した点や、それを乗り越えた方法などをLTでお話できたらなと思います。
僕と同じ新卒エンジニアの方や、PHP入門者の方たちに「あるある、ないない」と楽しんでいただければ幸いです。
皆さんはPHPでの開発でPredefined Interfaces(定義済みInterface)を使っていますでしょうか?PHPにはIteratorやStringableといったシンプルですが便利なInterfaceが用意されており実装することで、独自のクラスをPHPのプリミティブな型と同様に扱うことができます。どうやってPredefined Interfacesを使うのか、どんなメリットがあるのかを解説します。
「OKグーグル」と声を掛けると家の電気やテレビをつけてくれるGoogleアシスタント、みなさんお使いでしょうか。私は毎日大声でGoogleに話しかけています。しかし声を出すのもダルいときってありますよね。そんなときはプログラムからGoogleに話しかければいいんです。
ところでプログラムからGoogleアシスタントにアクセスしようと思うとPythonかGoの事例が多いんですね。Googleアシスタントの裏側はgRPCなのでPythonやGoが多いのは自然っちゃ自然ですけど、PHPもgRPCの正式サポート言語(クライアントのみ)ですから、やればできるはずです。
そんなわけで、本トークではPHPからGoogle Assistant APIを使って「OKグーグル」してみましょう。他の言語より少し大変だったりしますが、PHPだってgRPCで遊べるんです!
さくさく開発を進めるにあたってコンテナイメージのビルドには時間をかけたくありません。
typoをなおしただけなのにvendorのインストールを待っている時間はじれったいです。
キャッシュを使って時間短縮しつつ、完成物は小さくまとめる方法を考えます。
時間があれば、継続的アップデートやLambdaで動かすPHPコンテナへの適用についても触れます。
みなさんはパフォーマンス改善のためにアプリケーションの最適化に取り組んだことがありますでしょうか?
何もデータベース構造を再構築したりと大規模な改修することだけが最適化ではありません。機能実装のついでに関連処理をリファクタリングしてあげるだけでも十分な最適化になります。
このトークでは気づいた時にちょっとリファクタできる程度のデータベースクエリの最適化Tipsを解説いたします。
5分間で可能な限り詰め込んでお届けします!
こんな方におすすめ
レガシーバージョンのPHPから、最新バージョンのPHPへ移行したい方へ
PHP5.3.2より前のバージョンのPHPだと、setAccesibleが使えません。
そのため、private, protectedなメソッド、プロパティをテストしたいときは、本体をpublicにするしかありませんでした。
「setAccesibleを使いたいからPHPのバージョンアップをしたい」でも「PHPのバージョンアップをするためにはsetAccesbleを使ってユニットテストを書かないと行けない」というジレンマにずっと苦しんでおりました。
しかし、今回runkitを使うことで、PHP5.3.2より前のバージョンのPHPでも、非公開なメソッドのテストをすることができるようになる方法を考案しました!
これを導入すれば、テストコードの実装がどんどん進みますよ!
みなさんよくご存知の通り、PHPには等価演算子が2つあります。
「==」と「===」です。
前者は緩やかな比較、後者は厳密な比較が行われます。
PHPやJavaScriptに馴染みのある方ならよくご存知だと思います。
言語問わずよく使う演算子の1つである等価演算子ですが、実際の言語仕様は知っていても
内部の実装は知らないなんてことはよくあると思います。
今回はみんな嫌いな緩やかな比較の実装がどこにあるのか、そしてどんな実装がされているのかをお話しようと思います。
N + 1問題とは、ループ処理の中で都度SQLを実行してしまうことで必要以上にSQLが発行されてしまい処理が遅くなってしまう問題です。
N + 1問題が存在していても、ユーザーに影響のない程度の処理時間なら改修する必要はありません。
しかしながら、データ量が増えたりページへのアクセスが増えることで後から問題になってしまうこともあります。
今回は、そんなN + 1問題をサクッと検出して、問題が発生する前にN + 1問題を撲滅する方法をご紹介します。
PHP8.0から追加された機能、Attributes。
これを使ったメタプログラミングの例として、クラスのプロパティにAttributesを付与することで
・データベース(PDO)から取得したデータをクラスのインスタンスに変換する
・JSON文字列をクラスのインスタンスに変換する(あるいはその逆)
といった処理が自動で出来上がるプログラムの解説をします。
PhpStorm 使っていますか?
ご存知の通り、PhpStorm は、開発を効率的に進めるための機能がたくさん搭載されており、PhpStorm を使いこなして開発を進めている人の作業を見ると、素早いコーディングに驚かされると共に、自分も同じように PhpStorm を使い倒したいと憧れます。
しかし、一方でいざテクニックを覚えようとしても、何から覚えていけばいいかとっかかりがわからず、結局自身の知っている範囲でのショートカットやテクニックのみを利用してしまうといったことはないでしょうか?
このセッションでは日常の業務で使えそうで、手をつけやすい PhpStorm のテクニックを段階ごとにまるっと解説し、少しずつ PhpStorm エキスパートに近づくことを目指します。
Pull Request(PR)ベースでCIを回している時に、「ここのコードがおかしいよ!」と分かりやすく指摘が入るのは、飛躍的に開発者体験をよくしますよね。
cs2prは、そんな良い体験をサクッと提供してくれるツールです。
GitHub Checks APIを用いて、PRの該当箇所上に指摘内容を表示してくれます。
(Reviewdogなどを利用している方にはイメージしやすいかも知れません。)
PHPCS、PHP-CS-Fixer、PHPStan、Psalm 辺りにはもちろん標準で対応しています!
ちょっと手間を加えれば、PHPUnitでも同様に「結果をPR上に出す」ことが可能になります。
どんな事をしてくれるのか?どうやって使うのか?を紹介します!
コーディングの中でいわゆる「共通化」について考えるとき、プロダクトコードとテストコードではやや違う観点が必要になるようです。テストコードを書き始めて間もない現場には「プロダクトコードは書き慣れているがテストコードには不慣れ」なメンバーが多く、レビュー時などにこの勘所をうまく説明できず困ることが時折ありました。
最近、DRY (Don't Repeat Yourself) 原則と対になる DAMP (Descriptive and Meaningful Phrases) 原則という概念に触れたことで、この状況を腑分けし言語化できるようになってきました。DRY と DAMP について最近考えていることをお話ししたいと思います。
高速化が進み、JITコンパイラも導入されたPHPですが、残念ながら高速なスループットを求められる現場においては他のコンパイル型言語が選ばれることが多いようです。
最近では、ISUCONにPHPで挑戦するものも少なくなりました。しかし、だからこそ!PHPでウェブサーバーを書いて、色んな言語に速度で挑戦してみましょう!