PHP を使用した堅牢なコードの開発 この一連の記事は、中規模から大規模のアプリケーションにおける現実の問題の解決について説明しています。この一連の記事では主に PHP 4 で利用できる新機能に焦点を当て、開発作業を容易にするためのヒントやコツを多数紹介します。この一連の記事では、豊富なサンプル コードとともに、学ぶべき多くの例とテクニックが紹介されています。この最初の記事では、PHP の第一人者である Amol Hatwar が、中規模から大規模の Web アプリケーション向けに、エラーがなく保守しやすいコードを設計および作成する方法について概要を説明します。
Web アプリケーションを構築する開発者で、速度、機能性、プラットフォームへの依存性が必要な場合は、PHP が最適です。 PHP は無料で、学習と導入が簡単です。これらが、PHP の人気を高めている最大の利点です。しかし、これらの利点は欠点にもなる可能性があります。 PHP は非常に使いやすいため、開発者は計画や設計を行う必要があるときに、エディターにコードを押し込むことがよくあります。さらに、PHP では問題を解決する方法が複数あるため、後から修正するのが難しい悲劇的な間違いを犯しやすくなります。
この一連の記事では、多くの間違いを避ける方法を学びます。一度に 1 ステップずつ実行していけば、1 回か 2 回の試行でエラーのないコードを作成できるようになったとしても驚かないでください。また、開発作業を容易にする PHP 4 で利用可能な新機能についても説明します。ここで取り上げる例のほとんどは、スクリプトの構成とインストール、ファイルの処理、データベースの使用法などの現実の問題を扱います。初めての方でも、簡単に理解できるでしょう。ただし、PHP の基本的な知識があることを前提としています。復習が必要な場合は、この記事の最後に記載されている参考文献が役立つかもしれません。 (「参考文献」を参照してください。)
強力な基盤を構築する
PHP でコードを記述することは、C などの言語でコードを記述することと非常に似ています。これらは構文的に似ているため、同様のコード保守の問題も引き起こします。大規模なアプリケーションを開発する必要がある場合、大量のコードを記述しなければならない場合があります。時間が経つと、このコードは管理できなくなり、すぐにバグが侵入する可能性があります。この発言をどこで聞いても、少なくとも完全には信じないでください。ただし、より重要な事実は、コードを頻繁にメンテナンスすることに気付いた場合、アプリケーションの設計がそもそも不適切である可能性があるということです。
コードを正しく設計します
最初に行う選択は、後でコードを記述するときの自由に影響します。このため、正しい設計が重要な前提条件となります。些細な問題を解決するときにデザインが余計な儀式になってしまうこともありますが、少なくともこれがやるべきことであることを知っておく必要があります。多くの人は、設計と計画を追加の諸経費とみなしています。しかし、貧弱な設計から始めるか、まったく設計をしないと、常にずさんなコードが作成されます。どんなに賢いコーディングを行っても、貧弱なデザインを補うことはできないということを覚えておいてください。アプリケーションの設計方法については、この一連の記事の範囲を超えていますが、Web アプリケーションを設計する際に留意すべき問題をいくつか提案します。
分割して征服
疎結合された小さな部分を通じて大規模なアプリケーションを設計および作成することが常に望ましいです。このようにして、すべての部品がメンテナンス可能になります。たとえば、コンテンツ管理システム (CMS) は、ユーザー認証、表示、コンテンツ解析、統計の表示など、多くの小さなモジュールに分散される場合があります。また、モジュールが十分に一般的であれば、開発する他のアプリケーションでコードを再利用できます。プログラマーはいつもこれを行っていますが、それでも不満を言います。コーディングに関しては、各モジュールに絶対に必要な機能を与えて、それで終わりにするのがコツです。モジュールに割り当てられる機能は適切である必要があります。
ページ内では決して考えないでください
PHP を使用して HTML ページをより動的にすることに興味がある場合は、このセクションが最適です。この習慣は通常、すべてのページに日付と時刻を表示して最新の状態に見せたいときに始まります。各 HTML ページは行数が制限された小さな PHP スクリプトになり、日付関数はどこかに隠されます。これが希望する場合は、これが仕事を実現する最も簡単な方法であることに同意する必要があります。ただし、ページに表示される日付形式を変更するには、どのような変更を加える必要があるかを想像してください。各ページ内のコードを変更する必要があります。
明らかに、これを達成するためのより良い方法があります。私のお気に入りの方法は、構成ファイルを使用し、date() 関数のフォーマット文字列を保持する定数を構成ファイル内に定義することです。その後、必要に応じて date() 関数を使用できます。各ページは引き続きスクリプトで終わりますが、1 行のコードに加えなければならない変更の数は最小限に抑える必要があります。
図 1. ハードコーディングを避ける
上の図に示すように、すべてのページで日付形式が変更されていることがわかります。ここでの考え方は、コードの重複やハードコーディングを避けることです。大規模なアプリケーションを作成するときは、このことに留意してください。コードの重複を避けると、デバッグとメンテナンスが容易になります。
クライアント側の要件を軽減する
Web ページとアプリケーションの種類は、さまざまな方向に進化しました。最初に画像と画像マッピングが登場し、次に Java アプレットとクールなアニメーション用のクライアント側スクリプトが登場しました。今度はフラッシュの登場です。影響力を持つことは良いことですが、Web の背後にある全体的な考え方は、情報を必要とする人が誰でも簡単に情報にアクセスできるようにすることであることを覚えておく必要があります。すべてのブラウザーやプラットフォームでサポートされていないテクノロジーを使用すると、ユーザーの情報へのアクセスが拒否される可能性があります。あなたの Web サイトにアクセスできない人が次の顧客になるかどうかはわかりません。
ネットワーク トラフィックを可能な限り最小限に抑えるようにアプリケーションを設計する必要があります。トラフィックが多すぎて、機能させるだけの Cookie クラスをブラウザに提供している Web サイトをよく見かけます。大量の Cookie を改ざんすると、帯域幅が消費されるだけでなく、さまざまな点で管理が困難になります。経験則として、アプリケーションが 40 KB を超えるデータを送信する場合、またはページの読み込みに 5 秒以上かかる場合は、アプリケーションを最初から設計する必要があります。あちこちの小さな調整は長続きしません。周りを見回してみると、最も人気があり、最もアクセスされているサイトは非常にシンプルであることがわかります。
次のモバイル デバイスの波と、それらがアプリにアクセスするために使用する接続についても考慮する必要があります。ベスト プラクティスとして、アプリケーションは、コンテンツを要求するクライアントに基づいてコンテンツを適応させる必要があります。レオン・アトキンソン氏は、著書『Core PHP Programming』の 720 ページで、「HTML ドキュメントのサイズを小さく保つことはできますし、ネストされたテーブルなどの複雑な HTML を避けることもできます。しかし、すべての人の 28.8 モデムをアップグレードすることはできません。」と述べています。
コード、コンテンツ、表示を分離する
HTML はコンテンツを表示するためのマークアップ言語であり、PHP は HTML に埋め込まれたスクリプト言語です。これにより、たとえば日付の取得など、単純なタスクが非常に簡単になります。ただし、複雑な要件を実装する必要がある場合、PHP を HTML に埋め込むとコードの単純さが損なわれます。コード、コンテンツ、表示を可能な限り分離することをお勧めします。あなたが読んでいるこの文書について考えてみましょう。このドキュメントは、最初は XML ファイルとして作成されます。 HTML バージョンと PDF バージョンは、スタイルシートを使用して自動的に生成されます。コード (ページを表示するアプリケーション)、コンテンツ (XML ドキュメント)、および表示 (スタイル シート) は異なります。
コア機能をモジュールにカプセル化し、コードの重複を避けることが重要であるのと同様に、コンテンツ用に個別のソース コードを用意し、必要な方法でコンテンツを表示することも重要です。クライアントと接続速度に基づいてページをカスタマイズする柔軟性も向上します。また、プログラマー、デザイナー、作成者が互いに独立して作業できるため、大規模なプロジェクトに取り組んでいる場合には良いことになります。
デザインを捨てることを恐れないでください
誰が何と言おうと、アプリのデザインを学ぶには練習が最善の方法です。始めたばかりの場合は、多くの間違いを犯す可能性が高く、そうやって学んでいきます。悪いデザインは破棄する必要があります。コード、コンテンツ、表示を疎結合にしておく必要があるのはこのためです。悪いデザインを捨てることが、痛みを和らげる手段になります。古いコードを破棄し、より良いコードに置き換えると、コンテンツと表示が保持されます。
さて、コードを堅牢にするという約束に戻ります。自分のコードが他の人のコンテンツや表示に影響を与えることを常に覚えておく必要があります。コードがそのタスクに対応していない場合、他の部門がどれほど素晴らしい努力をしてもそれを補うことはできません。
堅牢なコードを作成する
コード要件が変更されていないと仮定すると、コードを変更する必要性に気づくことはありません。時々最適化や改善を行うことは別として、コードは十分に油を注いだマシンのように動作する必要があります。
難しそうですか?しかし実際にはそうではありません。率直に言って、堅牢なコードを書くのに天才は必要ありません。迷ったときは、脇道にそれないように、正しい質問を自分に問いかけてください:
安全ですか?
シンプルでわかりやすいですか?
プラットフォームに依存しませんか?
十分速いですか?
コードを保護する
多数のユーザーを満足させるシステムは安全でなければなりません。 PHP 自体はブラックハット ハッカーに対して脆弱ではありませんが、あまり確信を持たないでください。バージョン 4.2.2 より前の PHP 4 には、重大なセキュリティ上の欠陥がありました。機密データは常に適切な暗号化を使用してネットワーク上で保存または送信されるようにしてください。これは、ビジネスを処理し、情報 (クレジット カード番号など) を保存し、機密データを送信するアプリケーションにとってより重要です。
現在、ユーザーが送信したデータを信頼するのは困難です。使用する前にデータが検証され、クリーンであることを確認してください。 Web アプリケーションをインターネット上に置くと、システム、ソフトウェア、データ、ビジネスが広大なネットワークに公開されることになることに注意してください。
コードが常に安全に実行されるようにしてください。
コードはシンプルにしてください
コードは理解しやすく、読みやすく、十分に文書化されている必要があります。自分自身または他の人のコードに慣れるまでにかかる時間を短縮するには、プロジェクト全体で共通の命名規則とコーディング規則を使用します。コードを保守する時期が来たときに、これらの側面が確実に成果をもたらすように時間を投資してください。
コードをプログラムするときにコードを文書化することをお勧めします。すべてのスクリプトを解析して、見栄えの良い HTML 形式のドキュメントを作成できるツールはありません。コードの動作を変更した場合は、それに応じてドキュメントを変更してください。コードに実際に何も文書化されていない場合、コードの文書があっても意味がありません。
コードが文書化され、シンプルで理解しやすいものであることを確認してください。これは長期的には役に立ちます。
コードをプラットフォームに依存しないようにする
解決しなければならないもう 1 つの問題は、プラットフォームの独立性です。もちろん、Windows 上の PHP 用に書かれたスクリプトは、他のプラットフォーム上の PHP でも機能します。PHP はそのように設計されています。ただし、小さな不一致については注意する必要があります。たとえば、改行文字の表現方法は Windows と UNIX で異なります。
PHP の外部にあるデータベースなどのリソースにアクセスする場合も、抽出を使用する必要があります。コストを削減するために、アプリケーションがデータベース サーバーとして MySQL を使用しているとします。後で、より機能豊富なデータベースを使用することにした場合は、アプリケーションのコードを変更する必要があります。コードに大幅な変更を加えるのは常に面倒な作業であり、エラーが発生しやすいプロセスです。デシメーションを使用して、簡単に変更される部分への変更を分離します。アプリケーション全体を書き直す必要はありません。
必ずプラットフォームに依存しないコードを作成してください。これにより、アプリケーションの適応性と拡張性が向上します。
スピードを重視した設計
対処する価値のある最後の要素はスピードです。スクリプトがデータベースから約 300 個のエントリを選択してシャッフルし、ページを表示する間、誰も待ちたくありません。通常は、ユーザーのブラウザ上で素早く移動して読み込まれる 15 の異なるページに 20 件の結果を配置することをお勧めします。ユーザーは、より速い応答時間を速度として解釈します。もう 1 つのよくある間違いは、ユーザーがページにアクセスするたびにページを動的に作成してしまうことです。これにより、サイトが常に最新の状態に保たれますが、ユーザー数が増加すると、PHP はこれに耐えられなくなります。頻繁に使用されるページはキャッシュする必要があります。キャッシュによりアプリケーションが高速になり、サーバーの負荷が軽減されます。
コードが高速に実行されることを確認してください。待つのが好きな人はいません。
まとめ
このシリーズの最初の記事では、堅牢なコードを書くために実際に何が必要かを学びました。 PHP で大規模なアプリケーションを開発することは、しっかり勉強すればまったく難しいことではありません。実際、PHP で書かれた多くのアプリケーションは簡単に開発されています。同時に、陥りやすい罠に注意することも重要です。計画を立て、物事を小さなタスクに分割し、それらを正しく実行する限り、邪魔になるものはほとんどありません。
次の記事では、変数と関数を効率的に使用する方法を学びます。さらに、PHP で変数と関数を使って魔法を実行する方法も紹介します。この記事で説明する主な内容を計画しました。次回の記事以降、これらについて 1 つずつ説明します (場合によってはスキップすることもあります)。それではまた。