質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Node.js

    2360questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Express

    301questions

    ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

  • ウェブアプリケーション

    35questions

    ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。

Node.js、リアルタイムで無いウェブサービスでの利用はアリかナシか

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 121

kou0179

score 254

悩んでいる事

Node.jsをリアルタイム通信がまったく無いサイトで、サーバーサイド言語として採用するのは、アリかナシか

Socket.ioなどのライブラリが充実している等、リアルタイム通信を行うときに非常に強力な言語である事は広く知られていますが、逆にリアルタイム通信が一切無い普通のウェブサービスで使うのは如何なのか、気になった次第です。

考え付いたNode.jsを採用するメリット

  • Expressの利用を考えており、FWとしては非常に薄く必要な分だけ拡張しやすい、扱いやすい。
    (特にRailsなど抽象化されまくったモデルを学習するのがメンドクサイ、SQLをゴリゴリ書きたい)
  • JSだけで書ける(個人的な話ではありますが、JSが最も習熟度の高い言語のため)
  • チューニングをしなくても同時接続に強い(? 経験談)

考え付いたNode.jsを採用するデメリット

  • 基本非同期なのでI/O周り(特にDB)を同期処理で書くのが若干面倒
  • Pure JSで書く場合動的型付けなので牢固なシステムを作るためには意識しなくてはいけない

よろしくお願いします。

そのほかに、Node.jsを採用するメリット、デメリット、またその他の代替案があればご提案、ご意見頂けますと幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

日本では仕事は少ないですがありです。
そもそも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全てに共通する問題ですしね。

新しくスキルの著しく低いメンバーがジョインするとぐちゃぐちゃになるというリスクはありますが、
そういう場合はレビュー等で厳しくチェックしましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/21 13:45

    >> 日本では仕事は少ないですがありです。
    おお!良かったです。

    >> 速度が欲しければGolangも一考の価値はあるでしょう
    Golangも検討しました。ただお恥ずかしい事に英語が堪能でなく、日本語の文献(言語でなくFWの)が少なく少し躊躇しております。

    >> この感想が出る時点でES2016以降の構文を知らないのだと思います。
    プロミス、Async/Awaitは理解しているのですが、大前提として言語として非同期なのでそれら構文を使わなければ同期処理が書けないというような意味でした。(pgとかではそこそこ隠蔽してくれていますが!)
    でも逆に他言語では非同期を書くために面倒な構文があったりするので、一概にNode.jsのデメリットとは言えないですね。メリットでもあるというか。

    >> 型を意識するのはどの言語でも同じことですしー
    まあそうなんですが、クラス固有のメソッドなどを参照しない限りエラーを吐かずに動いてくれちゃうのが良いとこでも悪いとこでもあるので、気づきにくいというのが…。


    ほぼNode.js + expressでの開発を考えていたのですが、知見がある方からの後、一押しが欲しかったところ大変安心しました。
    毎度ご丁寧にご説明頂きありがとうございます。大変参考になりました。

    キャンセル

同じタグがついた質問を見る

  • Node.js

    2360questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Express

    301questions

    ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

  • ウェブアプリケーション

    35questions

    ウェブアプリケーションとは、ウェブ上でアクセスされるアプリケーションのことを呼びます。この場合におけるウェブとは、インターネットやイントラネット上を意味します。