arrow一覧に戻る

2021.10.01

Node.jsを簡単に説明します

はじめに

この記事は

  • Node.js? 名前は聞いたことあるけど…。という方
  • なんかJavascriptのフレームワークを使う時にインストールさせられたけどなにしているかわからんという方
  • Webフロントエンドの勉強をしている・興味があるけれど、Node.jsに詳しくないもしくは初めて聞いたという方

に向けた記事になります。

Node.jsとはなんなのか?どんなことに使われているのか?について解説しています。

Node.jsとはなんなのか?

Node.jsはJavascriptがOS上で動くように作られたJavaScript実行環境です。

Node.js自体の説明の前に大元となるJavascriptに関して軽く説明します。

そもそもJavascriptって?

Javascriptはブラウザ上で動作する言語として開発されました。

開発された時代にJavaが流行っており、その名前にあやかって、「Java」scriptという名前がつけられました。よくJavaと混同されることがありますが、上記の通り名前を拝借しただけなので、JavaとJavascriptはメロンとメロンパンくらい別物です。

最初はブラウザ上で入力された値を加工したり、ブラウザ上でのアニメーションを実行したりなど、ブラウザ上の簡単な挙動を実現するために使われていました。

2008年にGoogleがGoogleMapやGmailにJavascriptを採用したことがきっかけでJavascriptが見直され、今ではWebにおいて、なくてはならないものとなっています。

じゃあNode.jsって?

前段で書いたように、Javascriptはブラウザでのみ動く言語でした。

そのJavascriptをOSで動くようにしたものが、Node.jsです。

なにができるようになったかというと、ファイルの読み書きや、ネットワーク通信を行うことができるようになりました。

それの何がすごいの…?

と思った方もいるかもしれません、ではNode.jsで何ができるのか?について次の項で説明します。

Node.jsはなにに使うのか?

パッケージ管理

ファイルの読み書きができるようになったことで、Javascriptでパッケージの管理ができるようになりました。

おそらくエンジニアの方であれば、Javascriptのフレームワークを利用する際に npm xxxxxというコマンドを実行したことがあるのではないでしょうか?このnpm xxxxx というコマンドはNode.jsの一部であるnpmを利用しています。

npmに関してざっくりと説明すると、

npmはパッケージレジストリ(パッケージ置き場)と、そのパッケージストレージからのインストールや実行を担っているCLIの二つを指します。

npmを用いることで100万以上のライブラリを利用することができ、これはNode.jsを用いて開発する大きなメリットとなっています。

詳細な説明としては以下の記事が詳しいので気になる方は参照いただければと思います。

https://qiita.com/righteous/items/e5448cb2e7e11ab7d477

Webフロントエンド開発

ReactやVueといったフレームワークを使うのであればほとんどのケースで利用することになります。

これらのフレームワークは前項で説明したnpmを用いてインストールを行います。そのほかにも以下のようなケースで使われています。

  • ローカルサーバーの構築
  • webpackでのバンドル
  • ライブラリの利用

サーバーサイド開発

Node.jsはもともとネットワークアプリケーションの構築を目的とされたJavascript実行環境です。

ExpressなどのWebアプリケーションフレームワークを用いることで、APIなどを構築することが可能です。

ネイティブアプリ開発

Node.jsを用いたElectron、React Nativeといったフレームワークにより、Javascriptでネイティブアプリケーションを開発することが可能になっています。

IoT開発

IoTの様々なデバイスでNode.jsを動かすことが可能です。

例えばalexaなどで動くアプリケーションを開発することが可能です。

とにかくNode.jsはカバーする範囲が広く、便利です。「Node.jsはなんでも叩けるトンカチ」のような表現を見かけたこともあります。

じゃあなんでもNode.jsで書けばいいじゃん

もともとJavascriptが言語仕様的にブラウザ向けに作られていることもあり、他の堅牢な言語と比べかなりゆるふわな言語となっています。

具体的な他言語との比較はここでは割愛しますが、便利である一方で、どんな書き方でもできてしまうことからJavascript自体を敬遠する人も少なくありませんし、ケースによっては他の言語の方が優れている箇所も多くあります。

また、Node.jsを開発した人が「Node.jsに関する10の反省点」を挙げています。

https://www.youtube.com/watch?v=ztspvPYybIY&feature=emb_title

日本語の字幕も付いていますが、がっつり英語なので日本語訳をしてくれている記事もあるので気になる人は以下を参照してください。

https://yosuke-furukawa.hatenablog.com/entry/2018/06/07/080335

例えば、Node.jsはファイルやネットワークに対してアクセス権を持っています。前述したようにNode.jsは様々なケースで利用されるため、場合によっては不要な権限を持ってしまうケースもあり、セキュリティ上問題になりうるケースもあります。

「Node.jsに関する10の反省点」を解決するべく、Node.jsの開発者の方を中心として、Denoというプロダクトが開発されています。

Denoとは

https://deno.land/

DenoはNode.jsと同じようにOSで動くJavascriptの実行環境です。

Node.jsと比べると以下のような特徴があります。

  • Typscriptを標準でサポート
  • セキュリティの改善
  • Web標準との高い互換性
  • npmを用いないライブラリ管理

以下の記事に詳しくまとまっていため詳細に知りたい方はご参照ください。

https://zenn.dev/uki00a/books/effective-deno/viewer/what-is-deno

じゃあDenoを使えばよくない?

例えば、Node.jsではなくDenoを用いてReactやVueを開発することができるフレームワークの開発が進められています。

しかしながらNode.jsをDenoで全て置き換えるのは現状かなり厳しい状況のようです。

例えば、Denoでアプリケーションを構築しようとすると、npmが提供している様々なライブラリが使えなくなることなどが挙げられます。問題視されていたnpmですが、その一方でとても便利なライブラリがいくつもあるのも事実です。

Node.jsとDenoに互換性を持たせる開発も行われているため、上記の問題は将来的には解決されるかもしれません。

とは言え、簡単なプログラムを書く分にはめちゃくちゃ便利そうなので、今後試してみて記事にしようと思っています。

この記事を書いた人

田所 舜 フロントエンドエンジニア

新卒でオンライン学習サービスのフロントエンドエンジニアを経験。新規マッチングサービスのフロントエンド、5年以上続くサービスのシステムのフルリプレイスを経験。その後受託開発ではサーバーサイドおよびインフラも経験し、2020年3月にFixelに入社。Fixelでは主にフロントエンド開発やコーディングを担当。

Contact

どのようなお悩みでも
まずはお気軽に
ご相談ください

arrow

Careers

柔軟で先進的な思考を持った
デザイナーやエンジニア、
コンサルタントを募集しています

arrow

Copyright© Fixel Inc. All rights reserved.