/note/tech

PHPは使っておりません

要約:

■ 1. PHP停止騒動の発生

  • 朝のニュース:
    • テレビのニュースがPHPを、多くのウェブサイトで使われているプログラミング言語として報じた
    • 動き続けているサイトの中に自分の書いたものがいくつあるか想像しかけたが、知ったことではないと思い直した
  • 各社サイトの反応:
    • メンテナンス表示になるサイトとならないサイトがあった
    • 中には「当社の製品およびサービスでは、PHPは使用しておりません」と告知するサイトさえあった

■ 2. Web制作会社の社長からの依頼

  • 社長の人物像:
    • 無名の大学を出て、無名のイベント会社でブラック労働をした後に独立し、Web制作会社を営んでいる
    • 顧客は零細企業で、料金を踏み倒されたことも一度ではない
    • それでも自分への支払いは欠かさず、浮き沈みの激しい自分に仕事をくれる数少ない社長の一人
  • 依頼の背景:
    • 社長の会社は全案件がレンタルサーバー上のWordPressで、古いPHPが止められて全サイトが表示できなくなった
    • 顧客からの問い合わせに応じるため、応急処置として静的ページを用意する必要が生じた
    • しかし元のページがどうだったかすら確認できない状態だった
  • 自分の算段:
    • データを根こそぎ取得し、dockerで古いPHPと古いWordPressを動かせばページを表示できる
    • ngrokでトンネルを開ければ閲覧用には十分で、表示したページをHTTrackなどでミラーする
  • 依頼の範囲:
    • 社長は、静的ページは自分が手でHTMLを書いて作るので、ブラウザで見える状態まででよいと言った
    • そういう仕事もあるだろうと考え直し、すぐにできると引き受けた

■ 3. 復旧作業の開始

  • 環境の確認:
    • 全ファイルをダウンロードすると、WordPressは5.2(最新は7.1.4)、PHPは5.6だった
    • array()と書かなくてよくなったのは5.4からだったと思い出した
    • arrayの記法はPerlプログラマーだった自分にとって不快で屈辱だった
  • データベースの取得:
    • phpMyAdminもPHPのため停止しており、MySQLの記事データを取得できなかった
    • AIにwp-config.phpを読んでMySQLダンプを取得するCGIを書かせようとしたが、ハッキング行為と見なされ断られた
    • 仕方なく自分でPerlスクリプトを書き、cgi-binに設置した
  • パーミッションの設定:
    • 動かない原因はパーミッション未設定だった
    • キャリアの最初と同じようにchmod 705を実行した

■ 4. PerlからPHPへの転向

  • Perlの衰退:
    • CGI環境では、特にCPANライブラリを多用する場合にPerlは重くなりすぎていた
    • fastCGIやmod_perlが必要なことは明らかで、顧客に専用サーバーの見積もりを出した
  • 顧客の反発:
    • 顧客は初期費用とランニングコストに驚き、なぜ従来通りレンタルサーバーでできないのかと問うた
    • MovableTypeよりWordPressのほうが拡張性に富み速いという評判が立った頃で、明確な答えを出せなかった
    • 自分たちがPHPを書きさえすればいいだけの話だと言われれば、その通りだった
  • 環境の差:
    • MySQLとmod_phpの組み合わせはどのレンタルサーバーでも使えるようになりつつあった
    • PostgreSQLとmod_perlやpersistentPerlの環境は自前で構築しない限りどこにもなかった
    • 待ち望んだPerl6とそのVMはリリースされる気配すらなく、それが全てだった
  • 残された二つの道:
    • 専用サーバーを扱える顧客だけを相手にRubyを書く道
    • レンタルサーバーしか借りられない貧乏な顧客のためにPHPを書く道
    • 自分は後者を選んだ
    • 他に選択肢がなかったことが慰めになるくらいなので、きっと後悔していたのだろう

■ 5. PHPへの複雑な感情

  • 現在の評価:
    • 今ではPHPは嫌いではなく、PHP8はまともな言語だ
    • ただし嫌いではない理由は言語の品質ではない
  • file_get_contentsの衝撃:
    • 外部サイトのRSSを読むPHPプログラムには依存ライブラリがなく、file_get_contents($rss_url)と書かれているだけだった
    • リトライもなく、ローカルファイルを読むような気軽さと安易さだった
    • 人によってはこれだからPHPプログラマはとなるところだが、自分はその即物的な印象を好ましく思った
    • リモートでもファイルはfile_get_contentsで取得できるという発想は悪くなく、Javaの人々は考えもしないだろう
    • ただし名前はget_file_contentsではないのかとは思う

■ 6. PHPという経歴の影

  • file_get_contents組:
    • PHPを書けるという経歴は背中に張り付き、Web屋として決していいものではなかった
  • 貧乏な叔母さんとしてのPHP:
    • 村上春樹の短編「貧乏な叔母さんの話」は、親戚の集まりに影を落とす貧乏な叔母さんの話だ
    • PHPもWeb屋の集まりで、うちはPHPでと言うと少し影が差す存在だ
    • SpringBootやRuby on Railsには差さない種類の影がある
  • 相手による使い分け:
    • 現役でPHPを使う会社では堂々と実績を語り、WordPressのプラグインも作れると言い添える
    • Goをコンテナ上のバックエンドにする会社では、PHPしか動かない環境で苦労したと笑ってみせる
    • まともなPHPを書くのは本当に大変だと語るのが後者での使い分けだ
  • 自分自身の告知:
    • 自分で選べるのであれば、PHPは使用しておりません
    • 自分はずいぶん前からそう言っていた

■ 7. 復旧の完了

  • ローカル環境での再現:
    • ダンプが取れ、AIが書いたPHP5.6環境のcompose.ymlにダンプを流し込んだ
    • 自宅のcoolifyで管理されたdocker compose上のPHP5.6が、どこかの町のクリニックのページを表示した
  • 動いていたサイト:
    • 最新のお知らせは1週間ほど前のものだった
    • 自分が腰痛治療で通う整形外科のお知らせと同じように、そのページはしっかり動き、昨日まで誰かに読まれていた
  • 結末:
    • 腰をさすり、行きつけの整形外科の予約ページを開いた