ウェブは日進月歩で発展している時代にあります。サーバーサイド開発者は言語を選ぶ際に非常に困惑しています。長期的に主流の言語(C、Java、Perlなど)もあれば、Web開発に特化した言語(Ruby、Clojure、Goなど)もあります。プロジェクトがうまく動いている限り、選択はそれほど重要ではないように思えます。

しかし、新しいWeb開発者にどうやって正しい選択をさせるのでしょうか?
私はPHPとNode.jsの二大陣営の戦いを繰り広げたいわけではありません。この2つの言語が置かれている分野の発展状況を比較します。
- PHP
Rasmus Lerdorfは1994年にPHPを生み出しました。PHPはWebサーバー(Apache、Nginx)にインストールされたコンポーネントによって実行されます。PHPコードはHTMLと混在させることができます。初心者でもあまり練習を必要とせず、すぐに価値のあるコードを書くことができます。これによりPHPはますます人気が高まり、現在では世界の80%のサーバーでPHPが動作しています。世界の4分の1のウェブサイトで使われているコンテンツ管理システム「WordPress」もPHPで書かれています。 - Node.js
Ryan Dahlは2009年にNode.jsを生み出しました。Node.jsはGoogleのV8 JavaScriptインタプリタエンジン(Chromeブラウザでクライアント側のJavaScriptコードを実行する役割を担う)に基づいています。他の言語と異なり、Node.jsにはネットワークリクエストとレスポンスを処理する関数ライブラリが組み込まれているため、別途サーバー(Apache、Nginx)やその他の依存関係は必要ありません。Node.jsは非常に新しいものですが、すぐに大きな注目を集めました。Microsoft、Yahoo、LinkedIn、PayPalなど多くの大企業で使用されています。
私たちが愛用するC#、Java、Ruby、Python、Perl、Erlang、C++、Go、Dart、Scala、Haskellなどはどうなのでしょうか?
もし記事の中で上記すべての言語の各種パラメータを比較したら、記事は非常に長くなり、あなたはそれを読むでしょうか?プログラマーにすべてのプログラミング言語を理解することを期待しますか?それは明らかに不可能です。私が主にPHPとNode.jsを比較した主な理由は以下の通りです。
- まず、この2つは比較する価値があります。両者ともオープンソースであり、Web開発に注力しており、類似したプロジェクトに使用できます。
- PHPは長い間リリースされていますが、Node.jsはまだ登場したばかりで、ますます注目を集めています。では、PHPプログラマーはNode.jsの宣伝を信じるべきでしょうか?言語の乗り換えを検討すべきでしょうか?
- 私はプログラミング言語を理解し愛しています。1990年代からずっとPHPとJavaScriptを使用してきており、Node.jsの経験も数年あります。その他にも他の技術にも手を出してきましたが、ここではそれらについて客観的な評価はできません。
また、いくつの言語を比較するかは重要ではありません。なぜなら、どこかの誰かが私が自分の言語に触れなかったと文句を言うからです。
SitePoint上での対決
プログラマーは自分自身のプログラミング能力を高めるために多くの時間を費やします。ある人はプログラミング言語間の応用力を持っていますが、より高いレベルに達した人々は多くの要因に基づいて自分自身の選択をします。主観的な面から言えば、あなたは自分の技術的な決定を推進し、擁護することになるでしょう。
SitePoint Smackdownsは「自分に合ったものを選べよ、友よ」という見解は取りません。私は個人的な経験、要件、好みに基づいて提案を行います。私が言うすべての見解に同意できないかもしれませんが、それは重要ではありません。重要なのは、あなたの意見が他の人々がより賢明な選択をする助けになるということです。
評価方法
以下ではPHPとNode.jsを10ラウンドで比較します。各ラウンドでは、任意のWeb技術に適用できる一般的な開発上の課題を検討します。詳細には深く立ち入りません。乱数生成器や配列ソートの価値を気にする人はほとんどいないからです。
最も多くのラウンドで勝利した方が勝者です。準備はいいですか?勝負を始めましょう……
第1ラウンド:スタート
"Hello World" Webページを作成するのはどれだけ速いでしょうか?PHPの場合:
<?php
echo 'Hello World!';
?>
このコードはPHPエンジンが解析できる任意のファイルに配置できます。通常は.php拡張子のファイルです。ブラウザでURLを入力してそのファイルにアクセスするだけです。
確かに、これですべてではありません。このコードはPHPがインストールされたWebサーバーでのみ実行できます(PHPには組み込みサーバーがありますが、それでもより堅牢なサーバーを使うのが良いでしょう)。ほとんどのオペレーティングシステムにはサーバーソフトウェアが用意されています。WindowsのIIS、MacとLinuxのApacheなどですが、起動と設定が必要です。通常はXAMPPのような事前構築されたインストーラや、Vagrantのような仮想マシンイメージを使用します。より簡単な方法:ファイルを任意のWebホストにアップロードします。
対照的に、Node.jsのインストールは非常に簡単です。あなたはインストーラをダウンロードするかまたはパッケージマネージャーを使用できます。。次に、hello.jsでWebページを作成しましょう:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
}).listen(3000, '127.0.0.1');
ブラウザでhttp://127.0.0.1:3000/ にアクセスする前に、ターミナルで node hello.js と入力してアプリケーションを起動する必要があります。上記の5行のコードで、私たちは小型のWebサーバーを作成しました。これは驚くべきことですが、クライアントサイドJavaScriptの経験が豊富な人でも理解するのは難しいでしょう。
PHPは概念的により単純なので、このラウンドを勝ち取ります。PHPを少し知っている人でも、役に立つものを開発できます。PHPにはより多くのソフトウェア依存関係がありますが、PHPの概念は初心者にとってそれほど面倒ではありません。
JavaScriptを少し知っていることとNode.jsアプリケーションを開発することは別物です。Node.jsの開発手法はほとんどのサーバーサイド技術とは異なります。クロージャやコールバック関数など、かなり複雑な概念を先に理解する必要があります。
第2ラウンド:ヘルプとサポート
公式ドキュメントやリソース(コース、フォーラム、スタックオーバーフロー)の助けがなければ、あなたは必ず苦労するでしょう。PHPはこのラウンドで簡単に勝ちます。PHPには豊富なガイドと20年にわたるQ&Aがあります。何をしようとしても、必ず誰かがあなたより先に同じ問題に直面しています。
Node.jsには優れたドキュメントがありますが、より若く、提供できる助けもPHPより少ないです。JavaScriptが世に出てからの期間はPHPと同じくらいですが、主な助けはブラウザ開発向けであり、ほとんど役に立ちません。
第3ラウンド:言語構文
宣言と構造は論理的でシンプルに使えるでしょうか?
一部の言語やフレームワークとは違い、PHPは特定の方法で書くことを制限しません。具体的にどうやるかはあなた次第です。数行のプログラムから始めて、メソッドを追加し、シンプルなPHP4スタイルのオブジェクトを書き、最終的にはエレガントなオブジェクト指向のMVCパターンを用いたPHP5+アプリケーションを書くことができます。最初はコードが混乱しているかもしれませんが、それでも動作しますし、理解が深まるにつれてどんどん良くなっていきます。
PHPの構文はバージョン間で多少調整されることがありますが、後方互換性は概ね良好です。しかし残念ながら、これが問題も引き起こしています:PHPは混乱しているということです。例えば、文字列内の文字数を数えるにはどうすればいいでしょうか?count?str_len?それともstrlen?あるいはmb_strlen?PHPには何百もの関数があり、命名規則も完全には一貫していません。ドキュメントを調べずに数行のコードを書いてみてください。
JavaScriptは比較的シンプルで、核心となる宣言は数十個しかありません。ただし、構文はよく開発者に批判されます。プロトタイプベースのオブジェクトモデルは親しみやすそうに見えて、実際はそうではないからです。また、さまざまな数学エラー(0.1+0.2 != 0.3)や型変換の混乱('4' + 2 == '42' と '4' - 2 == 2)も多くの不満を招いていますが、これらの状況が実際に問題を引き起こすことはほとんどなく、ほとんどの言語にこの種の言い訳があります。
PHPにも長所はありますが、このラウンドはNode.jsの勝利と判定します。理由は以下の通りです:
- JavaScriptは世界で最も理解しにくい言語です — しかし、いつか悟りを開いて概念がつながると、他の言語はあまりにも不器用だと気づくでしょう。
- JavaScriptのコードはPHPより簡潔です。例えば、JSONとの変換に右往左往する必要はもうありません。UTF-8も同様です。
- フルスタックエンジニアはクライアント側とサーバー側の両方でJavaScriptを使用できます。脳を切り替える必要がありません。
- JavaScriptを深く理解すると、もっと使いたくなるでしょう。しかしPHPはそうではありません。
第4ラウンド:開発ツール
両方の技術には優れたエディタ、統合開発環境、デバッガ、バリデータ、その他のツールがいくつかあります。これは引き分けだと思いますが、ここにNode.jsに若干のアドバンテージを与えるツールがいくつかあります:NPMパッケージマネージャーです。NPMを使用すると、依存関係のインストールと管理、設定変数の設定、スクリプトの定義などができます。
PHPのComposerプロジェクトはNPMに触発されており、いくつかの点でより強力です。しかし、PHPではデフォルトでは提供されておらず、アクティブなライブラリの数も少なく、コミュニティへの影響も小さくなっています。
GruntやGulpのような、開発手法を革新したビルドツールの成長には、NPMも一役買っています。PHP開発者がnode.jsをインストールしたい/必要とする場合もありますが、これは後退ではありません。
第5ラウンド:環境
技術はどこで使用およびデプロイできますか?どのプラットフォームとエコシステムをサポートしていますか?ウェブ開発者は、ビルドツール、移行ツール、データベース変換スクリプトなど、ウェブ専用ではないアプリケーションを開発する必要がよくあります。
PHPにはデスクトップアプリやコマンドラインツールを開発する方法もありますが、実際には使いません。本質的にPHPはサーバーサイド技術であり、その分野では非常に優れていますが、その外側に広がることはほとんどありません。
数年前、JavaScriptは制限が多いと考えられており、いくつかのニッチな技術はありましたが、主戦場は依然としてブラウザでした。Node.jsはこの認識を変え、多くのJavaScriptプロジェクトが爆発的に生み出されました。ブラウザ、サーバー、ターミナル、デスクトップ、さらには組み込みシステムなど、あらゆる場所でJavaScriptを使用できます。これによりJavaScriptはどこにでも存在するものになりました。
第6ラウンド:統合
開発技術は、データベースやドライバと統合できない限り、非常に制限されます。PHPはこの点で非常に強力です。PHPは登場してから長年が経ち、その拡張機能により、メジャーなAPIやマイナーなAPIを持つサーバーと直接通信できます。
Node.jsは猛追していますが、古くてマイナーな技術のために、成熟した統合コンポーネントを探すのに頭を悩ませるかもしれません。
第7ラウンド:ホスティングとデプロイ
あなたの素晴らしい新しいアプリケーションをオンラインのウェブサーバーにデプロイするのはどれほど簡単ですか?これはPHPのまた別の完勝です。適当なウェブホスティング会社に連絡すれば、主要なPHPサポートを見つけることができ、MySQLが無料で付いてくるかもしれません。サンドボックスに関しては、PHPの方が簡単だと考えられており、リスクのある拡張機能を無効にできます。
Node.jsは別種の獣です。サーバーサイドのアプリケーションは常時稼働します。物理、仮想、クラウド、またはカスタムのサーバー環境が必要で、できればroot権限があることが望ましいです。これは一部のサーバー、特に共有サーバーでは実現が難しく、サーバー全体をダウンさせる可能性があります。
Node.jsのホスティングは簡単になるでしょうが、FTPでPHPファイルをアップロードするほど便利には決してならないと思います。
第8ラウンド:パフォーマンス
PHPは非常に勤勉で、それを高速化するための多くのプロジェクトやオプションがあります。パフォーマンス要件が非常に厳しいPHP開発者でさえ、速度をほとんど心配することはありません。しかし、Node.jsのパフォーマンスは通常より優れています。もちろん、パフォーマンスは開発チームの経験と熱意に大きく依存しますが、Node.jsには以下のようないくつかの利点があります:
依存関係の少なさ
PHPアプリケーションへのすべてのリクエストは、WEBサーバーのルーティングを経由して、PHPコードを実行するためにPHPインタープリタを起動する必要があります。Node.jsにはこれらの依存関係は必要ありません。また、Expressのようなサーバーを備えたフレームワークをほぼ確実に使用しますが、それは軽量で、アプリケーションの一部としてうまく機能します。
より小さくより高速なインタープリタ
Node.jsのインタープリタはPHPのものより小さく、より柔軟です。古いバージョンの言語のレガシー互換性問題に悩まされることもなく、さらに、GoogleはV8エンジンのパフォーマンス向上に大きく貢献しています。
アプリケーションの常時オンライン
PHPは標準的なクライアント・サーバーモデルに従います。ページリクエストのたびにアプリケーションが初期化されます。設定パラメータを読み取り、データベースに接続し、情報を読み取り、HTMLをレンダリングします。Node.jsアプリケーションは永続的に実行され、一度起動するだけで済みます。例えば、単一のデータベース接続オブジェクトを作成し、それをすべてのリクエストで再利用できます。確かに、PHPにもMemcachedを使用するなどいくつかの方法がありますが、これはもはや言語の標準機能ではありません。
イベント駆動、ノンブロッキングI/O
PHPは他の多くのサーバーサイド言語と同様に、ブロッキング実行モデルを採用しています。データベースからデータを取得するなどのコマンドを実行する場合、そのコマンドの実行が完了するまで待ってから、次の処理を実行する必要があります。Node.jsは通常待ちません。その代わりに、コマンドの実行が完了したときに一度呼び出されるコールバック関数を提供する必要があります。例:
// fetch records from a NoSQL database
DB.collection('test').find({}).toArray(process);
console.log('finished');
// process database information
function process(err, recs) {
if (!err) {
console.log(recs.length + ' records returned');
}
}
この例では、コンソールに最初に'finished'が出力され、次に'N records returned'が出力されます。なぜなら、process関数はすべてのデータが返されたときに呼び出されるからです。言い換えれば、インタープリタが他のプロセスを処理している間に、他のことを行うことができます。
状況はもっと複雑で、いくつかの警告があります:
- Node.js/JavaScriptはシングルスレッドでのみ実行できますが、ほとんどのWebサーバーはマルチスレッドであり、リクエストを並行して処理します。
- あるユーザーの長時間実行されるJavaScript処理は、タスクを分割するか、または使用しない限り、他のユーザーのコードの実行をブロックします。Web Workers。
- ベンチマークテストは主観的で欠陥があります。Node.jsが優れている例もあれば、逆にPHPが優れている例もあります。プログラマーはただ自分の信念を証明しようとしているだけです!
- 非同期のイベント駆動コードを書くことは非常に複雑で、非常に困難です。
私は自分の経験からしか言えません:私のNode.jsアプリケーションは、同等のPHPアプリケーションよりも明らかに高速でした。あなたの場合はそうではないかもしれませんが、試さなければ永遠にわかりません。
第9ラウンド:開発者の熱意
これは「一般的なウェブ開発の課題」という目標を超えるものですが、重要です。毎日コードを書くことを恐れているなら、どちらの言語が優れていても関係ありません。
比較するのは難しいですが、一部のPHP開発者はPHPという言語に非常に情熱を持っています。心を動かされたPHPの記事やスライドを最後に読んだのはいつですか?もはや言う必要はないのかもしれません?あるいは露出が少ないからでしょうか?それとも私が正しい場所を見つけていないだけでしょうか?PHP7にはいくつかの新機能がありますが、この技術は長年ほとんど進歩していません。それでも、PHPに不満を言う開発者はほとんどいません。
JavaScriptはコミュニティを二分しています。愛する人もいれば、嫌う人もいます。一部のプログラマーはその中間で躊躇しています。それにもかかわらず、Node.jsへの評価はおおむね肯定的です。Node.jsは今、注目の的です。その理由の一部は新しいからですが、称賛が続くとは限りません。現時点では、Node.jsがこのラウンドの勝者です。
第10ラウンド:将来性
どのサーバーサイド言語を採用するかは重要ではありません。たとえ更新されなくなっても、それは引き続き動作します(やったー、ColdFusion!)。使用量は安定傾向にありますが、多くの人が今もPHPを使っています。私は、PHPがあと20年は持ちこたえると保証します。
Node.jsは急速に台頭し、クライアント開発と同じ構文を使用しながら、WebSocketやServer-Sent EventsなどのHTML5の革新的な機能をサポートする、現代的な開発方法を提供しています。この言語のフォーク関数については議論がありますが、Node.jsの使用量は依然として指数関数的に増加しています。
Node.jsは確実にPHPの市場シェアを侵食するでしょうが、完全に取って代わるとは思いません。両方の技術には輝かしい未来があります。このラウンドは引き分けと宣言します。
最終勝者
最終スコア:Node.jsが5ラウンド勝利、PHPが4ラウンド勝利、1ラウンドは引き分けです。どちらかに傾くと思っていましたが、結果は私の予想よりもバランスの取れたものでした。
Node.jsには一定の学習曲線があり、初心者にとっては理想的ではありませんが、今回の対決に勝利しました。また、この言語を好む信頼できるJavaScriptプログラマーであれば、Node.jsは失望させません。Node.jsはより新しく、よりトレンディで、独自のウェブ開発体験を提供するので、PHPを懐かしむことはないでしょう。
しかし、PHPを貶めてはいけません。PHPは依然として活力があります。Node.jsが少し速い、新しい、またはトレンディだからといって、Node.jsの流行に追随すべきではありません。PHPは学びやすく、今でもプロフェッショナルなプログラミングテクニックをサポートしており、ヘルプはどこにでもあり、開発も簡単です。熱心なNode.js開発者でさえ、シンプルなWebサイトやアプリケーションの場合にはPHPの使用を検討せざるを得ません。
私のアドバイスは:選択肢を評価し、あなたのニーズに基づいて言語を選ぶことです。これは、この記事のような「比較」記事よりもはるかに信頼性が高いです。
出典:http://www.oschina.net/translate/php-vs-node-js