こんにちは!始める前にちょっと注意してください...長い間書いていませんでした。私は何年もそうすることを脅し続けてきましたが、これが他のどのトピックよりも始めるのに良いトピックであると最終的に考えました。少し錆びついていますが、頑張って改善していきたいと思います。
EventPress はおそらく私が取り組んでいる最大の仕事です。私は当初から関与しており、このアプリは過去 10 年間で 3 つのメジャー バージョンを経て急激に成長しました。バージョン 4 が現在検討中ですが、作業中に変更したい変更点がいくつかあります。
まず、少し歴史を説明します。 EventPress は HotPress Media が所有しており、クライアントが Excel スプレッドシートに代わるイベント RSVP 管理のシンプルなソリューションを要求したために開始されました。 EventPress の最初のバージョンは醜いものでした。仕様はなく、適切な計画も立てずにプロジェクトを実行した結果、巨大なスパゲッティが出来上がりました。しかし、それはうまくいき、南アフリカ最大手の企業の 1 つとの取引に足を踏み入れることができました。
バージョン 2 は大きな進歩でした。インターフェースに関しては大きな変更はありませんでしたが、基盤となるフレームワークは大きく変更されました。 EventPress は Laravel (当時バージョン 5) に移行され、バージョン 1 のコードの多くはバージョン 2 に引き継がれましたが、構造ははるかに良くなり、問題ははるかに減りました。当時はまだテスト スイートのようなものはなく、基本的に「自分のマシンで動作する」という基準でテストしていました。あまり良くありません。
バージョン 3 では UI が完全に見直され、Tailwind が優先される CSS フレームワークになりました。かなりの量のバージョン 1 コードが暗い隅に隠れていましたが、多くのコードが変更されました。バージョン 3 への大きな変更点は、まったく新しい配布システムでした。この移行期間中に、私たちは大量メールの送信について多くのことを学びました。
公開されている UI の多くはバージョン 2 からの直接コピーでした。現在でも、出席者が目にするものの多くはバージョン 2 のコードです。その代わりに、バージョン 3 では、コード ベースにさらに多くの構造が導入されました。ある論理が前に出始めました。私たちは薄いコントローラーを作成し、サービス コンテナーに大きく依存しました。バージョン 3 は、テスト スイートを備えた EventPress の最初のバージョンでもあります。
私は長い間 PHP コードを書いてきましたが、独学です。 EventPress は、泳ぎ方についての指示もなく、深いところに投げ込まれたようなものでした。膨大な学習曲線でしたが、それが私を今日の地位に導いてくれました。私はこれを自分で構築しましたが、他の開発者からの意見はほとんどありませんでした。
今回は、EventPress 4 の開発についてブログに書いていきます。承認欲求があるからではなく、今回は記録しておきたいからです。そして、おそらく私のソリューションは他の個人開発者を助けることができるでしょう。大規模な PHP アプリケーションの構築と実行について多くのことを学びました。
EventPress 4 は大規模な書き換えとなる予定です。 EventPress 3 コードの多くは最終的にバージョン 4 に組み込まれる予定ですが、単なるコピーアンドペーストではありません。バージョン 1 以来残っていた古い部分をすべて取り除く時期が来たと感じています。より堅牢なテスト スイートが必要です。そして、いくつかの新しいテクノロジーを活用したいと考えています。
私の計画は、これに取り組みながら、少なくとも月に一度は何かを書くことです。頑張って維持してみます。
それでは、まず戦いに参加してください...
EventPress 4 には新しい UI が追加されません。バージョン 3 のインターフェイスのほぼすべてを使用し、場合によっては、ところどころにいくつかの小さな変更を加えるだけです。 EventPress の UI は Vue 3、Tailwind、Inertia を使用して構築されています。
EventPress 4 は、バージョン 3 の 1 対 1 機能のコピーになります。これは、バージョン 3 が今後数か月にわたって進化するにつれて、バージョン 4 もそれに合わせて成長する必要があることを意味します。ただし、今のところは、ちょっとした計画にすぎません。
まず、バージョン 3 でまだ問題が発生している部分を確認し、それらの要素がバージョン 4 でどのように改善されるかについてメモを作成しました。このバージョンのビルドにどのようにアプローチしたいかについてのアイデアを構築しました。イベントプレス。おなじみのものもあれば、真新しいものもいくつかあります:
そこには興味深い選択肢がいくつかあると思います。 Octane のものは、これまでそのようなものを使用したことがなかったので、私たちにとって大きなものです。 Octane は、PHP アプリケーション サーバー上でアプリを実行するのに役立つ Laravel のファーストパーティ パッケージです。 Swoole、RoadRunner、FrankenPHP がサポートされています。 3 つのオプションをすべて検討し、現時点では FrankenPHP を選択することにしました。他の 2 つよりも新しいですが、非常に優れたパフォーマンスを提供します。 Swoole のオファーには同時ワーカーがあり、これは素晴らしいことですが、私たち自身が必要としているものではありません。ただし、問題は、Swoole 拡張機能をインストールする必要があるということでした。それは企業顧客に期待できることではありません。私も FrankenPHP の経験があるので、それは当然のことでした。
私たちは何年も Nginx を使用してきました。素晴らしいですが、あまりお勧めできません。ただし、FrankenPHP には独自の Caddy サーバーが付属しているため、これも実験中です。キャディに固執しないかもしれませんが、今のところリストにあります。
PHP 8.4 はまだリリースされていませんが、EventPress 4 はしばらくリリースされないため、可能な限り最新バージョンから始めるのが理にかなっています。執筆時点では、PHP 8.4 のリリースまで約 1 か月あるため、最新のリリース候補を使用しています。
InertiaJS 2 もほぼ同じ話です。こちらもベータ版ですが、リリースまではかなり先なので、おそらく EventPress よりずっと前にリリースされるでしょう。さらに、InertiaJS 1 をベータ版で何年も問題なく実行しました。
私は最近静的解析に転向した者です。私が最も使用したのは、PHPStorm がコーディングとして提供するものです。 EventPress 4 では、PHPStan を全面的に採用することにしました。 PHPStan は、PHP 用のサードパーティ静的アナライザーです。設定が非常に簡単で、他の多くのプロジェクトのいくつかのバグを取り除くのに役立ちました。
EventPress のサイズに基づいて、ここでも同様に理にかなっています。これを機能させるために、いつでも実行でき、CI スクリプトに追加できる test:types Composer スクリプトを追加しました。
私は PHP コード リンターを実行したことがありません。私は PHP Mess Detector を何度か使用したことがありますが、一度もハマったことはありません。 EventPress 4 では、コードをきちんと一貫性を保つためにリンターが役立つと判断しました。私たちは Laravel 独自の「Pint」を選択しました。これは実際には PHP-CS-Fixer の単なるラッパーであり、コードを整然と保つ非常に簡単な方法を提供します。繰り返しますが、実行を容易にするために、lint および test:lint Composer スクリプトを追加しました。
開発中は Mac と Linux の両方のマシンで作業します。私の机の上には数年前から使用している M1 Max があり、オフィスには数台の Linux マシンが点在しています。私のメインドライバーは Mac で、開発作業のほとんどを Mac で行っていますが、コードはすべて Linux マシンで実行されます。通常は Ubuntu サーバーです。
EventPress 4 では、パズルにいくつかの新しいピースが追加されていますが、ほとんどの場合は、現在のやり方で開発を続けることができると思います。私は Homebrew を使用してほとんどのツールをインストールし、Laravel Valet を使用してローカル開発環境を実行します。私は Laravel Herd ユーザーではありません (それは良いことですが、どちらかというと Herd Pro ユーザーのようになってしまったので、すでにできることすべてを実行し、ほんの少しだけ速く、包括的な機能を備えたツールに年間 99 ドルを費やすことは正当化できません)素晴らしい UI)。
そこで、私の計画は、eventpress4.test ドメインをローカル マシン上の MySQL データベースで実行することです。開発の初期段階ではしばらくこの状態を使用し、数日ごとに Octane でテストを行うだけです。初期の部分を完了したら、Octane をより定期的に使用して開発を開始します。実稼働環境で実行する予定のアプリを実行するテスト サーバーをホストします。
EventPress はコンテナ化されていません。ただし、EventPress 4 はその方向に進む可能性があります。私たちはまだいくつかのことを実験中ですが、一部の企業クライアントと話し合っており、これにより導入プロセスがはるかに簡単になると感じています。 Docker コンテナで EventPress 3 を実行する初期テストがいくつかあり、これが今後の EventPress のすべてのリリースにとって正しい動きになると感じています。
私たちは長年にわたり、CI/CD サービスとして GitLab に大きく依存してきました。 GitLab は多数の複雑な CI パイプラインを実行し、私が取り組んでいるほぼすべてのプロジェクトのデプロイメントを実行します。
しかし、私は長年 GitHub ユーザーでもあります。私は主にオープンソースの作業にこれを使用してきましたが、最近いくつかの小規模プロジェクトを有料の GitHub アカウントに移行し始めて、非常に感銘を受けています。 GitLab とは動作が大きく異なる点がいくつかありますが、ほとんどの点で非常に満足しています。
したがって、EventPress 4 コードは GitHub でホストされ、アクションまたは CI パイプラインとすべてのデプロイメントを使用します。
この投稿はこれで終わりだと思います。まだ計画がいくつかありますが、いくつかのコードを書き留めてテストを書き始めました。基本的な認証層はすでに稼働しています (Laravel に感謝します)。ただし、そのほとんどは EventPress 3 に似ています。次のコードでいくつかのコードを示します。約束してください!
以上がイベントプレスの構築パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。