モデルという言葉から皆さんはどんなものを想像しますか?
我々の日常生活やエンジニアチーム、エンジニア以外のチームとのコミュニケーションでは、
耳に入る言葉にはそれぞれコンテキストが多分に含まれています。
コンテキストを理解せずにそれぞれのチームが微妙に異なった認識で物事を進めると、
どんなことになってしまうのでしょうか?!
コンテキストを正しく理解することは、その時の仕様を満たすシステムを作るだけではなく
うまく活用することでビジネスを加速させるためのコミュニケーション改善や、
複雑な仕組みを解決する力となります。
より良いシステムづくりのためにも是非入門してみましょう!
Event SourcingはCQRSとの組み合わせだけでなく、そのエッセンスは様々な仕組みに取り入れることができます。
マイクロサービスアーキテクチャ化、大規模なデータ処理の改善、
リアクティブシステム構築などではほぼ必須のテクニックとなりますが、
ネット上にある記事を鵜呑みにしてしまうと致命的なアンチパターンに繋がってしまうことも多くあります。
状態をもたせないイベントでマテリアライズドビュー化してしまう、
巨大なランタイムを持たせてしまったハンドラ、
分割しすぎて時系列を無視したイベントなどなど。
いくつかは実際にやってしまったこともありますが、体験や例をもとに
Event Sourcingとは何かを説明しながら、何をすべきでやるべきでないのかを楽しくお伝えします
PHPではPassword Hashing関数を用いて簡単・安全にパスワードのハッシュ化と検証を行うことができます。password_hash関数でパスワードハッシュを生成、データベースに保存して、入力されたパスワードをpassword_verify関数で検証すればよいわけです。普段何気なく利用しているこのパスワードハッシュの仕組みですが、その文字列は定められたフォーマットに沿って作られていることはご存知でしょうか。どのようなフォーマットなのか、bcryptとModular Crypt Formatについて触れながら解説します。
Webサイトをネイティブアプリのように扱うことができる技術「PWA」を目にする機会が増えて来ました。
ですが、機能実装にはJavaScriptでServiceWorkerを書かなければならず「PWAに割く暇なんてねぇ!」と感じるPHPerもいらっしゃるでしょう。
そんな方のために、JavaScriptを一切書かずにオフライン対応も含めたPWA・TWAの実装方法を超簡潔に御紹介致します。
※TWAとはPWAアプリケーションをPlayストアに配信できる技術のことです
In this talk i am going to explore ways that PHP can be made more secure by looking at some known common vulnerabilities and coding techniques. Covering topics like user input sanitisation using Filter_Var i will also look at ways that libraries and dependancies can introduce known vulnerable paths.
近年注目を集めるマイクロサービスアーキテクチャ。GoやScalaのような華々しい言語で実装した話はよく語られていますが、もちろん我々PHPerの愛するPHPでもできるんです!
私は2018年〜PHPシステムのマイクロサービス化プロジェクトを始め、2021年現在もPHP製マイクロサービスを運用・進化させています。PHPシステムの中でマイクロサービスに向く機能・PHPマイクロサービスをどうやって作って運用するかまでお話しします。
(1)マイクロサービスとは?
(2)PHPでマイクロサービスの作り方(設計、コード)
(3)AWSでPHPのマイクロサービスを動かすための仕組み
みなさん、脆弱性対策してますか?
コードに潜む脆弱性対応は以下の二つに分類できるかと思います。
このうち後者では、Github を使っているならば Dependabot 機能による脆弱性検知が使えます。
Dependabot security updates 機能を有効にしておくと、勝手にPRを出してくれますよね。
便利です。これの内容チェックしてマージするだけ。
めでたしめでたし。
・・・とならないので注意です。
実は、検知していても自動PRになっていない脆弱性があります。
「PRになるのはcriticalレベルのもの。多分そうだろう。」などと勘違いしておりました。
危ない危ない。
本セッションでは Dependabot の説明、注意点、運用方法のケーススタディをお届けします。
ペライチというサービスのCakePHP2をCakePHP4にジャンプアップさせた話です。ソースコードの量が多すぎたため一括移行は難しく、2つのバージョンを並行稼動させながら段階的に移行していきました。大規模サービスにおいてサービスを停止させずにバージョンアップするためにどんな工夫をしたかについてお話します。
kubotak-is/php-delというPHPコードをComposer Bin Commandを利用して消すライブラリを作成しました。
特定の形式でコメントを書いておくと、そのコメントを基準にPHPコードを削除します。
なぜそんなライブラリを作ったのか、その実装はどのようになっているのかを紹介します。
このセッションではComposer Bin Commandの作り方や自作のComposerライブラリをpackagistで公開する手順などを学ぶことができます。
PHPUnitやPHPStanのようなComposerでインストールしてコマンドで呼び出すライブラリ・アプリケーションの作成方法を紹介したいと思います。
昨今宣言的UIの台頭とともに、GraphQLが注目を浴びています。
特にReactではApollo Clientの存在もあり大変便利です。
ではPHPではGraphQLのエコシステムはどうなっているのでしょうか?
今回のトークではGraphQLを活用するメリット・デメリットから、PHPでGraphQLを扱う是非、PHPでGraphQLを扱う場合のライブラリやエコシステムについて解説をします。
phpとはhypertext preprocessorである。
phpの機能が高度で複雑怪奇になっている現在、若者のhypertextのpreprocess離れが深刻である。
改めてpreprocessorとは何か、どんなことができるのか、またyay等のライブラリを用いて話していこうと思う。(lispによくある便利macroなども含めて話したい)
「ユニットテストなんてメンディーよなー」「疎通動確の方が速いよなー」
そんな方へお届けする「気張らないでやれる」「"プログラマにとって"有用・有益なユニットテスト」についてのお話です。
また、次の症状にお悩みの方にも有効です。
・ユニットテストはやってみたいけどPHPUnitの導入で挫折した
・PHPUnitほど高度ではなくて良いので、もうちょっと気軽にユニットテストしたい
・バージョンアップのたびに動かなくなるテストスィートってどうなの
ウェブアプリケーションの開発においてE2Eテストの自動化は身近なトピックです。SeleniumやPuppetter、PlaywrightやAppiumなどがブラウザ・ネイティブアプリの自動操作のOSSとしてよく挙げられます。しかし、それらの裏側はご存知でしょうか?
本トークではこれらのツールの背後にいるWebDriver、Chrome DevTools Protocolsに焦点を当てます。
WebDriver、CDPとはなにか、その違い、仕様について、PHPエンジニアに身近な言語を用いて"直接"実装することを通じて解説します。
本トークを通じて直接触れることでライブラリでwrapされている裏側まで知ることできます。E2Eテスト自動化の課題に出会ったときに「裏側がこうだからたぶんこういうことだよね」と想像できるようになる、少し世界の見え方が変わる時間を提供します。
Suica や PASMO をデバイスにタッチして値を取得する、そんな夢を PHP で叶えたいと思っていた PHPer も多いかと思います。
PHP7.4 から PHP FFI と呼ばれるものが導入され、その夢も今まで以上に叶えやすくなりました。Suica や PASMO は FeliCa と呼ばれる NFC の規格の 1 つです。実装方法は多岐に渡りますが、概ね libnfc と呼ばれるライブラリや libusb を使う方法などがあります。しかし、今までの PHP ではこのライブラリを呼び出すことさえ叶いませんでした。そこで、本セッションでは PHP7.4 から導入された PHP FFI を用いてどのように PHP で NFC リーダーを実装するのか、そして実際のデモを交えてトークできればと思います。
みなさんはカンファレンスで登壇したことがありますか?
カンファレンスで登壇をしているスピーカーは、様々な過程を経てみなさんの前でトークをしています。例えば採択前ならネタ決めやプロポーザル、採択後ならスライド作成・トーク練習などの準備・・・
このトークするまでの過程は、人によって違うところもあり暗黙知であることが多いように思えます。
そこで今回は、過去に私がPHP系カンファレンスにて登壇した内容を例にしつつ、自分がカンファレンスで登壇するまでに準備していることを話します。
まだ登壇したことがない方はもちろん、登壇したことがある人も良いところを取り入れられるきっかけになれば幸いです!
具体的には以下のことについて触れる予定です!
・プロポーザルを出す時にどんなことを考えているのか?
・トークするまでの準備はどういうことをしてるのか?
・過去に採択されたことのあるトークを例に具体例を紹介
みなさんはコミットメッセージ規約「Conventional Commits」をご存知でしょうか?
「Conventional Commits」を導入すると様々な利点があります。
例えば調査しやすいコミットメッセージをささっと書けるようになったり、ChangeLogを自動生成できるようになったり・・・
そこで本セッションでは、コミットメッセージ規約「Conventional Commits」を導入するとどんなメリットがあるのかを話していきます。
具体的には以下のような内容について話をする予定です。
・コミットメッセージ規約「Conventional Commits」とは何か?
・ツールを使って、Conventional Commitsに沿ったコミットメッセージ作成
・Conventional Commitsに沿ったコミットメッセージを使ったPHPプロジェクトでChangeLogを自動生成
自動テストに興味はあるけど、何から手を付ければいいのかわからない、
またなぜテストが必要なのかわからないといった初学者向けの内容を想定しています。
自動テストとは何か、なぜ必要なのか、テストのしやすいコードとは何かについて発表します。
PHPを使ってるとよく遭遇する Fatal error / Parse error / Warning / Notice 理解していますか?
これらのエラー文を理解することで、すぐにエラーの原因に気付き適切に対象できる様になります!
またそれらを理解した上でのエラーハンドリングを学びましょう。
データベースのテーブル定義をしてて、こんな事ってないですか?
・まだ始めたばかりのサービスでユーザ数を知られたくない。
・ユーザIDが連番になっていて、ハックされそうで怖い。
このようにユーザIDを公開したくない場合に、推測されにくいIDがuuidです。
UuidTraitを作って、Modelクラスでuseするだけでuuidの生成ができます。
このセッションでは、UuidTraitの作成から使い方までを説明します。