、PHPerはレベルが低いだとか、PHP自体やPHPを使うエンジニアを非難するような話や記事を見かけます。
先に言っておくと、一個人の考えとしてはPHPはあまり好きではありませが、過激なほどの非難をする気持ちは全くありません。
たまにいるような「PHPで作られたもの撲滅したい」「PHPを使っているエンジニアは糞」などと言う過激な発言をする方がいますが、自分は決してそういう考えは全くありません。
確かにPHPで開発された拡張しづらく保守しにくいシステムを見たこともあり、自分も苦しんだ経験は少しはあります。
しかし、そこまでPHPは悪い言語なのでしょうか?
ある方の自分と同じ考え方を持つ似たような記事を見かけたことをきっかけに、PHPの歴史、PHPがここまで非難されてしまった経緯などについて調べて考察し、自分なりの意見なども交えてまとめてみました。
PHPが生まれた背景
PHPを生み出したのはデンマーク系カナダ人であるラスマス・ラードフという方です。
PHPという名称は、C言語で開発していたCGIプログラムである「Personal Home Page Tools」(PHP Tools)を起源とします。
元々は、HTMLフォーム上で扱える動的なWEBページを作成するための簡単なスクリプトとして開発されたものです。
そこからDBへの接続のためのPDO、オブジェクト指向のサポートなどといった度重なる機能拡張をしていくうちに、スクリプト言語の一種として数えられるようになりました。
PHPの設計思想
PHPは動的なHTMLを簡単かつ迅速に開発するための言語であり、PHP自体にWEBアプリケーションを開発するための機能が標準で備えています。
PHPは、RubyやPython(The Zen of Python)のような、公式が打ち出しているような厳密な設計思想はありません。
ただラスマス・ラードフ氏のインタビューなどから言えるのは、「比較的に誰でも簡単に習得できること」が、一番のコンセプトではないかと思います。
文法が理解しやすく、WEBアプリケーションを開発するための機能を標準で備えている。これがPHPの一番の良さであり、コンセプトであると思います。
PHPが批判されてしまう要因
PHPは、元々はただの動的なHTMLを生成するためのツールでしなかった経緯もあり、後付でいろんな機能を追加したことから、全体的に統一感がない部分が目立ちます。
よく言われるのは例外処理部分であったり、一部の標準関数がエラー時に例外を投げずに、例外に対処しづらい。
標準関数郡には、スネークケースとキャメルケースがごっちゃになっていたりと、命名ルールにも統一感が無い。
他にも引数が2つを定義している関数に、1つ3つと違った個数の引数を与えても動作してしまう(下記を参照)
上記のように他の言語にはない”ゆるさ”があるのが特徴です。
自分も別な記事でも書きましたが、参照部分でのちょっと驚くような仕様もあったりします。
開発者が多い言語故の能力間のバラツキ
PHPはプログラミング初心者が始めやすくて敷居が低い言語というのもあり、初心者がすぐに実務で利用しやすいという特徴があります。
そのため明らかに初心者が書いたと思われる保守しづらいコードが世の中に横行してしまい、PHP自体やPHPエンジニアが批判されるような要因になってしまったのではないかと思います。
自分が経験した中でPHPの苦い思い出を一つ出すのなら、FuelPHP製のシステムの改修を手伝わされた経験がありますが、中身があまりにも汚いコードが乱立していたことです。
ちょっとした機能を改修するのにも、一日かけてソースコードを追わなくてはいけないことでした。
そのコードを書いたのは、それなりの年数が立つ社内の先輩エンジニア達ではありましたが、今を思えばかなりひどいものでした・・・
PHPは言語仕様上のゆるさなどもあり、書く人によってコードの品質の差が出やすいものです。
Rubyを開発したMatz(まともと ゆきひろ)からは、PHPについて以下のような指摘がありました。
特に「PHPは初心者に学びやすい(と言われていることが問題である)」という部分に共感する。 PHPは初心者に簡単かもしれないが、初心者による手を抜いたWebアプリケーションは PHPが作られた当初はともかく、現代では害悪ではないだろうか。
Webアプリケーションをなめるな
PHPならではの理由がないわけではないことはわかる。 どこでもインストールされているとか、 デプロイが簡単とか。でも、「初心者に簡単」を一般公開されるWebアプリケーションを 開発するための言語としての利点にするのはもうやめようよ。
上記に関しての内容は、どちらかというとPHP自体への批判というよりも、PHPを使って開発する側に対する批判というのもあると思います。
個人的には、「「初心者に簡単」を一般公開されるWebアプリケーションを 開発するための言語としての利点にするのはもうやめようよ。」という部分には同意できる意見です。
WEBアプリケーションというものには、誰でも見れて一般に公開されるものです。
WEBという誰でも見える環境に公開するからには、上記のような「初心者に簡単」という理由だけで、SQLインジェクションやXSSなどのセキュリティ面、保守性があるシステムの作り方などを知らずに開発を行っていい理由にはならないと思います。
しかし、そういった言語特有の問題以前よりも、経営層が流行や簡単という理由だけでPHPを取り入れてしまったり、IT業界特有の業界構造
から人手不足を補いたい理由による「初心者がすぐ扱える言語」で開発された脆弱性を抱えたり保守性が低い問題を抱えたシステムが世の中に乱立してしまったのも原因だとは思います。
これに関してはPHPどうこうというより、日本の業界構造的な問題もどうしてもあると思います。
それでもPHPは悪い言語のだろうか?
上記でPHPに対しての批判的な内容を自分も述べましたが、そこまでPHPは悪い言語なのでしょうか?
これは人々がPHPに対して何を求めているかによると思います。
多くのエンジニアがPHPに対して求めていることと、普通の人(ここでは経営者やサービスを作ってみたい初心者)では求めている視点が違います。
ラスマス・ラードフ氏のインタビュー記事
の興味深い内容がありましたので、一部の内容を抜き出してご紹介します。
下記インタビューの中で息子さんがMinecraftのプラグインを作り方を聞いてきた時に、javaを教えた時のことを話しています。(ちなみにMinecraftはjava製であり、プラグインの開発も基本的にはjavaで開発します)
目的は子どもにプログラミング言語を教えることじゃないので。
あくまで,子どもが興味をもった課題に自分で取り組めるようにするためですから。
Minecraftのプラグインを自分で書いてみたいというなら,これを使ってこうやるんだよ,と教えるまでです。
もし息子にいきなり「今日はJavaを勉強しよう」と言っていたら,3分で飽きられていたでしょう。
でもあのときは,息子のほうからやってきて,Minecraftでこういうことをしたいからプラグインが書けるようになりたい,と言ったんです。
私はこう答えました。よし分かった,ここに本がある,必要な知識は全部これに書いてある。
これが全部分かるようになったら,プラグインが書けるぞ,と。
PHPの生みの親,ラスマス・ラードフ氏インタビュー
ラスマス・ラードフ氏自体は、インタビューの中ではプログラミングはあくまで問題を解決するための道具であるという考え方を基本的に持っているようです。PHPはあくまでもハンマーのような単純な道具であるとも述べています。
PHPはツールです。ハンマーのようなものです。何の変哲もない道具だけれど,それを使って作られたものは人々の暮らしを変えてきました。
– ラスマス・ラードフ
また下記の内容のように非エンジニアに向けて使えるようにしていることも考えていたことがわかります。
誰でもアイデアを形にできて動かせること、とりあえずすぐ形にするという面ではPHPは最適な言語なのかもしれません。
たとえばFacebook,Yahoo!,Wikipediaなど私たちの生活を確実に変えたものも,みんなPHPで書かれたのです。少なくとも最初はね。
– ラスマス・ラードフ
優れたアイデアを思いついた人は,それを実現するツールを探し,世界に送り出そうとします。たいていの場合,そのためにはPHPが最も近道です。こういうものが作りたい。
なんにもないけど,どうしたらいいだろう。よし,とりあえずPHPで作ろう,となるわけです。PHPはほとんどどんな人でも,そこそこ賢いサルでも,何かを動かせる程度までは理解できます。
セキュリティが完璧でないかもしれないし,スケールできないかもしれないし,処理量が一日5リクエストを超えたとたんに落ちるかもしれない。
それでも,とりあえず動くことが分かればイテレートしていけます。– ラスマス・ラードフ
最初のページを立ち上げてみるまで一年半かかるというようでは,機会を失ってしまいます。
– ラスマス・ラードフ
下記のようにPHPで最初に作ったものを別なもので書き換えることに対しては何の抵抗もないようです。
特に初期のFacebookを作ったマーク・ザッカーバーグのコードはかなり汚かったことでも有名ですが、それでも今は中身を別な言語で優秀なエンジニア達によって書き換えられています。
利益を出せば優秀なエンジニアを雇って中身を治してもらうこともできますし、パフォーマンスの面に問題があったとしても、お金を出せばハードウェアの能力で解決することも可能です。
現代はハードウェアのパフォーマンスが大分上がっていることから、パフォーマンス面は最悪お金で解決できてしまうこともあります。
PHPは確かにひどい言語といわれることもあります。もっといい言語がある,たとえばHaskellはすばらしい,すべてHaskellに書き換えるべきだと。結構,やればいいじゃないですか。
しかし誰かが市場を見つけてソリューションを作らなければ仕事にはならないのです。PHPが今なお人気を保ちつづけている理由はそれかもしれません– ラスマス・ラードフ
つまりは良いアイデアを思いついたけど、形にできるほどの能力もない、とりあえず動く程度の形にはしたいという人がPHPを選んで開発するという選択肢は良いと思います。
インタビュー記事を読めば、ラスマス・マードフ氏自身は技術的なことではなく、ビジネスなどの視点にたって物事を考えられるのだとわかります。
多くのエンジニアがどんなに文句を言っても、開発者自身がそもそも「そういうコンセプト(誰でもできる)」で作ってきたのだということがわかります。
サービス志向か技術志向か?
エンジニアには大きく分けるとするならば、2タイプいると思われます。
技術的なことを追求して、新しい技術を使って開発したり、技術自体を作りたいと考える技術志向のエンジニア。
どうすればサービスが良くなり、サービスをいち早くリリースして、ユーザーに良いものを提供できるかと考えるサービス志向のエンジニア。
ラスマス・マードフ氏のいうPHPはあくまでも「アイデアをすぐ形にするためのツール」であるならば、PHPはサービス志向の人向けの方には非常に良い言語であるとも言えると思います。もちろん技術志向のエンジニアでもPHPが好きだという方はいると思います。
ソフトウェア技術であるプログラミングは、あくまでも目的を達成するための手段でしかありません。技術的なことにこだわることも大事だとは思いますが、まずはそれを使って何を提供するかを考えることが前提であるのかなと感じます。
主にPHPの批判意見が凄い過激な人は、技術志向よりのエンジニアに多いのかなと感じています。
自分も技術志向寄りのエンジニアではあるため、技術的にも面白いと感じるような業務には関わりたいとは感じます。
ここ最近このように考えられたのには、自分の尊敬しているエンジニアの方が技術志向の方かと思いきや、意外にサービス志向な面があったのがきっかけです。その方は技術系のカンファレンスにも何度か登壇されるような方ですが、ユーザー目線なことも考えている方なんだと感じる出来事ではありました。
自分のアイデアを形にしたが、まずは簡単に形にしてみたいという方には、PHPは最適な言語であるのだと思います。
初心者向けにPHPより良い言語はあるか、ないか
ここで上記のようなことに対して出てくる意見としては、「簡単で初心者向けならPHPよりも良い言語があるのではないか?」という疑問だと思います。
これに関してはその初心者にあたる方が何をしたいか?によると思います。面白そうなアイデアを思いつき、WEBアプリケーションを形にしたいという方になら、個人的には「Ruby on Rails」と「Laravel PHP」をオススメするのが良いと思います。
文法的にも簡単で、難しいことを覚えなくても扱えるという意味でも、自分が好きなPythonを入門として学ぶのには良いと考える方もいますが、WEBアプリケーションに関しては全くの初心者には難しいと思います。
PythonにもDjangoというWEBフレームワークがありますが、日本語情報が少ないという点、またフロントエンド周りのサポートがほとんど無いため、初心者には少し厳しいのかなと感じています。
「LaravelPHP」も「Ruby on Rails」もどちらも標準でフロントエンド周りのサポートがしており、Vue.jsなどのJSフレームワークと連携しやすいという利点があります。
本当の初心者というのは、フロントエンドとバックエンドの境目も知らないものですし、いきなり最初から自分で見つけていろんな物を組み合わせるようなことをしなければいけない言語でのWEBアプリケーション開発は無理だと思います。
こういったフルスタックフレームワーク(Laravel,Rails)から手を出して学んでいき、自分が面白いと思った方面(フロントとバックエンド)に分かれて学習していくのかなと思います。
上記のことをふまえれば、初心者がWEBアプリケーションの学習をするのに最適だと思うのは、Laravelを通してPHPを学習していくか、Railsを通してRubyを学んでいくことが良いのかなと感じています。
まとめ
話が少し脱線してしまいましたが、PHPのコンセプトはそもそも「初心者に簡単に扱えること」であるため、その前提を知らないで「PHPは駄目な言語」であるという批判をしてしまうのは少し短絡的だと思います。
フロントエンドをメインでやっているエンジニアの方もいるため、そういった方がサーバーサイドをやらなくてはいけないような状況があった際には、扱うのには良いのかなと思います。
中盤辺りで述べているようなSQLインジェクションやXSSなどもLravelなどのフレームワークを使った開発で、ある程度は解消されています。
Laravelなどは規模が大きくなれば、ディレクトリ分けをしたりなどの独自のアーキテクチャを求められますし、きちんと設計すればちゃんとした品質のものになります。
PHPのエンジニアでも優秀な方はいますし、自分の凄いと思うエンジニアの方の一人はメインはPHPでの開発をしています。
ただし個人的に思うのは、PHPを扱うエンジニアは人口が多いことから、能力にバラツキがあることが多いのも事実ですし、PHPで初心者からなかなか抜け出せていない方は、PHPには他の言語と違ってどういう言語仕様上の穴があるかを理解して、きちんとした品質のあるコードを実装できるぐらいの力をつけてほしいとは感じています。 SB - note
0 コメント:
コメントを投稿