Yappliのサービスの一部は独自フレームワークなPHPで実装されています。この独自フレームワークはトランザクションスクリプトかつinclude Orientedで、重複コードが多くテストコードも無いなど様々な課題を抱えていました。その結果、開発や運用の心理的な障壁となっており、不具合が発生しやすく保守性の低いシステムとなっていました。また、当システムに対する機能追加・改善要望も多数ありました。
そこで、サーバを立ち上げて行う自動テストや静的解析により、既存コードを修正せずに品質を担保し、
autoload化、ライブラリの導入、リファクタリングによる既存コードを修正する改善で、開発・運用効率を上げていきました。
本セッションではヤプリが取り組んできた改善を例として、独自フレームワークPHPアプリケーションを安全に確実に改善していく方法をご紹介します。また、各改善のタイミングや改善を続けるためのメンタル的なTIPSも併せてご紹介できればと思います。
Discord Channel: #track2-1-b-framework-kaizen
これまで社内勉強会活動として、トイレ利用状況を可視化サービス「Toilet Evolution」、常駐先から出退勤するサービス「Dakoku」を開発してきました。
デバイスやセンサーを使った開発はオフラインが主体でしたが、コロナで活動自体が難しくなりました。
そこで実デバイスでなくThingをオンラインに参加する人の感情と見立て、共有することがオンライン時代でのガジェットになる、と考え新サービスの開発を始めました。
これまでのものを含め、勉強会主体でサービスを作ることと、開発中のサービス pong swoosh について紹介します。
初めての登壇チャレンジです。
Webセキュリティ脆弱性に恐怖と興味を抱き「OWASP TOP10」や「安全なWebアプリケーション入門」IPAの「安全なウェブサイトの作り方」とかを見て調べました。
これ結構ちゃんと対策しなきゃな...というものもあれば、これの対策が必要なWebシステムってそんななくない?と感じるものもありました。
どのシステムでも対策が必要そうなメジャーなWebセキュリティから順に素のPHPもしくはLaravelのコードを用いて解説できればと思います。
Webエンジニア歴は浅いのでご容赦ください。
自作フレームワークの話になります.
趣味で開発をする際にLaravelを多用していますが,Laravelの内部構造について「よくわからない」という感情を持ちながら利用しており,その内部構造を理解するために実際に自分でフレームワークを作りながらLaravelのようなフレームワークを作ってみるというお話をさせていただきたいと思っております.
他にも,オブジェクト指向や自作フレームワークについて,まだまだ勉強することはたくさんありますが,自分なりに実装をしてみたり,たくさんのかたに相談をして実装を進めており,その中で,これまでに得た知見を発表したいと思っております.
オブジェクト指向,フレームワークなどの初学者がメインとなりますが,ベテランの方からのフィードバックもいただきたいと思っているため,対象や分野は広く取りたいと考えております.
大きなカンファレンスなどに登壇するのは初めてです.
Discord Channel: #track2-1-a-build-framework
【お話しする内容...】
現在、世界の開発者1800名のユーザーが使用、有志の企業/開発者からの支援を受け「LaravelDB.com」を開発し、運営しています。
前回のPHPカンファレンス2020では「何故作ったのか?、仕様、主な使用方法」を解説しましたが、
今回は「Webサービスを作るまでの始まり、どのように進めて作ったのか?DB選択?」などお話できればと思います。
「言語解説」というより、開発者としてどうやって1ヵ月でプロダクトをリリースするまでやったのかという話をしたいと思います。
【ターゲット層】
PHP初・中級レベルの人がメインのターゲットになると思います。
1人で全てを作り切ったことが無い、個人開発してみたい、新規事業でβ版をリリースを考えてる人 向けになると思います。
今では当たり前となった、自身の知識や成果をGitHubに公開するということですが、今回は業務内で実際に書いたコードを、問題なく自然な形で公開する一連の流れを私の体験をもとにしてシミュレートしてみます。
今回はファイルのウイルスチェックをする機能がLaravelで書かれた業務コード上に直接実装されている状態を想定してみます。ウイルスチェック自体は業務とは何の関係もないため、何とか機能を分離してメンテナンスしやすくすることを考えます。
まず初めにやることは、InterfaceとDIを駆使して、ウイルスチェック機能を業務コードから切り離しです。
ここからウイルスチェック機能をいったん外部コードとして公開し、Composerを使って業務コードに逆輸入するように修正します。これで、業務に直接関係ないコードをリポジトリの外に追い出せるとともに、自身の実績を外部に公開することができます。
最後に、Laravelとの接続部分とウイルスチェックの本体実装を分離し、特定のフレームワークとの依存性も排除し、より広範囲に使える状態を実現します。
この発表を通して、InterfaceとDIの活用方法や、Composerによる依存性管理の便利さを再認識いただけると幸いです。
Discord Channel: #track2-6-b-composer-interface-di
技術があればある程度の物は作れると思うのです。会社や周囲を巻き込んで何か実現しようと思った際は企画書が有効です。
そもそも会社は稟議で承認を得てますが、その稟議も企画書なのです。一方で技術はできても企画書を書くのはちょっと苦手という方もいると思い、PHPer向け企画書の書き方と企画力の高め方を実例を用いて解説します。
企画書の本も出した企画者一筋30年の講演者が解説します。(うわっハードルを上げてしまったw)
皆さんアプリケーションのセキュリティ対策はしっかりしていますか?
フレームワークを使っていれば大体自動で対策をしてくれているCSRFですが、実際どういう攻撃手法でどういった対策をされているか認識してる人はどれくらいいるでしょうか?
本セッションではまずCSRFとはどういった攻撃手法なのかを解説します。
次にメジャーなフレームワークのソースを読み、どうやってCSRFを対策しているかを読み解いていきます。
大きなカンファレンスでプロポーザル採択による登壇はしたことがありません。
よろしくおねがいします!
Laravel 公式から非同期処理 HTTP サーバーとして動作する Laravel Octane は PHP8 から使用可能です。Laravel Octane は Laravel を開発しているテイラー自らが開発に乗り出しているものです。
Laravel Octane は非同期処理の話を賑わせている RoadRunner や Swoole に対応した HTTP サーバーで、重たい処理などを非同期に処理をしたいニーズにも満たしています。私自身は Laravel Octane とは別に laravel-swoole と呼ばれる HTTP サーバーを 1 年ほど試してきて、プロダクションで扱う際のノウハウをいくつか得てきました。そこで、Laravel Octane を使うメリット、Apache や Nginx と何が違うのか、使う上での注意点、laravel-swoole を使ってきて得られたノウハウを交えてお話できればと思います。
Discord Channel: #track2-7-b-laravel-octane
SPA開発においてこんな課題ありませんか?
・フロントエンドとバックエンドで型の整合性を担保したい。
・SPAのディレクトリ構成ってベストプラクティスを見つけるのが難しい。
そんな人の為に、ディレクトリ構成や静的解析、型チェックで工夫している点をお話します。
具体的には静的解析ではphpcs、phpmd、eslint、stylelintなどを導入。APIのリクエストレスポンスでは、厳密な型チェックを行っています。
Discord Channel: #track4-3-a-laravel-nuxt
途中から入ったLaravelでの開発プロジェクトでFat Controller(3000行以上)がありました。
このControllerをいかに可読性の改善、ファイルの細分化を行ったか話していきます。
例えば、外部サービスを使っているロジックはSrviceクラスに切り離し、ビジネスロジックはModelに切り離しました。
その他にも定数などになり得る箇所はEnumに切り離しました。
このようにいろんなロジックが入りがちなControllerのロジックを役割ごとに分離するやり方を解説していきます。
みなさん!帳票印刷してますか!
令和になっても相変わらず紙の書類の需要は大きく、Webアプリ開発においても帳票印刷機能は多くの案件で要求されますよね。
しかし、これがとにかく面倒くさい。
・複雑なレイアウトの帳票をHTML/CSSでデザインするのが地獄
・かといって超微細Excel方眼紙でデザインするのはもっと地獄
・しかもPDFに変換するときに微妙に見た目が崩れてどうにもできない
帳票印刷機能を実装したことのある方には強く共感していただけるのではないかと思います。
そんな面倒で難しい帳票印刷ですが、この度、ついに最強の方法を編み出しました🙌✨
・ピクセル単位で細かく帳票をデザインできる(しかも簡単に)
・帳票デザインの保守性が高い(修正が容易)
・印刷時に見た目が一切崩れない
という条件を満たせる唯一(当社調べ)の帳票印刷メソッドです👍
この至高の方法の具体的な実践手順について時間の許す限り詳しく解説します!
有償の帳票エンジンはなかなか高額で導入できる案件が限られていると思いますので、自力で実装する場合のプラクティスの1つとしてぜひ参考にしていただければと思います✨
日々アプリケーションに向き合って開発している中で、「またこの機能書いてる…以前にも同じ機能を書いた気がする…」となることはありませんか?
このお悩みは、よく使う機能の汎用ライブラリを作っておくことで解消できるのですが、うまく抽象化ができていないと、使いにくい汎用ライブラリになってしまったり・汎用ライブラリを使うたびにカスタマイズ開発が発生したり…という別のお悩みが発生してしまいます。こうなってしまっては、楽をするための汎用ライブラリなのに本末転倒ですね。
過去のプロダクト・今のプロダクト・未来のプロダクトを見据えて、上手に抽象のはしごを登り、使いやすい汎用ライブラリを作るためのコツをサンプルコードを通してお伝えします。
Discord Channel: #track3-7-b-build-generic-library
みなさんは全文検索エンジンを使用したことはありますか。全文検索エンジンで有名なものと言えば Elasticsearch や Groonga, MySQL に備わっている Full Text Search (FTS) などです。MySQL の like で検索するとレコード数が多いデータの場合、数秒どころか数十秒、数分かかるなんてザラです。そこで全文検索エンジンを使うことで、多くのレコードやドキュメントを瞬時に検索できるようになります。Elasticsearch の仕組みの解説から、Elasticsearch-PHP を使って、実際にどのように全文検索のためのクエリを構築するのか、ユースケースを交えてお話できればと思います。
Web アプリケーションを作るにあたって、絶対に外せないのは「ユーザーから受け取った値をデータベースに保存する」といったものです。
特に初心者が気をつけたいのは受け取った値の取り扱いです。例えば POST のリクエストで金額を受け取る時「is_numeric 関数だけを使えばいい」と答える人もいるかもしれませんが、これは答えとしては NO です。理由は 3 つあります。「金額は原則 0 以上の自然数である」「is_numeric だと float の値も true となる」、そして「PHP_INT_MAX 円で本当に大丈夫?」です。このようにバリデーションは実は奥が深いのです。様々なケースで、どういうバリデーションを書けばいいのか?金額だけではなく、電話番号、メールアドレスなど、セキュリティではなくプロダクトで必要となるバリデーションの話を広く浅く解説していければと思います。
何かと話題な Swoole ですが、特にデータベースや KVS (例えば Redis) 周りを扱うにあたって少しコツが必要です。Swoole の最大のメリットの一つとして手軽に非同期処理を導入できるという点ですが、データベースや KVS 周りはコルーチン安全ではない可能性があります。では、実際にコルーチン安全にして、既存のアプリケーションで使用するにはどうしたらいいのか、Laravel に Swoole を導入すると仮定して laravel-swoole と呼ばれるフレームワークをベースに解説します。
ふと「別の言語も学んでみたいけど、とっつき方がわからない」と思う方も多いのではないでしょうか。
特に近年よく使われる Go などを触ってみたいけど、難しそうと思いなかなか手を出しづらいと思っている方もいらっしゃるかもしれません。
Go をチョットワカルようになるだけでも PHP にはない新鮮さ、楽しさを感じることができます。
そこで PHPer が Go を学ぶにあたって何を気をつければいいのか、どうすれば Go をチョットワカルようになるのか解説します。
ふと「別の言語も学んでみたいけど、とっつき方がわからない」と思う方も多いのではないでしょうか。
特に近年よく使われる TypeScript などを触ってみたいけど、難しそうと思いなかなか手を出しづらいと思っている方もいらっしゃるかもしれません。
TypeScript をチョットワカルようになるだけでも、業務の分野が広がり、フロントエンドエンジニアの業務がどういったことをやっているのか理解しやすくなります。
そこで PHPer が TypeScript を学ぶにあたって何を気をつければいいのか、どうすれば TypeScript をチョットワカルようになるのか解説します。
プログラミング覚えたての時、電卓を作るといったことをした方や、今現在プログラミングを学習中で電卓を作っている方もいらっしゃるかと思います。
電卓を作るといえば「1+1」と入力したら単純に「2」が出力されるイメージでしょうか。作っているうちに、「あれ?「((1 + 2) × 3)-((1 + 2) × 3)」みたいな式はどうするんだ?」と疑問に思った方も少なくないと思います。そこで本トークでは3分間という短い時間で、複雑な式を計算できる、もう一段階上の電卓を作る方法についてお話します。
みなさん、非同期処理に興味はありますか?私はめちゃくちゃ興味があります。ところで私が所属しているトラーナでは Swoole をプロダクション環境で使用しているのですが、昨今 Fiber が界隈を賑わせています。そこで Fiber を実際に試してみて、かつ Swoole とどう違うのか、何がメリットなのか、何がデメリットなのか?プロダクションで使用するにはどうすればいいのかをトークさせていただければと思います。