はじめてのPHPプロフェッショナル開発 ch2

PHP勉強メモ

[https://www.shuwasystem.co.jp/book/9784798047492.html:embed:cite]

Chapter02 PHPのエコシステム

Section01 モダンなPHPを支えるコミュニティの力

  • 先人の作った資産を使おう、という話
  • Composer

    • デファクトスタンダードのパッケージ管理
    • npmの影響を受けている
  • PSR: PHP Standards Recommendations

    • ライブラリの使用を定めるもの
    • これに準拠したものを選択すると相互利用性が高まる

      • 他プロジェクトに移植しやすい
      • 似た別のものに乗り換える時に学習コスト低くてすむ

Section02 PHP-FIGとPSR

PHP-FIGとは

  • PHP-FIG: PHP Framework Interop Group

    • interop: 相互運用
    • PHPのエコシステムを先進させ、相互にプラクティスを持ち寄り良いスタンダードを普及させることで、人々の相互のコラボレーションを生み出す

PHP Standards GroupとPHP-FIGの誕生

  • php.standards

    • PHP-FIGの前身であるメーリングリスト
    • 主要F/Wの開発メンバー

      • Zend Framework
      • CakePHP
      • PEAR
    • 「PHP本体の標準」
    • 定まった標準: PSR: PHP Standard Recommendations
  • PSR-0 (オートローディング規約)

    • 0 = 最重要
    • オートローダーの相互利用性を確保するための必須要件(具体的な原則)

      • ファイル名
      • ディレクトリ構造
      • 名前空間の命名規則
    • PSR-4で置き換えられた
  • 2011, PHP-FIG: PHP Framework Interop Groupになる

    • 「PHP本体の標準ではなく、その上に乗るソフトウェア開発を支援するための標準」
  • PSR-1 (基本コーディング規約)
  • PSR-2 (コーディングスタイルガイド)
  • PSR-4

PHP-FIGの活動について

  • 非公式だけどコミュニティ代表
  • 有名な人いっぱい

PSRについて

Sectoin03 PHPのパッケージ管理

現在のデファクトスタンダードとしてのComposer

  • PEAR: PHP Extension and Application Repository

    • 長らく使われてきた
    • システムワイドにパッケージを配置する

      • 全部globalインストールする感じ
  • Composer

    • 特長

      • 単一バイナリファイルの設置だけでパッケージマネージャの導入が完了
      • composer.jsonファイルを用いた依存性管理

        • 簡単
        • プロジェクト単位
        • 現代のスピード感に即している
      • composer.lockファイル

        • 孫以降の依存パッケージ
        • 実際に使われているバージョン
      • packagist

        • 手軽なパッケージ公開
        • 公開パッケージの充実
      • PSR-4ベースのオートロード対応

Section04 PHPのアプリケーションフレームワーク

  • うまく選ばないと

    • 過不足
    • かえって非効率
  • とりあえず乗っかってみる、も良い(著者所感)

フルスタック型: Laravel, CakePHP

  • 本書ではCakePHP触ってく
  • 最初の学習コスト高し
  • 学習コストを支払ってしまえば

    • 生産性大きく向上
    • コードの規律

      • 設計思想の影響が大きい
      • ちゃんと理解できれば読み書きしやすい
      • チーム間のコード統一
      • 【所感】フルスタックでもちゃんと勉強する人が集まらないと統一性は失われます

マイクロフレームワーク型: Slim, Lumen

  • フルスタックの機能全部は使わない
  • 本当に必須な部分に機能を絞る

    • その他は自分で用意してね
  • 自律が必要

    • コード統一性が失われやすい

コンポーネント志向: Aura for PHP, BEAR.Sunday

  • 再利用可能なコンポーネントの作成や選択

    • PSRに準拠
    • 疎結合
  • 「なんでもサーバーでやる」ではなくなってきている

    • 例: フロントでSPAしたらサーバーはWebページのroutingから開放される
    • 解釈しやすいシンプルな情報を、高速かつ軽量に返答すること

どのようにWebフレームワークを選ぶか?

  • アプリケーションの目的

    • 必要な機能は?

      • 高度なテンプレートエンジン・レンダリングが必要?
      • API生やすだけ?
    • リリースまでに使える期間

      • 短期決戦?
      • じっくり設計?
    • 全体規模

      • 要件にフィットした設計を行いながらドキュメントも充実させていく?
      • 極小だからコードで十分?
  • チームメンバーの現状

    • レベルが十分でない場合

      • 規約、制約に縛ってもらう

        • CoC (Convention over Configuration)
      • 統制とりやすい
    • レベル高い人が居る

      • 独立的な構造の導入も選択肢

        • F/W依存を高めすぎない
  • そもF/Wとは

    • 本質: 背骨となる設計思想
    • 狭義: 「よくやる処理」の再利用
  • たいていは開発効率 > ささいなパフォーマンスのオーバーヘッド(著者所感を要約)