メニューボタン
IBMi海外記事2022.12.07

IBM i にとって最善のWeb言語とは?

Alex Woodie 著

IBM i 上でWebアプリケーションの開発を行うのに最善の言語はどのような言語でしょうか。Pythonでしょうか、PHPでしょうか、それともNode.jsでしょうか。この質問は、先日、IBM i のオープンソースの大海原を20年間近く渡り続けてきたMike Pavlak氏が尋ねた誘導的な質問です。先日のCOMMON NAViGATEカンファレンスでのPavlak氏のプレゼンテーションで答えは示されたものの、その答えを聞いたら皆さんも驚くかもしれません。

先月、ミズーリ州セントルイスで開催された COMMONのNAViGATEカンファレンスで行われた、「Web Language Shootout(Web言語の頂上決戦)」と題するセッションで、当初は、Pavlak氏はPython陣営で戦いに挑もうとしていました。一方、 Perforce Software社での同僚のGuido Faecke氏はPHPを支持し、つい先日、 IBMの一員に加わったばかりのLiam Allan氏はNode.jsを推していました。Allan氏が参加できなくなったことから、Pavlak氏とFaecke氏は、それら3つのスクリプティング言語を代理する形で、2人で一騎打ちの決闘を演じることになります。

テクノロジーの覇権をめぐる聖なる戦いに手加減なし、とPavlak氏がきっぱり述べた通りで、最初の1分は辛うじて静かに過ぎたものの、熱戦は1時間にわたって繰り広げられました。「このようなセッションはそうなるものです。テクノロジーおよび言語の宗教戦争だからです」と彼は述べます。

開発者にフォーカスしたアナリスト企業の RedMonk社が公開した、言語の採用状況に関するいくつかの一般的な統計データを、Pavlak氏は最初の一手として繰り出します。同社は、過去10年間、様々な言語の人気がどのように移り変わったかを示したグラフを公開しています。JavaScript、Java、PHP、Python、C#、およびRubyは安定した人気を示しています。こうしたデータは、Webの世界で勝者のワゴンに乗り込みたいという熱烈な野心を持つ開発者にとっては、良いヒントとなるはずです。

「実際、急上昇するものは、急降下することもあります」とPavlak氏は述べます。「しかし、ゆっくり伸びているのなら、そして安定しているのなら、しばらくは、姿を消すことはたぶんなさそうです。」

注意深い読者の皆さんなら、こう尋ねるかもしれません。この「Web Language Shootout(Web言語の頂上決戦)」に、Ruby on Railsは参戦しないのでしょうか。実のところは、IBM i 向けのディストリビューションが参戦していました。しかし、この後、参加者には明らかになる理由のために、Ruby(Railsであろうとなかろうと)は予選を勝ち上がることができませんでした。「私は、Rubyはやりません」とPavlak氏は述べます。「非常に不規則だからです。」

Javaについても同じです。まったくスクリプト言語などではなく、Pavlak氏曰く、プログラマーに人生にうんざりするよう仕向ける陰謀なのかもしれないということです。「私は好きにはなれません」と、Pavlak氏は、自分の殻に閉じこもっているこのオブジェクト指向言語について述べています。「ちょうど旅行鞄のようなものです。処分してしまうことはできません。しかし、Javaは、今もなお、大人気のWeb言語です。動機が不純であるにもかかわらず、です。」

言語の人気の移り変わりについてのグラフ
RedMonk社による、言語の人気の移り変わりについてのグラフ。

JavaScriptは、TypeScriptと同様に、Webフロントエンドを開発するための言語です。バックエンドのビジネス ロジックを開発するための言語ではありません。Pavlak氏とFaecke氏との決闘の最終的な目的は、バックエンドのWebアプリケーション ロジックを書くための最高のスクリプト言語を見つけることだったため、JavaScriptはここで予選落ちです。

ここで最初の質問に戻ります。すなわち、最善のWeb言語はどれでしょうか。Pythonでしょうか、PHPでしょうか、それともNode.jsでしょうか。Pavlak氏によれば、Pythonには、他の2つよりもかなり大きく優位に立っている面が1つあるそうです。すなわち、IBM i のWebアプリケーション開発者は誰でも、いずれはPythonを使用することになるということです。

「自分のテクノロジーを実装するのにどのような言語を選択するかは重要でありません。Nodeだろうと、Rubyだろうと、PHPだろうと構わないのです。それでも、Pythonは使用することになります」とPavlak氏は述べます。「それは接続機能の一部です。IBM i におけるCLのようなものです。Pythonは、そこでは非常に理に適うのです。」

PHPは、IBM i プラットフォームに初めて導入されたオープンソースのWebテクノロジーであるという栄誉に浴しています。しかし、安泰が続いてきた約20年間によって、PHPの顧客ベースには現状での満足感が生じているのでしょうか。少しはあるかもしれないとPavlak氏は述べます。

「自覚されていないのは、彼らが「PHPを稼働しているだけですが、特に問題はありません。ですよね」という認識でいることです。いや、実際はそうでもないのです」と彼は述べます。「少しはHTMLを学ぶ必要もありますし、少しはJavaScriptについて学ぶ必要もありますし、少しはデータベースについて学ぶ必要もあります」 それから、SQLについても(さらには、もちろんPythonも)。

PHPは、元々、特にWebアプリケーション開発向けに作られたものです。この点でPHPは、Pythonに対して優位に立ちます。Pythonは、ビッグ データおよび機械学習ワークロードでの採用が主な理由となって、近頃、人気急上昇中の汎用言語です。

Pythonのメリットは、学びやすいことです。「このようなところへ移って来たRPG人間にとっても、Pythonは本当に学びやすい言語です」とPavlak氏は述べます。

しかし、PHPには、全般的な言語を学ぶ際の学習スピードと学びやすさという点で、他の2つに対する優位性があります。

言語の人気の移り変わりについてのグラフ
Mike Pavlak氏とGuido Faecke氏による「Web Language Shootout(Web言語の頂上決戦)」と題するNAViGATEでのプレゼンテーション。

「WebシナリオにPythonを当てはめるのは、まるで背中から手を回して肘を掻くような、実にもどかしいことです。どちらかと言えばCGI実装寄りであるため、どちらかと言えば理解しにくい野獣ということになります」とPavlak氏は述べます。「学びやすいものであることからも、目的がWebワークロードなら、PHPの方に大きな優位性が認められる必要があるでしょう。」

Node.jsは、筋金入りの真っ青なIBM i 人間にとってはそれほど学びやすいものではありませんが、他の2つに対して優位に立つ点が1つあります。それは、JavaScriptを使用していることです。前述の通り、JavaScriptはより広範に及ぶIT世界で幅広く採用されてきました。ただし、JavaScriptを知っていさえすれば、Node.js開発者は生産性を上げられるという考えに対にしては言っておきたいことがあります。

「Nodeを好む人が多いのは、プレゼンテーション層で同じ言語を使用できるという神話があるからです。すなわち、サーバー上のJavaScriptです」とPavlak氏は述べます。「そして、そのことには一理あります。言語の構文が同じです。しかし、異なるのは、ライブラリーの使用です。クライアント エンドで使用するライブラリーは、サーバーで使用するライブラリーではないのです。」

Node.jsを選ぶことは、IBM i のショップがJavaScriptのスキルを備えた若手の開発者を採用している場合など、一定のシナリオでは理に適います。構文が同じであるため、こうしたフロントエンドのJavaScript開発者は、他の言語を使用した場合よりも、IBM i サーバーでのバックエンドNode.jsコードの開発で、より短期間で生産性を上げられるようになるかもしれません。「バックエンドでのNodeの使用は、そうしたシナリオでは理に適うようになり始めています」とPavlak氏は述べます。

また、Pavlak氏とFaecke氏は、3つの言語のパフォーマンスの面についても掘り下げました。それらのテクノロジーの間には、パフォーマンスに影響を与える一定の相違点はありますが、一番大事なのは、テクノロジーそれ自体ではなく、むしろ実装だということです。

「結局のところ、私は、業務で、約6種類の言語を使用してきました。どの言語でも、ひどいコードを書く自信があります」と、「リカバリー担当RPG開発者」を自称するPavlak氏は述べています。「Webアプリケーションのパフォーマンスについて文句が出たときは、10回のうちの9回、100回のうちの99回は、データベースを確認すれば大丈夫です。原因は、データベースです。索引方針なのです。」

PHP Webアプリケーションのパフォーマンスにダメージを与える最速ルートは、データベースで論理ファイルを使用することでしょう。「SQLで論理ファイルを使用してはなりません」とFaecke氏は警告します。

ある特定の分野では、Node.jsは、PHPおよびPythonに対して著しいパフォーマンス優位性を持ちます。すなわち、スタックの起動する速さです。 Google社によって作成されたこのテクノロジーは、Netflixなどのような、膨大なWebプロパティで幅広く使用されています。TVやRokuやスマホでNetflixセッションを起動するときは、実際には、 AWS上で稼働しているNode.jsインスタンスのデプロイメントを起動しています。

「Node.jsは非常に高速に起動します。ずっと簡単に拡張できます。水平方向にですが。」とPavlak氏は述べています。「そして、AWSインスタンスはおおむねX86です。そのシナリオだと、圧倒的にNodeが有利です。」

比較してみれば、PHPはNode.jsに比べてロードに時間が掛かります。Node.jsセッションは起動するのに0.5秒であるのに対して、PHPセッションは起動するのに2~3秒掛かるかもしれないとPavlak氏は述べます。ただし、それは、IBM i の顧客にとって譲れない条件でしょうか。おそらくそんなことはありませんが、それはアプリケーションがどのようなものであるかによります。

「PHPは、パズルのピースを一度にすべてメモリーに入れて起動しますが、PHPがそうする理由は、やはり、PHPはWebワークロードのためのものだからです。目標は応答時間1秒以内です」とPavlak氏は述べます。「スタートアップという点から見れば、PHPは、Node.jsに比べて遅くなるでしょう。しかし、実行全体という点から見れば、すべてがメモリー内にあるため、PHPの方がNodeに比べて少し高速かもしれません。」

Pavlak氏が仕事をともにしているPHP on IBM i の顧客のほとんどは、連続稼働するエンタープライズ アプリケーションを開発しています。Netflixバックエンドのように、アプリケーションを開始したり停止したりはしません。「したがって、しょっちゅうクラッシュするというのでない限り、彼らにとってスタートアップ時間は必ずしも重大事というわけではないのです」と彼は述べます。「そもそも、しょっちゅうクラッシュするというのであれば、実際、問題はスタートアップ時間でありません。クラッシュすることなのです。」

メモリーにすべてがロードされているおかげで、PHPの実行時フットプリントは、Node.jsに比べて大きくなります。Node.jsは、時にはより小規模のデバイスで稼働することもあるため(いつも古くて大きなWebサーバー上で稼働しているばかりではありません)、どちらかと言えば、「非常に精密なアプリケーション」にとって大きな助けになるだろうとPavlak氏は述べています。エッジおよびIoTアプリケーションは、Node.jsスタックの大きな助けになるかもしれませんが、IBM i スタック上でこれらを開発しているIBM i のショップはどれくらいあるでしょうか。

Node.jsが持っている1つの優位性は、PHPがデフォルトでシングルスレッドであるのに対して、デフォルトでマルチスレッド化されていることだとFaecke氏は指摘します。また、非同期イベント ループを初めて実装したのもNode.jsでした。これは、Node.jsアプリケーションのレジリエンスを高めることもあります。Webページはフリーズすることもありますが、アプリケーション自体はクラッシュしません。ただし、I/Oイベント ループは、Node.jsが持つ独占的な優位性ではなくなっています。

「オープンソースの視点でよく目にするのは、これらの言語は、しょっちゅう互いに盗み合いっこをしがちだということです」とPavlak氏は述べています。「冗談でよく言うのは、PHPに追加されてきたオブジェクト指向機能の多くが、回復担当Java開発者によって推奨されてきたということです。Java王国にあると思っていたものが、突如として、PHPに現れるのです。それは、くだらない、オブジェクト指向側のものです。」

IBM i 上でのWebアプリケーション開発のための言語の選択に関しては、選択肢に不自由することはありません。Pavlak氏とFaecke氏が示してくれたように、Python、PHP、およびNode.jsを使用することに対しては、それぞれ利点と欠点があります。この宗教戦争には勝者はいません。あるIBM i のショップでうまく機能するものでも、別のショップでは機能しはないこともあるからです。

一番大事なのは、Pavlak氏が述べていたように、そのテクノロジーをどのように実装するかということです。「トランザクショナル ワークロードに関して言えば、PHPであれ、Pythonであれ、Nodeであれ、現実には、需要があったときに、需要に応えることができる必要があるということです」とPavlak氏は述べます。「Webの世界に飛び込んでいるのなら、どのようなテクノロジーを使用しているかは重要ではありません。I/Oや帯域幅を大量に食い潰すことのないようにするにはどのように設計したらよいかについて、賢明でありたいものです。」

あわせて読みたい記事

PAGE TOP