採用担当者や開発者などがNode.jsをフレームワークとして参照しているのを見続けています。私の意見では、これはNode.jsが実際に何であるかを無知ではありません。
多くの場合、ジョブの説明では、Node.jsは AngularJS 、 React などのライブラリとしてグループ化されています。一般的に、違い(人事、採用担当者など)を知っている。
私の意見では、Node.jsはプラットフォーム、またはランタイム環境です。ファイルシステムのような他のさまざまなAPIのDOM API(ブラウザーではJavaScript)を切り替えます(ブラウザーではなくサーバーとして実行されるため)。
Node.jsがフレームワークであると人々が考えるのはなぜですか。私が間違っている?それは実際にフレームワークですか?
これらの単語は明確に定義されていないため、言うのは少し難しいです。一般的な言い方をすれば、Node.jsをフレームワークと呼ぶのは少し変則的だと思いますが、なぜそうでないのかについて、私は議論するのが難しいでしょう。
これはすべて厄介です、そして私はしばしば言語の本当に貧弱な使用法を見るので、私は明確にして下から始めます
JavaScriptはコンピュータ言語です。つまり、狭義には、一連のテキストを読み取って実行セマンティクスと解釈できるようにする一連の規則です。言語を一連の指示として解釈する方法」 interpreters 、 compilers 、 transpilers 、 lintersと呼ばれるプログラムのクラス、 highlighters などはすべて、テキストを受け取り、この従来のコードの実行方法を理解した上で何かを試みます。
それでは、実行セマンティクスを少し掘り下げましょう。一般に、実行セマンティクスには、言語テキストを読み取り、抽象マシンの説明または観察可能な副作用の説明に到達するプロセスが含まれます。私が提案したいのは、これらの両方が、マシンを操作するため、または観察可能な効果を実行するために、何らかの「低レベルAPI」が必要であると想定していることです。これらは通常、ランタイム環境の一部と見なされます
単語 runtime は通常、想定されるプリミティブ自体のセットとの両方の実際のインスタンス化の両方を意味するために悪用されます。
だから、今私たちは毛むくじゃらの何かに行きます。言語は、実行セマンティクスに意味を提供するためにランタイムの存在を前提とする一連の規則です。それらは範囲外であるため、「それらを調査する」ことはありません。
実際に use 言語を使用するには、ランタイム実装とともにコンパイラーまたはインタープリターのようなものが必要です。コンパイラー/インタープリターとこのランタイムは、実際に executing コードを連携させます。
では、Node.jsはこれにどこに適合するのでしょうか。
それを部分に分解する必要があります:
したがって、Node.jsは多くのものです。
しかし、それはフレームワークですか?
ここで用語が完全にバラバラになります。フレームワークが実際に何であるかについて、誰もが適切で一貫した意味のある定義を持つことはありません。
「フレームワークとライブラリの違い」と呼ばれる論争があり、「ライブラリはあなたが呼ぶものであり、フレームワークはあなたを呼ぶもの」のような不十分なものに終わります。私は本当にそんな悲しい説明を一日の明かりで伝えたくありません。しかし、JavaScript、特にNode.js JavaScriptは、この定義に対する大きな打撃です。なぜなら、コールバックを渡すテクニック全体があなたを意味しているからです常に呼び出しと呼び出されている間を切り替えます。
私の個人的な見解では、ここには本質的なものがあります。明るい線を描きたくないので、
これは確かに手波ですが、フレームワークについて非常に興味深い点を引き出したいと思います。
フレームワークは、コードを解釈する方法の一連の規則を意味します。したがって、それらはそれ自体が言語です。
これも人々が議論したいことかもしれませんが、私の以前の定義を購入した場合、言語はテキストのブロックに命を吹き込む一連の規則にすぎないとすると、新しい規則の層を置くたびにveは新しい言語を構築しました。おそらくフレームワークでは、原材料は生のテキストファイルではなく、ホスト言語のセマンティック解釈ですが、考え方は同じです!
以上のことから、Node.jsをフレームワークと呼んでも、それが標準に少し反していても、とても満足しています。 Node.jsは、生のJavaScriptに言語を拡張する機能を追加します。これにより、この拡張された言語で作業するための新しい前提条件とツールがもたらされます。機能的には、これらのアイデアは Ruby on Rails のような他の広く受け入れられているフレームワークのアイデアと同じです。
この時点で少し気分が悪く、Ruby on RailsとNode.jsの間に大きな隔たりがあることを主張したい場合、その後、私はあなたとすぐそこにいますもちろん、2人が住んでいる概念的な世界の種類は劇的に異なります —それらは同じ種類のものであると言いたいだけです。特定のドメイン内で基本言語の機能を拡張するための一連の規則です。
また、Node.jsのドメインは小さくてタイトであるため、追加された規則は理由を説明するのが簡単で、修正も比較的簡単であることも嬉しく思います。 OTOH、Ruby on Railsは、「ビジネスWebアプリケーション」の複雑で不十分に定義されたドメインに住んでいます。つまり、その規則は確かにあいまいで壊れています。
しかし、これらすべては長い言い方です、そうです、採用担当者はおそらくそれが何を意味するのかわからないでしょう。 「ランタイム」や「エンジン」よりも、「フレームワーク」のほうが、より良い、グロッカブルな言葉のように聞こえると思います。
Node.js®は、ChromeのV8 JavaScriptエンジン上に構築されたJavaScriptruntimeです。
ノードはランタイムまたは環境です。フレームワークではありません。人々(私は感じます)は、エクスプレスのようなフレームワークがノードの至る所にあるので、しばしばこれを間違えます。
ランタイムvsフレームワークの詳細 興味がある場合。