最近の SitePoint PHP と Node.js Smackdown 記事で、Craig Buckler は、2 つの言語が一連の 10 の課題にどのように対処したかを比較し、総合的にどちらが優れているかを判断しました。
クレイグは本の中で、こうした比較は常にどこか矛盾していると語っています。楽しいフォローアップとして、Bruno Åkvorc (SitePoint の PHP 開発者) と James Hibbard (SitePoint の JavaScript 開発者) に各ラウンドについてのコメントを依頼しました。
彼らの詳しい意見は次のとおりです...
ラウンド 1: 始めましょう
ラウンド 1 課題は、各言語で「Hello World」ページをどれだけ速く構築できるかを確認することです。これには、サーバー環境のセットアップに費やした時間も含まれます。
Craig の推定では、PHP がこのラウンドで勝利したのは、その言語が「概念的に単純」で「新しい開発者にとって威圧感が少ない」ことが部分的に理由です。
Bruno:
PHP が「開始」ラウンドで勝利したのは、純粋に、より多くのホストがその言語をサポートしているため、開始が非常に簡単だからです。追加の操作を行わずにすぐに使用できます。より多くのホストが Node コマンド ラインの使用を無視し、直接ファイルのアップロードとコントロール パネルの単純な「アプリの再読み込み」キーを実行した場合、どちらも同じになります。ただし、画面上に表示するための実際の構文という点では、特にプログラミング経験のない人にとっては、PHP の方が簡単です。
James:
ローカルマシンで開発している場合、この 2 つに大きな違いは見当たりません。ブラウザで PHP スクリプトを実行するには、サーバー ソフトウェアをインストールする必要があります。Node スクリプトを実行するには、Node と、できれば Express などの Web フレームワークをインストールする必要があります。ただし、Craig 氏が言うように、PHP は「概念的には単純です」。参入障壁が高くなります。これについては異論はありません。
ラウンド 2: ヘルプとサポート
第 2 ラウンドでは、両方の言語でヘルプとサポートを受けるのがいかに簡単かを検討します。 PHP がこのラウンドで勝利したのは、主に PHP が長く存在しているためです。
ブルーノ:
これについては黙っててください。
ジェームズ:
私はこの声明に同意します。 Node は新しいテクノロジーであるため、現時点ではサポートは少なくなります。しかし、Node がますます成熟すると、この側面は問題ではなくなります。
第 3 ラウンド: 文法
第 3 ラウンドでは、2 つの言語の文法を理解することの難しさを比較しました。 Craig は、Node がこのラウンドで勝利したと判断しました。
ブルーノ:
私はこの見解に強く反対します。確かに、PHP 構文にはいくつかの癖があり、その多くは修正されており、さらに多くの点が新しいバージョンでは削除される予定です。一方で、JSには「これ」という問題もありますよ~
3番目(開発時にjsを使用する場合、クライアントサイド開発とサーバーサイド開発を切り替える必要はありません)については、この概念には同意しません。サーバー環境とクライアント開発環境は完全に切り離されており、依然として脳内のスイッチングが必要です。ブラウザーでは使用できない新しい構文が常に存在し、その逆も同様であるため、これはある意味、言語の切り替えでもあります。
箇条書き 4 (JS を理解するともっと使いたくなる) これにはある程度同意します。 私は仕事で長年にわたって JS と PHP を使用しており、さらに長い間 JS を使用してきましたが、JS にはあまり思い入れがありません。これは完全に個人的な好みですが。
ジェームズ:
私は JavaScript が大好きです。これには癖があることは承知していますが、何らかの理由で ECMAScript 2015 が事態を一変させ、この言語にいくつかのエキサイティングな新機能をもたらすことも知っています。 JavaScript は強力かつ柔軟で、さまざまなスタイルのプログラミングに対応できます。私は PHP ではなく JavaScript を使用するのが好きです。ノード (Node.js) もその 1 つです。
ラウンド 4: 開発ツール
ラウンド 4: これら 2 つのテクノロジーで使用される開発ツールを考慮すると、開発ツール npm を備えている Node の方がわずかに優れています。
ブルーノ:
開発者は当初 npm に触発されていましたが、今では npm よりも使いやすい飛躍的な進歩があり、コンピューターに同じライブラリの 2 つのバージョンがインストールされている場合、飛躍的な進歩はありません。システムをクラッシュさせます。また、npm と比較すると、飛躍的にデザイナーは再帰的思考を使用できるようになり、再帰的思考は非常に重要であるため、開発者がパッケージ マネージャーを構築する準備ができたとき、これが最初に検討されることになります。
npm には致命的な欠陥もあります。これを私は「開発者とのコラボレーションのしやすさ」と呼んでいます。npm では、開発者自身だけが自分の記述内容を理解できます。最後に、npm は Vagrant とうまく連携できません。これは、npm がユーザーのニーズに注意を払わないことは言うまでもなく、自分で作業を開始することを直接妨げます。 npm には長年にわたって存在するバグがあり、このバグによりこのソフトウェアは基本的に Windows では使用できなくなりますが、これは小さな問題ではありません。もちろん、PHP には愚かなバグがたくさんありますが、これらのバグがシステムに問題を引き起こすことはありません。
PHP にコンパイラーが付属していないのは事実ですが、私はそうすべきではないと思います。このような利便性は、パッケージ マネージャーやスタンドアロン アプリケーションによって実現されるべきではありません。いつか誰かが Node 用の優れたパッケージ マネージャーを開発したとしても、それを既存のコンパイラーに置き換えるのは非常に困難になるでしょう。比較的独立したものにし、人々が簡単に切り替えられるようにします。さらに、インストールには、ターミナルにコードを 1 行入力するか、インストーラーをダウンロードするだけで済みます。
この本の中で、コンパイラはほとんど影響を与えないという記述は、明らかな間違いです。 PHP が開発されて以来、このコンパイラは、新しく加わったすべての PHP 開発者に影響を与え、そのうちの最も優れた開発者は、既存のパイプラインにコンパイラを追加する必要がありました。コンパイラーが存在する前から多くの PHP ユーザーがいたからといって、コンパイラーの有用性が低下するわけではありません。実際、導入以来、大きな反響を呼んでいます。 「地域社会への影響はほとんどない」という一部の主張には、実際にはまったく根拠がありません。
さて、ほとんどの PHP 開発者が Node のインストールを望んでいるという事実には異論はありません。これは本当の事実です。残念なことに、多くの優れたツールは当初 Node に基づいて開発されましたが、Node-free 開発環境と同様に、BowerPHP の開発にも Node フリー開発環境を使用できることを願っています。
James:
人々がNodeに参加してくれることに興奮しています。
npmが好きです。インストールも使用も簡単で、ほぼすべてのニーズに対応できる数千のパッケージが用意されています。また、npm がグローバル パッケージとローカル パッケージを選択できるという事実も気に入っています (標準ではパッケージを Ruby のバージョンの隣にインストールする必要がある Ruby などの一部の言語と比較して)。そのツールも素晴らしいです。 Bower や Grunt などの一部のツールは、私のワークフローに永続的に組み込まれており、生産性を飛躍的に向上させました。
npm がバージョン 3 のベータ版を開発したことにも言及する価値があります。これにより、入れ子になったnode_modulesメソッドのエラーなど、Brunoが言及した問題の多くが解決されます。
以下は全体からの引用です:
PHP 開発者は、場合によっては Node.js をインストールしたい (または必要がある) 場合があります。逆は当てはまりません。
ラウンド 5: 環境
ラウンド 5 では、テクノロジーの可用性と展開、およびそれをサポートするプラットフォームとエコシステムについて説明します。 Craig はこれについてはあまり明確ではありませんが、Node を支持しているようです。
Bruno:
Craig は、Web 上の PHP と Node の利点 (一般的な Web 開発の問題) を比較したことがある、そして、JS はどこでも使用されていると言いました。まず、JS 自体ではなく Node.js を比較し、次に、両方の言語が実行できる環境を比較します。魚は愚かすぎて木に登ることができないため、サルは魚よりも強いですが、サルも魚も泳ぐことができます。それでは、彼らがどれだけうまくいくかを比較してみましょう。
Web 開発環境では、PHP が勝ちます。ここでは、PHP ベースのデスクトップ プログラム ツールをいくつか紹介します。はい、使用しないかもしれませんが、これらの PHP ベースのコマンド ライン プログラムは間違いなく使用します。
ジェームズ:
クレイグと私は再び同じページにいます。 Node.js の人気を高めたいくつかの機能 (速度、スケーラビリティ、JSON への緊密な接続、リソース フットプリントの低さ) により、Node.js は強力な IoT デバイスなど、他の多くの種類のアプリケーションに適しています。ロボットが嫌いな人がいるでしょうか?
Node は、NW.js (Chromium および Node.js に基づくアプリケーション) などのプロジェクトを強化し、HTML や JavaScript でネイティブ アプリを作成できるようにします。楽しそう!
ラウンド 6: 統合
ラウンド 6 では、主に古いという理由で、データベースとドライバーの統合を見てみましょう。
Bruno:
統合という点では、PHP には古い利点があり、より多くのオプションを使用できるという利点がありますが、それは、mysql 拡張機能などの多くの古いテクノロジーに対処することも意味します。PHP7 にアップグレードできます。それを取り除くために、しかし、何年も利用できませんでした。
James:
漠然としているように見えますが、私もこれに確かに同意します。私はこの例がとても気に入っています。「時代遅れでより普及したテクノロジー」。これは、Node の JSON のネイティブ サポートという大きな利点も強調しています。 JSON はおそらく Web 上で最も重要なデータ転送形式であり、最新の NoSQL データベースの一般的な構造です。 JavaScript プログラムで JSON を使用するのは非常に簡単です。つまり、Node を使用する場合、フォーマット変換を必要とせずにデータを非常に簡潔に送信できます。 1 つの構文 (JSON 形式) のみを使用して、ブラウザー、サーバー、データベースの間でやり取りできます。
ラウンド 7: ホスティングとデプロイメント
ラウンド 7 では、新しいアプリケーションを Web サーバーにデプロイするのがいかに簡単かを検討します。クレイグの意見では、ここでは PHP が明らかに勝者です
ブルーノ:
ブルーノは再び沈黙します。
ジェームズ:
これは、Node が改善に取り組む必要がある領域です。 Web ホスティングを提供するすべての企業が PHP と MySQL を提供しています。出力を確認したい場合は、拡張子が「.php」のファイルを作成し、 と ?> の間に有効なコードを記述してアップロードし、ブラウザでアクセスするだけです。しかし、同じアプローチは Node では機能しません。もちろん、ノード ホスティングには多くのオプションがありますが、より多くのセットアップとコマンド ライン アクセスが必要であり、初心者にとっては不快な場合があります。 PHP がこのラウンドで勝利したことは疑いの余地がありません。
ラウンド 8: パフォーマンス
ラウンド 8 主にスピードに重点を置きます。これは多くの場合、開発チームの経験と熱心さによって決まりますが、Craig 氏は、Node にはいくつかの領域で利点があると指摘しました。
ブルーノ:
間違いはたくさんあります。まず、この記事ではパフォーマンスについて詳しく説明していますが、開発者のエクスペリエンスやアプリケーションの種類がパフォーマンスに与える影響は除外されています。この記事を読んでも、文脈を無視してパフォーマンスについて話すことがどれほど愚かであるかが理解できない場合は、ここで私の要点を説明します:
パフォーマンスに関する議論は、今もこれからも引き分けです (Java を使用していない限り、Java は間違いなく負けます)
James:
Node は、高性能で低遅延のランタイム環境で有名です。そして、フォーチュン 500 企業のコード スタックに自らを組み込む独自の方法を発見しました。ノンブロッキング I/O メカニズムと Google Chrome V8 エンジン テクノロジーのおかげで、Node は「高速」と「スケーラブル」の代名詞になりました。現在、インターネット上には、Node を使用することで企業のパフォーマンスが向上し、開発者の生産性が向上するなど、多くの記事が掲載されています。このラウンドでノードが勝ったことを嬉しく思いますが、これに疑問を抱く人がいることも理解しています。
ラウンド 9: プログラマー複雑
第 9 ラウンドでは、Craig が平均的なプログラマーが PHP と Node に対してどれだけの感情を抱いているかを見てみましょう。最終的には Node が勝つと彼は考えます。
ブルーノ:
クレイグ、あなたは間違ったところを見ているに違いありません。PHP コミュニティは信じられないほど情熱的で活発で、毎年 20 を超えるカンファレンスが開催され、非常に刺激的なトピックのディスカッションが行われています。こうしてHHVMのPHP7が完成しました。
また、6 年間の開発を経た後でも、Node 開発者がどのバージョンに取り組んでいるのか (v0.12.5 はすでに書かれています) に興味があると言いたいです。これは未熟で危険です (おいおい、不安定なテクノロジを使用しているのに、意図的にビジネスを死なせているのか) さらに、オペレーティング システムの古いバグを無視しているため、一部の重要な開発者が言語のエコシステムを離れる原因になります。
主に npm が原因で、いくつかのネガティブな経験により Node が嫌いになりました。将来的には変わるかもしれませんが、今のところ、Node を使用するたびに恐怖と失望を感じます。好みは人それぞれですが、客観性を保ち、仕事に適したツールを選択することが重要です。しかし、誰もが後知恵でやっていることなので、他の人が試みて失敗することを許容することも重要です。だからクレイグの言うこともジムの言うことも私の言うことも聞かないでください。試してみて、何が機能するかを確認し、使い心地が良いものを見つけてください。最終的には、読み込み時間を節約するだけのものではなく、生産性を感じられるものが最適です。
James:
Node は非常に人気があり、Node の分野には多くの革新がありますが、情熱は客観的ではありませんが、Node がこのラウンドで勝ったことを嬉しく思います。
ラウンド 10: 将来
ラウンド 10 では両言語の見通しが検討され、現段階では両言語に強い将来性があると考えられているため、クレイグ氏はこのラウンドの結果は引き分けであると結論付けています。
ブルーノ:
ブルーノは、急いで PHP に関する記事をもっと書いて、素晴らしい SitePoint PHP チャネルを維持しなければなりません。
James:
James も、大好きな JavaScript チャンネルに戻るのが待ちきれませんが、次のような見解を残して去りました:
このラウンドは引き分けが妥当です。 Node は新星ですが、PHP の座を奪うにはやるべきことがたくさんあります。
要約すると、ハンマーが唯一のツールである場合、すべての問題は釘のように見えます。もちろん、Node がすべてのソリューションに完全に適しているわけではありません。多くの場合、Node を使用しないのが非常に合理的です。ただし、Node ができることは非常にうまく機能します。情報に基づいて決定を下し、プロジェクトに最適なツールを選択するのは完全にあなた次第です。
ブルーノとジェームスが意見を表明しましたが、この問題についてどう思いますか?
Bruno Skvorc
Bruno はクロアチア人のプログラマーで、コンピューター サイエンス、英語、文学の 3 つの修士号を取得しています。彼は SitePoint の PHP コラムニストであり、Diffbot.com の開発エバンジェリストでもあります。疫病のようなレガシー コードを避け、最新のテクノロジを使用するプロジェクトを選びます。また、トレッドミル デスクの愛好家でもあり、ゲーマーでもあります。ブログも開設しています。
James Hibbard
私は現在、太陽の光が降り注ぐ北ドイツに住んでいるウェブサイト開発者です。私は JavaScript と Ruby でのプログラミングが大好きで、SitePoint の JavaScript フォーラムでよく見かけます。コーディングをしていないときは、ランニングを楽しんでいます。
以上、PHP と Nodejs の 10 の比較課題を内容も含めて紹介しましたので、PHP チュートリアルに興味のある友人の参考になれば幸いです。