髙妻智一Node.jsのメリットとデメリットツイートシェアはてブLINEPocketNode.jsの特徴まずは言語の特徴を紹介します。Node.jsはJavascriptでサーバーサイドアプリケーションを実装することができます。シングルスレッドで動作します。イベントループとノンブロッキングI/O言語自身がWEBサーバーの役割を持っているためApacheやNginxなどのWEBサーバーを必要としません。使い始めるまでのセットアップがものすごく少なくすぐに使い始められます。こんな感じでしょうか?言語がJavascriptなので親近感が湧く人が多いかと思います。ビジネスレベルでの普及度は日本だとまだまだな感じはありますが。ちなみに自分はスマホゲームのバックエンドを全てNode.jsで作ってました。4年間Node.jsばっかりやってたのでまあまあ詳しい方かと思います。メリットまずはNode.jsのいいところからですね。C10K問題がないWEBサーバーに接続するクライアント数が1万接続を超えると増えすぎたスレッドがメモリを食い潰してしまうという問題です。メモリだけ食い潰してCPUを全然使えない勿体無い状況が生まれます。Javaなどのマルチスレッドのプログラミング言語はこの問題に対してサーバーを増強して解決します。Node.jsはシングルスレッドで動作するのでどんなに接続数が増えてもスレッドがメモリを食い潰すことがことがありません。この問題を根本解決できるという点でもNode.jsは注目されました。ノンブロッキングI/Oスレッドは同時に一つの処理しかできません。Javaではデータベースへの読み書き時に処理が完了するまで待ちが発生しますが、Node.jsは待ちが発生しません。これをノンブロッキングI/Oと言います。Node.jsはデータベースへの読み書きが完了したタイミングを取得できます。この処理が完了したタイミングでコールバック関数が呼ばれる仕組みをイベントループと呼びます。Node.jsはこの仕組みを使ってノンブロッキングI/Oを実現しています。I/Oの仕組みが素晴らしいですね。この仕組みがC10K問題を解決しているんですね。開発が活発Node.js自体の開発も活発ですし、Node.jsで使うフレームワークやライブラリの開発も非常に活発です。Manager)と言うものが使われています。2017年11月時点で475,000件ものライブラリが登録されています。npmのライブラリは本当に便利なものが多くそれらを組み合わせることでアプリケーションを楽に実装することができます。リアルタイム通信を楽に実現できるnpmにはSocket.IOというリアルタイム通信を楽に導入できるライブラリがあります。そのおかげかNode.jsはチャットサービスやリアルタイム通信を必要とするゲームで使われることが多いです。Socket.IOも日々進化しておりどんどん使いやすくなっています。リアルタイムなサービスを作りたいときはNode.jsのSocket.IOを検討することをオススメします。Socket.IOを使いやすくしたテンプレ的なものをOSSとして公開しているので下記記事も参考にしてみてください。関連記事:Socket.IOでリアルタイム通信を行うOSSを作りましたデメリットNode.js単体ではすでにそんなにでデメリットはないと思います。他の言語と比較して弱いところを書きます。デプロイが難しいNode.jsはホットデプロイの機能がありません。新しいソースコードをデプロイする場合は再起動を行うか新しくプロセスを立ち上げないといけません。再起動を行うと処理中のリクエストを殺してしまうのでこれは絶対にできません。利用者数が少なくそんなに問題としないなら大丈夫ですが、大くの人が使うサービスだと影響が出てしまいます。なると、新しくプロセスを立ち上げないといけないのですが、これは少し工夫が必要になります。その工夫をグレースフルリスタートと言うのですが詳細は下記リンクに記載しているのでぜひ参考にしてみてください。静的型付け言語に慣れている人にはなかなか扱いづらいかもしれません。そのせいか、TypeScriptやFacebookが開発しているFlowと言う静的型付けでJavascriptを実装できるものが流行ったりしています。これは好き嫌いやトレードオフの関係があるので単純にデメリットとは言えないことを付け加えておきます。人材が少ないこれは言語的な問題ではなく市場の問題です。日本ではNode.jsエンジニアを採用するのが非常に難しいです。これは自分の経験談なのではっきり言えます。Node.jsを実運用で経験してましたという人は市場にほぼいないですね。趣味程度で触っていたと言う人は多いですが即戦力はいないです。これから大規模開発をNode.jsで行う場合はそこを気をつけたほうがいいでしょう。自分の開発チームはサーバーが3人もいれば良かったのでそこまでこの問題は引きずりませんでした。基礎から応用までサンプルコードを使って解説しており、Node.jsが初めての人でも読める技術書となっています。上級者向けにはExpressフレームワークを使った実用的な開発手法の解説もありこれからアプリケーションを開発する人の参考になると思います。現状では書き方が古くなっていますが、Node.jsの初心者から上級者で学ぶことの多い書籍です。スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。Incにブロックチェーンエンジニアとして入社。コメントをキャンセルメールアドレスが公開されることはありません。*サイトプロトタイプの爆速作成にはNode.jsがオススメ【プログラミング用語】サーバーとは?RECOMMENDこちらの記事も人気です。