【JavaScript】分からない部分まとめてみたら最強だった件

どうも、三町哲平です。

Ruby on RailsでWebアプリを開発中なのですが、どんなプログラミング言語やフレームワークを使っていてもJavaScriptが絡んできます。

正直な話、HTMLやCSSは分からない部分はその都度調べていけば、よっぽど手の込んだアプリケーションではない限りは素人でもそれなりのクオリティに仕上げれるという感覚があるのですが、JavaScriptが予想以上の難敵なんですよね。

しかも調べていくうちにどうも、フロントエンドだけではなくバックエンドでも使えるらしいじゃないですか...てことは、JavaScriptが最強なのでは...!?という疑問から色々とJavaScriptに調べてみましたので、少しばかりお付き合い下さい...。

では、どうぞ！

## JavaScript
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/ba9743c0-4240-e24f-58e5-9f9cf0d29851.png" width=30%>
> 一番身近なのは、Webサイトを表示するブラウザ上で動くプログラム（クライアントサイド・スクリプト）です。無くてもWebサイトは見ることはできますが、文章や写真をそのまま読むだけで、いろいろな操作ができません。これだと、とても不便ですね。
そこで、JavaScriptというプログラミング言語を動かすことで、ブラウザ上で画像を拡大表示して見やすくしたり、入力フォームを設置してメッセージを送付できます。

引用元：[JavaScript初心者でもすぐわかる！DOMとは何か？](https://eng-entrance.com/what-is-dom)

## DOM
> JavaScriptでhtmlの要素を操作するための仕組みのことだ。
JavaScriptを扱っていく上で、絶対に知らないといけない仕組みのひとつだろう。
このページではDOMの仕組みと使い方について初心者の方でもわかるように解説した。

引用元：[JavaScript初心者でもすぐわかる！DOMとは何か？](https://eng-entrance.com/what-is-dom)

## Ajax
> 「Asynchronous JavaScript + XML」の略
Asynchronousとは、非同時性の、非同期の
つまり、「JavaScriptとXMLを使って非同期にサーバとの間の通信を行うこと。」

引用元：[初心者目線でAjaxの説明 - Qiita](https://qiita.com/hisamura333/items/e3ea6ae549eb09b7efb9)







## ライブラリ

### jQuery
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/8157bcd7-d6d1-4f02-e6c3-9d3e3d12aed2.png" width=50%>
> JavaScriptでできることを、より簡単な記法で実現できように設計されたJavaScriptライブラリです。2006年にリリースされ、JavaScriptライブラリのデファクトスタンダードであると言われています。
jQueryのおかげで、プログラミングの初心者でも、フロントエンド開発に参加しやすくなりました。jQueryは初心者にやさしい、とても有用なJavaScriptライブラリです。

引用元：[今さら聞けない！jQueryとは【初心者向け】 | TechAcademyマガジン](https://techacademy.jp/magazine/9444)

### React.js
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/1621b127-9684-7ac8-d789-11206a599232.png" width=50%>
> Reactとは一言で言うとUIを作るためのJavaScript用ライブラリです。Facebookが開発元でFacebook、Yahoo、ATOM、Airbnbなど、名だたる有名な企業で採用されています。

引用元：[【Reactとは？】その特徴から将来性まで徹底解説！ | Geekly Media](https://www.geekly.co.jp/column/cat-technology/1903_078/)

### Riot.js
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/365ad379-2c73-2af2-8514-e01be2b9f534.jpeg" width=30%>
> React.jsのようなJavascriptの軽量UIライブラリです。
カスタムタグにHTML、JS、CSSなどを記述して、それらを組み合わせてページを作成する事が出来ます。

引用元：[Riot.jsの使い方について - Qiita](https://qiita.com/Masa_Kado/items/2c70b860ce8cb91a0ad0#:~:text=Riot.js%E3%81%A8%E3%81%AF,%E3%81%99%E3%82%8B%E4%BA%8B%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99%E3%80%82)





## JavaScriptフレームワーク

### Bootstrap
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/332b7820-75e2-8641-34d6-72cdfa7d373a.png" width=40%>
> スマートフォンなどのモバイル端末にも対応し、レスポンシブデザインを採用した HTML, CSS, JavaScript フレームワークです。

引用元：[とほほのBootstrap 4入門 - はじめに - とほほのWWW入門](http://www.tohoho-web.com/bootstrap/introduction.html)

### Vue.js
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/34920100-8a39-852a-a946-cd61d7475e3a.jpeg" width=50%>
> クライアントサイドで使われるJavaScriptのフレームワークです。
クライアントサイドとは、Webサーバーにアクセスして得られた結果をブラウザで表示する部分のことです。
それに対し、サーバサイドの言語は、ブラウザに結果を渡すためにサーバ内の処理を行う部分のことです。
サーバサイドはユーザーからは見えません。
Vue.jsはクライアントサイド、つまり画面に表示される要素をリッチに表現するためのフレームワークです。
日本だと、LINEやnote、Rettyなど様々なサービスでVue.jsが使われています。

引用元：[jQuery代わりになる？JavaScriptのフレームワーク！Vue.jsってどんなことができるの？](https://digitalidentity.co.jp/blog/creative/javascript-vuejs.html)

### Angular
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/1a3d7b80-ddf6-740f-40aa-8d7ac7fef093.png" width=40%>
> Googleによって開発されているJavaScriptフレームワークです。非常に人気があり、WEBアプリケーションの開発では、Reactなどと並び、最も使われているJavaScriptフレームワークの一つです。

引用元：[【初心者必見】Angularとは？いまさら聞けない基礎を学ぼう | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト](https://www.sejuku.net/blog/9019)

### Backbone.js
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/e26249f0-4e17-cfcc-48aa-298218515b5d.png" width=50%>
> JavaScriptの基本的な学習を一通り学んだあとで最初に触れるフレームワークとしては最適です。
特殊な概念やアーキテクチャーなどを新しく勉強する必要はなく、基本的な構文やオブジェクトの知識があれば誰でも手軽に利用できます。ただし、日本語の情報が少なく公式サイトを見てもどこから学習すればいいのか困る人も少なくありません。

引用元：[JavaScript初心者でも理解！Backbone.jsの基本チュートリアル | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト](https://www.sejuku.net/blog/106675)









## サーバーサイドライブラリ

## Node.js
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/79f152f1-20fe-2ad2-deaf-38ab3f0a7f8a.png" width=50%>
> サーバーサイドのJavaScript実行環境です。
Node.jsはJavaScriptを使用して処理しています。したがって、Node.jsを操作する上で使用する言語はJavaScriptです。
ただし、フロントエンドのJavaScriptではなく、サーバーサイドのJavaScriptです。

引用元：[リアルタイム通信で活用！「Node.js」とは【初心者向け】 | TechAcademyマガジン](https://techacademy.jp/magazine/16248)

### Webpack
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/768b999c-53c9-0beb-7349-b5fef5e7cd8c.jpeg" width=50%>
> Node.jsでサーバーサイドで動かすモジュールバンドラーツールになります。
Node.jsでモジュールという単語を聞くと、「npmやbowerとかと何が違うの？」みたいな印象を持たれる方もいるかもしれませんが、基本的にはそれらとはまた違った役割をもっています。
npmやbowerはJSライブラリのバージョン管理などの目的としてよく利用されますが、WebpackはJSファイルのコーディングの部分で開発者の手助けをしてくれるのです。

引用元：[Webpackってどんなもの？ - Qiita](https://qiita.com/kamykn/items/45fb4690ace32216ca25)

#### Webpacker
> Railsのgemの1つです。
webpackは色々な設定ができる分、学習コストがやや高いのが難点ですがwebpackerはwebpackの中身を良く知らなくても、良い感じにwebpackを動かしてくれる優れものです。
webpackerはWebアプリケーションで一般的に良く使われるメジャーな設定を、標準で実装してくれるwebpackのラッパーです。

引用元：[webpack学習の基本のき |](https://www.fundely.co.jp/blog/tech/2020/01/22/180037/#:~:text=webpacker%E3%81%AFWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7,%E3%81%8F%E3%82%8C%E3%82%8Bwebpack%E3%81%AE%E3%83%A9%E3%83%83%E3%83%91%E3%83%BC%E3%81%A7%E3%81%99%E3%80%82)










## Vanilla JS
> 単にJavaScriptのことです。ネイティブのJavaScript。
Pure JSと言ったりもします。
Vanilla JSは、JavaScriptだけでいろいろできるのにフレームワークありきで考える風潮を皮肉ったジョークフレームワークです。

引用元：[Vanilla JSはジョークフレームワーク。普通のJSのこと。 - Qiita](https://qiita.com/tyoukan__/items/e4582c6774748b7f96cd)










## JavaScriptパッケージマネージャー

## npm
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/356543cf-4da3-34b3-85bf-2ae91618c7d5.png" width=40%>
> npmの正式名称は、Node Package Managerです。
npmの正式名称からも解るように、Node.jsのパッケージ（Package ）を管理する（Manager）ツールです。

引用元：[便利なパッケージ管理ツール！npmとは【初心者向け】 | TechAcademyマガジン](https://techacademy.jp/magazine/16105)

## Yarn
![yarn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/441f05b1-1ba2-fd0c-ec1f-8a9b2d3577a1.png)
> * JavaScriptのパッケージマネージャ
* 2016年にFaceBookが公開した
* npmと互換性がある = 同じpackage.jsonが使える

引用元：[yarnとは - Qiita](https://qiita.com/lelouch99v/items/c97ff951ca31298f3f24)

## Bower
![bower.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/f51b2591-1797-1c56-99a4-2b802dddcbd0.png)
> Twitter社が作ったフロントエンド用のパッケージマネージャで、必要なライブラリを簡単にインストールすることができます。

引用元：[Bower（フロントエンド用パッケージマネージャー）の導入方法と使い方 | 株式会社LIG](https://liginc.co.jp/web/programming/other-programming/134044)




## Alternative JavaScript
> AltJS とは、JavaScript の代わりとなる 言語の総称です。
その言語で書いたものを JavaScript に変換して使用します。
なぜ、そんな面倒くさいことをするのか、JavaScript がある定常以上の規模となると、下記の理由から実装・保守の効率が非常に悪くなります。
* 型の定義がないので、意図しない値が入ることがある。
* null safety でないので、意図しない null や undefined が入ることがある。
* オブジェクト指向言語だが、インターフェースやクラス定義がなく、プロパティ名を間違っていても実行時までエラーにならず、エラーになっても原因の解析に時間がかかることが多い。
* 型やインターフェース、クラス定義がないので、エディタによる入力補完があまり受けられない。

引用元：[TypeScript の概要 - Qiita](https://qiita.com/EBIHARA_kenji/items/4de2a1ee6e2a541246f6)

### TypeScript
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/6c6a64a0-fc9c-4350-9daa-e24db24b3434.png" width=30%>
> マイクロソフトが開発したオープンソース言語で、一言で言うと、「型定義できるJavaScript」。
他の Alt JavaScript と比べて後発ながら人気が高く、Google の6番目の社内標準言語としても採用されました。
AltJS としては、Coffee Script が牽引してきましたが、最近では TypeScript に取って代わられた感じがあります。

引用元：[TypeScript の概要 - Qiita](https://qiita.com/EBIHARA_kenji/items/4de2a1ee6e2a541246f6)

### CoffeeScript
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/7f1c3588-4e27-3066-dcbd-916f4a238ef4.png" width=50%>
> →JavaScriptのコードを生成するためのコンパクトなrubyライクなスクリプト言語
→安全で、高性能なJavaScriptのコードを自動的に作成できる！
→Javascriptと比べて2分の1から3分の1の量で記述可
→自動でコンパイルする手段は幾つもあるので手間は増えない
→jQueyとの組み合わせ可能

引用元：[CoffeeScriptとはなんぞや？ - Qiita](https://qiita.com/moriyaman/items/0da99254f110155954d3)

### Opal
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/7285daf2-cb6b-e2a5-0307-6b4688b1189b.png" width=30%>
> OpalはRubyのコードをJavaScriptに変換するコンパイラです。Opalを使うと、Rubyのプログラムをブラウザ上で動かすことができます。

引用元：[Opalとは(2018年版) - Qiita](https://qiita.com/yhara/items/adbf0ed896b911c9d07c#:~:text=Opal%E3%81%AFRuby%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89,%E5%8B%95%E3%81%8B%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)


## その他

### gulp
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/fb587e45-ff88-ac0f-b24c-a7adf92d6737.png" width=50%>
> Node.jsをベースとしたタスクランナーの一つです。
タスクランナーとはWebサイト構築に必要な処理をタスクとして自動化してくれるプログラムで、作業の効率化に使われています。
引用元：[【たった５分で完了】「gulp」の導入方法と使用例を紹介します。](https://digitalidentity.co.jp/blog/creative/gulp.html)

### GRUNT
![grunt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/6a55be8f-e912-7fff-3f74-8e88028ec74b.png)
> Node.js上で動作するオープンソースのタスクランナーです。主にWeb開発に関わるタスクを自動化するために使われています。それぞれのタスクはプラグインとして開発されており、「ファイルの圧縮/minify(ミニファイ)」「コンパイル」「画像圧縮」などを自動化できます。設定ファイルを記述することで、どのようなプロジェクトにも柔軟に対応可能です。
引用元：[GruntでWeb開発を便利に！タスクランナーで手作業を自動化する | tracpath:Works](https://tracpath.com/works/devops/the-javascript-taskrunner-grunt/)










### Popper.js
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/5ad40d19-6bed-c909-fb52-af84bb9c647d.png" width=25%>
> マウスを載せた際などに表示されるポップオーバー。 ユーザの好きなタイミングで（多くは困った時に）表示してくれるので便利なツールです。
Popper.jsはJavaScript製のオープンソース・ソフトウェア（MIT License）です。

引用元：[Popper.js - 便利なポップオーバーライブラリ MOONGIFT](https://www.moongift.jp/2019/03/popper-js-%E4%BE%BF%E5%88%A9%E3%81%AA%E3%83%9D%E3%83%83%E3%83%97%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/#:~:text=%E3%83%9E%E3%82%A6%E3%82%B9%E3%82%92%E8%BC%89%E3%81%9B%E3%81%9F%E9%9A%9B,%E3%81%AE%E3%81%A7%E4%BE%BF%E5%88%A9%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%99%E3%80%82)


## さいごに
### JavaScriptの歴史を学ぼう
上記みたいなJavaScriptに関連した用語の概要を掴んだ上で、下記リンクのページで歴史を見てみるととても読みやすい記事なので、時間がある方はぜひ！

* [JavaScriptの歴史をざっくりまとめたよ! - Qiita](https://qiita.com/DeployCat/items/c900a6f62862954d62e0)
* [JavaScriptが辿った変遷 | Zenn](https://zenn.dev/naoki_mochizuki/articles/46928ccb420ee733f78f)

### Ruby on Railsで開発したい方
Railsを使う上で、Yarn、jQuery、Bootstrapなどの利用方法の基礎的な部分が分かりやすく書かれています。オススメです。

* [【Rails入門】YarnでjQueryとBootstrapを使うには！？ | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト](https://www.sejuku.net/blog/72222)