技術研修を提供しているカサレアルでは、JavaScriptのフレームワーク、ライブラリを学ぶコースをいくつか用意しています。
お客様から研修のご要望を伺う際、「JavaScriptフレームワークのおすすめどれですか?」と相談を受けることもあります。
JavaScriptが何かは分かっているものの、数多のJSフレームワーク、ライブラリの違いって何だろう?
いや、そもそもフレームワークとライブラリの違いは?と疑問があったので、調べてみました。
フレームワークとライブラリの違い
フレームワークはWebアプリケーションの
・骨組み
・土台
・ひな形
・設計を再利用でき効率化するもの
ライブラリはWebアプリケーションの
・部品
・汎用性の高いパーツのコレクション
・コードを使い回し効率化を可能にしたもの
・開発効率を上げプログラムを軽くするもの
あらゆるサイトで調べ、色んな表現が出てきました。
ですが、調べてみると、どれがフレームワークでどれがライブラリなのかという解釈は、人それぞれのように感じました。
というのも、カサレアルではReactやVue.jsをライブラリと紹介していますが、
調べたサイトによってはフレームワークだと書いてる人が結構いたからです。
(Angular、React、Vue.jsで「3大フレームワーク」と呼ぶ記事もよく見ました。)
個人的にフレームワークとライブラリの違いを理解しやすかったのは、下記のサイトです。
https://zenn.dev/nameless_sn/articles/framework_and_library
この記事に書かれたコメントまで読んで、なんとなくニュアンスを掴めました。
JavaScript「3大フレームワーク」の違い
3大フレームワーク(Angular、React、Vue.js)はカサレアルでも入門編から研修提供しています。
2020年~2022年の3年間、Angular、React、Vue.jsの中で、
カサレアルでの受講者数はReact、Vue.jsは年々伸び、Angularのみ減少傾向にあります。
この点に関しては、受講者アンケートから分析したトレンド比較を2022年の夏に講師が講演したことがあります。
講演動画はYoutubeに上がっていて、非技術者の私が見ても分かりやすくまとまっているので、おすすめです。
11:30~あたりからはじまります。
https://youtu.be/YGCoJEq3j7Y?t=690
そして、3大フレームワークそれぞれの特徴を、非技術者でも理解できる範囲で調べました。
参考:https://www.kagoya.jp/howto/
★Angular
・Angular単体で開発可能なフルスタックフレームワークである
・Typescriptの学習が必須になる
・あらかじめNode.jsのインストールが必要
★React
・1つの開発環境でWebアプリのみならず、スマートフォンアプリも開発可能
・独特な記述方式や抽象的な概念が多く、理解に時間がかかり、学習コストは高め
・あらかじめNode.jsのインストールが必要
★Vue.js
・シンプルな設計で柔軟性が高く、他ライブラリと組み合わせて使うことも可能
・日本語のドキュメントが豊富で学びやすい
・大規模な開発には向かない
・あらかじめNode.jsのインストールが必要
それぞれメリットデメリットがありますが、
カサレアルのJavaScript研修の中で1番受講者の多いReactが学習コストが高いと知り、
難しいからこそ、独学ではなく研修会社を使って学んでいる技術者が多いのかなと感じました。
そして、3つ全てに共通して出てきました、Node.js。
カサレアルでもNode.jsの研修コースを提供していますが、今までフレームワークの1種だと思ってました。
★Node.js
・JavaScriptをバックエンドで動作する為のプラットフォーム
JavaScriptはフロントエンドのプログラミング言語という固定概念を持っていましたが、バックエンドでも使える、と。
そしてNode.jsはフレームワークではなく、JavaScript実行環境とかなり異なることを理解しました。
しかし、どのJavaScriptフレームワーク・ライブラリでも使えるなら、
多くの方が身に着けるべき、3大フレームワークとセットで学ぶべき技術かと思うのですが、
弊社の受講者数は直近3年間とも特別多くはありません。
こちらは独学の方や、業務で使い慣れていく方が多いのでしょうか、気になるところです。
まとめ
・フレームワーク、ライブラリの表現の差は個人による
・Reactは学習コストが高いので、学習のプロである研修会社を利用する方が多い(のかもしれない)
違いを学んだうえで、来年2023年のJavaScript動向も気にしてみようと思います。