「PHPerの今とその先を語り合うフォーラム2021」PHP TechCafe

PHPの基本知識

  • PHP
    • Rasmus Lerdorf によって作成

      • 実行時にコンパイルされる動的型付け言語
    • Web開発に適した言語

      • 最も有名なCMSが利用できる
        • WordPress
          • 記事追加や編集、といった基本的な記事更新の画面が直感的
          • Webサイトの構築が簡単
          • 拡張性が高く簡単
      • 強力なフレームワークが数多く存在
        • Laravel
          • 世界的に有名なフレームワーク
        • Symfony
          • Laravel の土台となっているフレームワーク
        • CakePHP
          • 日本語のドキュメントが豊富
    • 選ぶ基準

      • 学習コストが低く自由に開発できることからスピード感をもって開発したい場合などに便利
      • 移り変わりや顧客要望に柔軟に対応する必要があるWebアプリケーション開発に最適
    • HTMLに直接埋め込むことも可能

歴史

  • 1994年

    • 最初のPHPファイルが作成
      • CGIバイナリ群でC言語で書かれていた
      • Rasmus がオンラインで公開している経歴書のアクセス履歴を調べるために使われていた
        • そのスクリプト群を Personal Home Page Tools と名付けられた(「PHP Tools」 と略されることが多かったようです。)
  • 1995年6月

    • 様々な要望もあり、PHP Tools としてソースコードを公開
    • ユーザが自分でバグ修正や機能改善することが許可・推奨された
      • このころから一種のフレームワークとして使えるようになった
  • 1995年9月

    • さらにPHPを発展させ短期間だが PHP という名前から FI(Formas Interpreter)に変更
      • 現在のPHPの基本機能がいくつか含まれていた
        • Perl風の変数
        • フォームの変数自動取得
        • HTMLに埋め込める構文
  • 1995年10月

    • さらにソースコードを書き直し PHP の名前に戻した
      • Personal Home Page Construction Kit
        • C言語の構文に寄せて作られ、CやPerl などを知っている人が移行しやすい
  • 1996年4月

    • さらにコードが修正され PHP/FI という名前に変更
      • この時点でPHPが単なるツール群からプログラミング言語へと進化
        • DBM, mSQL, Pstgres95, クッキー, ユーザ定義関数などのサポートが組み込まれた
  • 1996年6月

    • PHP/FI のバージョンが 2.0 になった
  • 1997年11月

    • β版を卒業
      • このころには裏にあるパースエンジンは完全に書き直されていた
  • 1997年

    • PHP/FI の力不足を感じてパーサーを書き直そう計画
      • Andi Gutmans
      • Zeev Suraski
    • Rasmus をオンラインで捕まえて PHP の現在の実装や自分たちがどう直そうとしているかを議論
      • Andi, Rasmus, Zeev が協力して新たなプログラミング言語を作ることを決める
  • 1998年6月

    • PHP 3.0 登場
      • このころからシンプルに PHP と呼ばれるようになった
        • 個人向けというイメージを払拭するため
      • PHP/FI 2.0の開発が止まった 1997年11月 から約9ヵ月の公開テストを経て公式リリース
    • 拡張性が強力
      • データベースやプロトコル、APIを利用するために成熟したインターフェイスをユーザ向けに用意し、さらに拡張しやすくした
        • そのおかげで多くの開発者がさまざまモジュールを開発するようになった
        • PHP 3.0 が大成功を収めた鍵
          • オブジェクト指向プログラミングのサポートや協力な一貫性のある言語構文
    • 世界中の 70,000 以上のドメインにPHPがインストールされた
    • 最盛期にはインターネット上のウェブサーバのほぼ 10% にPHP3.0 がインストールされた
  • 1998年冬

    • Andi Gutmans, Zeev Suraski は PHP の各戸なる部分を書き直し始めた
      • 複雑なアプリケーションにおけるパフォーマンスの改善
      • PHPコードのモジュールとしての独立性の向上
  • 1999年中旬

    • Zend Engin と呼ばれる新しいエンジンが登場(開発者であるZeevとAndi の名前の組み合わせ)
  • 2000年5月

    • PHP 4.0
      • パフォーマンスの大幅改善
      • 多くのウェブサーバでのサポート
      • HTTPセッション
      • 出力のバッファリング
      • ユーザ入力の安全な取得
  • 2004年7月

    • PHP 5.0
      • Zend Engin 2.0
        • 新しいオブジェクトモデルがサポートされた
  • 最新バージョン

    • 8.0
      • 8.0.8
    • 現在、8.1 開発中
  • 最低限の環境

    • これがあれば最低限動くよね(XAMPとか)
    • オンラインで使えるツールとか
    • Docker

PHPエンジニアの人口/人気/キャリア

順位 言語 求人数
1 PHP 51786
2 Java 40132
3 C# 39010
4 python 31282
5 ruby 22700
6 go 17010

利用サービス

  • 海外
    • FaceBook
    • Wikipedia
    • Slack
  • 国内
    • ぐるなび
    • GMOインターネット
    • カオナビ
    • 弁護士ドットコム
    • BASE
    • pixiv
    • EC-CUBE
    • など

バージョン

Personal Home Page Tools

  • ラスマス・ラードフの個人サイトCGIのためのツール集

PHP/FI

  • DBとの連携
  • クッキー
  • ユーザ定義の関数

PHP3.0

  • PHPの正式名称が "PHP:Hypertext Preprocessor"となる
  • 言語としての形になる

PHP4.0

  • Zend Engine
  • 多種のWebサーバサポート
  • HTTPセッション

PHP5.0

  • Zend Engine 2.0
  • SimpleXML
  • SOAP
  • MySQLi
  • SQLite

PHP5.1

  • パフォーマンス改善
  • PDOのデフォルト有効化
  • 日付処理の書き換え

PHP5.2

  • Zend Engine 用の新しいメモリマネージャー
  • 入力フィルタ
  • JSON
  • ZIP拡張機能
  • ファイルアップロードの進捗追跡機能
  • 日付と時刻オブジェクト

PHP5.3

  • 名前空間
  • 遅延静的束縛
  • 匿名関数

PHP5.4

  • トレイト
  • 短縮化された配列構文
  • 組み込みWebサーバー

PHP5.5

  • ジェネレータとコルーチン
  • finally
  • ::class によるスカラークラス名の解決
  • Zend OPcache 拡張機能によるオペコードキャッシング

PHP5.6

  • 定数にスカラー式/配列が指定可能に
  • splat 演算子
  • useキーワード

PHP6.0 (開発中止)

  • UTF16のサポートに失敗
    • メモリ使用量が多くなりすぎた

PHP7.0

  • Zend Engine 3
  • パフォーマンスはPHP5.6の二倍に
  • 引数の型宣言
  • 戻り値方宣言
  • Null合体演算子
  • 宇宙船演算子(<=>

PHP7.1

  • null許容型
  • 戻り値方宣言で void が指摘可能に
  • クラス定数にアクセス権修飾子が指定可能に

PHP7.2

  • object 型の導入

PHP7.3

  • 末尾コンマを許容
  • ヒアドキュメントの仕様変更

PHP7.4

  • クラスのプロパティで型宣言
  • アロー演算子
  • Null合体代入演算子
  • 弱い参照
  • FFI
  • OPcacheの事前ローディング

PHP8.0

  • アトリビュート
  • コンストラクタ引数でプロパティへの代入が可能に
  • Union型
  • match式
  • nullsafe 演算子
  • mixed 型
  • JIT

IDE

Visual Studio Code (VS Code)

  • OSS(利用無料)
  • PHP開発で必要なプラグインを入れて開発
    • PHP Suggest : Basic (VS Code デフォルトのコードチェック機能)
    • PHP Validate: Enable (VS Code デフォルトのコード補完機能)
    • PHP Intelephense
    • PHP IntelliSense
    • PHP Debug (デバッグ)

Atom

  • OSS(利用無料)
  • PHP開発で必要なプラグインを入れて開発
    • linter-php (構文エラー検知)
    • atom-autocomplete-php (コード補完)
    • php-debug (デバッグ)

PhpStorm

  • 有料(会社で買ったライセンスで個人利用OK)
  • 大抵の機能は揃っている
    • コード補完
    • デバッグ
    • Git連携
    • Docker連携
    • DB連携
    • コードジャンプ

Vim

  • Vimならなんでもできるよ!

FW

(Laravel, Zend Framework, CakePHP, FuelPHP, Symfony, CodeIgniter など)

  • Webアプリケーションフレームワーク とは(wiki)

    • 動的な ウェブサイト、Webアプリケーション、Webサービスの開発をサポートするために設計されたアプリケーションフレームワーク
      • Web開発で用いられる共通した作業に伴う労力を軽減する
        • データベースへのアクセス
        • テンプレートエンジン
        • セッション管理
          • コードの再利用を促進させる
  • そもそもFWってなんで必要?

    • 開発速度向上
      • Webアプリケーション開発でよく利用する処理(セッション管理やDBアクセス、Cookieなど)が既に用意されているため、それらを再利用するだけで開発が進められる
    • セキュリティ対応
      • 脆弱性が見つかった場合に修正版がリリースされる
        • メンテされているOSSの場合
    • 開発ルールの順守
      • フレームワークのルールに従って作成することが強いられる反面、開発チーム全体で共通のルールで開発できるため、ルールに逸脱するようなコードが生まれにくい
  • 各フレームワークの特徴

    • Laravel
      • 世界的に有名なフレームワーク
    • Symfony
      • Laravel の土台となっているフレームワーク
    • CakePHP
      • 日本語のドキュメントが豊富
    • Zend Framework
      • Zeev Suraski と Andi Gutmansがが立ち上げたZend Technologies社が開発しているフレームワーク
      • 2019年の大晦日にプロジェクト終了
      • 現在は Laminas Project として継続中
    • FuelPHP
      • ベースは軽量なフレームワークで開発者が設定や制約をカスタマイズしていく
    • CodeIgniter
  • どのフレームワークがいいの??

    • 重視するポイントによって変わる
      • 処理速度
      • セキュリティ
      • メンテナンス性
      • 開発スピード
      • 学習コスト
      • カスタマイズ性
    • 有名なフレームワークは上記の要素のスコアが全体的に高い傾向にある
      • 後はフレームワーク側の制約や設計思想に開発者が納得できるか

フロントエンドとPHP

  • SPAの普及

    • 一昔前は、サーバーサイド(PHP)で業務処理を行い、ブラウザが表示するHTMLを出力するまでを実行し、JavaScriptは一部のUI処理に限定的に使われるケースがほとんど
    • 最近は、PHPでは処理結果をJSONで返すAPIだけを実装し、UI部分はVueやReactなどでSPAを開発するケースが増えてきた
      • SPA?
        • SinglePageApplication。
        • ユーザー体験の向上のため、従来のような、画面操作のたびに画面遷移を伴う形ではなく、部分的・非同期に更新するなど、スマートフォンのアプリのようなリッチなUIが求められるようになってきた。その実現方法の一つ。
        • サーバーサイドとフロントエンドを分離し、APIでやりとりするような設計になるため、役割ごとにソースコードが整理され、保守性や分業のしやすさの向上が得られるといったメリットもあり、普及している。
    • テンプレートエンジン
      • SmartyやTwigなどの強力なテンプレートエンジンの出番も、以前に比べれば少し減っている?
    • フルスタックフレームワーク
      • Laravelなどのフレームワークにもこの流れの影響はあり、従来通りBladeをテンプレートエンジンとして実装する方法だけでなく、
        • BladeをベースにしたSPAを実現するLivewireや、
        • フロント部分をVueで実装できるInertiaなどのライブラリが公式に実装されている
  • これからは全部SPAなの?

    • それはない。と思う。
      • SPAは優れた開発手法ではあるが、規模の小さいアプリまでSPAで組むとコストが割高になる。
      • ので、適材適所だと思います。

PHPの強み・弱み

  • FE分離が進められている中で、PHPに求められるものとは?

    • 以下の記事を参考
    • 言語そのものの実行速度などの課題や機能についての課題は議論の対象にはならなくなった
      • アプリケーションの設計やDBアクセスの部分の方がボトルネックになりやすい
    • PHPの以下の強み(Rasmusが目指したもの)を利用していくことが重要
      • 使いやすい
      • 扱いやすい
        • 柔軟さ(曖昧さ)
    • 逆に以下のような部分は苦手
      • 機械学習
      • 大規模エンタープライズシステム
      • 組み込み
      • モバイル
      • etc
    • 開発者にとっての使いやすさや扱いやすさといった強みを生かす
      • 頻繁に変化するようなWebアプリケーションの開発に強い?
  • セキュリティ

    • 言語そのもののシェアが関係しているため、脆弱性の報告件数などは単純に言語のセキュリティには関係しない
  • 情報の多さ

書籍

  • 初めてのPHP
    • 弊社のPHP系商材の学習書籍
  • 独習 PHP
    • この書籍でPHP入門しました
  • パーフェクトPHP
    • PHPのバージョンが古いので注意が必要だが、基礎からフレームワークの自作まで幅広に抑えてある。副本としておすすめ。

コミュニティ/カンファレンス(PHPカンファレンス,PHPerKaigi など)

  • PHPカンファレンス
  • PHPerKaigi
  • PHPカンファレンス北海道
  • PHPカンファレンス仙台
  • PHPカンファレンス関西
  • PHPカンファレンス福岡
  • PHPカンファレンス沖縄
  • Laravel JP Conference
  • PHPTechCafe(毎月開催)
    など
Select a repo