質問: 悩んでいる事 ------ Node.jsをリアルタイム通信がまったく無いサイトで、サーバーサイド言語として採用するのは、アリかナシか Socket.ioなどのライブラリが充実している等、リアルタイム通信を行うときに非常に強力な言語である事は広く知られていますが、逆にリアルタイム通信が一切無い普通のウェブサービスで使うのは如何なのか、気になった次第です。 考え付いたNode.jsを採用するメリット --------------------- * Expressの利用を考えており、FWとしては非常に薄く必要な分だけ拡張しやすい、扱いやすい。 (特にRailsなど抽象化されまくったモデルを学習するのがメンドクサイ、SQLをゴリゴリ書きたい) * JSだけで書ける(個人的な話ではありますが、JSが最も習熟度の高い言語のため) * チューニングをしなくても同時接続に強い(? 経験談) 考え付いたNode.jsを採用するデメリット ---------------------- * 基本非同期なのでI/O周り(特にDB)を同期処理で書くのが若干面倒 * Pure JSで書く場合動的型付けなので牢固なシステムを作るためには意識しなくてはいけない よろしくお願いします。 ----------- そのほかに、Node.jsを採用するメリット、デメリット、またその他の代替案があればご提案、ご意見頂けますと幸いです。
回答: 日本では仕事は少ないですがありです。 そもそもNode.jsはRubyやPythonとは一線を画す高速な言語で、 ES2015以降の流れでイケてる記述が出来るようになったので、PHPとかいうダサい言語より簡素なコードになります。 まぁ、上に上げた言語も全て採用する理由たりうる良さがあるのですが、 Node.jsもそれに負けていない中々バランスの取れた良い言語だと思います。 つまり新規にプロジェクトを立ち上げる際の言語選択として考慮に入れる価値はあるでしょう。 ただし、Node.jsはプロセスがしばしば落ちるので、 pm2等でゾンビのように復活するような仕組みを用意しておきましょう。 メリットに関して > > Expressの利用を考えており、FWとしては非常に薄く必要な分だけ拡張しやすい、扱いやすい。 > > > これはそうですね。 Webでの使用が一般的な他言語でもExpressレベルの簡素なフレームワークは当然作られてはいますが、 どれもマイナーなものといった印象があります。 それに比べればNode.jsにもRailsそっくりなSailsというフレームワークはあったりしますが、 知名度や使い勝手で言えばExpress一択に近いレベルで強く、 Node.jsが持つマイクロサービス アーキテクチャとよく馴染んでるといったところでしょうか。 GolangのWebフレームワークは結構シンプルだったような... 速度が欲しければGolangも一考の価値はあるでしょう。 因みにGolangもでかい規模のアプリを作るのが苦痛で、Node.jsのマイクロサービスという分野でのライバル的存在です。 > > JSだけで書ける > > > そうですね。 特にBrowserifyやWebpackを利用することで、バックエンドで作った関数をフロントエンドに持ち込むことが簡単に出来るのがNode.jsを書く最大のメリットです。 > > チューニングをしなくても同時接続に強い > > > チューニングをどの程度を指すのかがあれですが、 RailsのUnicornみたいなものを指していますか? 確かにNode.jsは単品で爆速ですが、プロセス管理のpm2とかないと話にならないので結構悩ましい所ですね。 デメリットに関して > > 基本非同期なのでI/O周り(特にDB)を同期処理で書くのが若干面倒 > > > この感想が出る時点でES2016以降の構文を知らないのだと思います。 Promiseとasync/awaitを学習してください。 async/awaitまで学習が進めばほとんど同期的な構文のまま非同期を扱えるようになります。 > > Pure JSで書く場合動的型付けなので牢固なシステムを作るためには意識しなくてはいけない > > > まぁ、型を意識するのはどの言語でも同じことですし、何を今さらと言った所でしょうか。 他のPHP、Ruby、Python全てに共通する問題ですしね。 新しくスキルの著しく低いメンバーがジョインするとぐちゃぐちゃになるというリスクはありますが、 そういう場合はレビュー等で厳しくチェックしましょう。