😸

フロントエンド周りの知識を学ぶ

2022/07/25に公開

はじめに

こんにちは、きよまるです。
普段はインフラ(オンプレ、クラウド)をメインに設計、開発、運用をしていますが、ここ最近はアプリケーションのレンダリング周り(SPA,SSRなど)と考慮してサーバ設計をすることが増えてきました。
インフラで動作するアプリケーションのうち主にフロントエンドの知識が皆無なので調べはじめましたが、○○.jsみたいなのが多くて何が何だかわからない。
実行環境、ライブラリ、フレームワーク、ヘッドレスクライアントなど様々で何から理解すればいいのかわからないので、まずはJavaScriptの歴史を見てどのような発展を遂げてきて生まれたプロダクトなのかをJavaScriptの誕生から追っていくことにしました。

JavaScripの歴史を振り返る
https://www.jetbrains.com/ja-jp/lp/javascript-25/

https://zenn.dev/mizchi/articles/spa-engineers-history
この記事では学んだことについて記載していきます。

情報整理

標準化団体

W3C

https://www.w3.org/

  • World Wide Web Consortium
  • Web技術の標準化団体

ECMA

https://www.ecma-international.org/technical-committees/tc39/

  • JavaScriptなど規格の標準化団体。ECMAScript
  • ES2020(ECMAScript 11th Edision)などのように表現される

エンジン類

WebKit

https://webkit.org/

  • ブラウザのレンダリングエンジンでオープンソース
  • 様々なブラウザで使われている。元々はappleが作った
  • KHTMLからフォーク

V8

https://v8.dev/

  • C++で書かれたGoogleが作ったjavascriptエンジン
  • chromeやnode.jsで使われている

レンダリング関連

JamStack

JamStack(SPA,SSR,SSG,ISR)の良いまとめ
https://kuroco.app/ja/docs/about/jamstack-architecture/

WebGL

https://developer.mozilla.org/ja/docs/Web/API/WebGL_API

  • 3Dグラフィックスや2DグラフィックスをレンダリングするためのJavaScriptAPI

実行環境

node.js

https://nodejs.org/ja/docs/

  • 非同期型のイベント駆動のJavaScript環境でV8エンジンを使っている
  • サーバサイドでJavaScriptを使えるのが特徴

deno

https://deno.land/

  • node.jsに置き換わるものとして開発中
  • nodeの反対でdenoとのこと

WebAssembly(Wasm)

https://webassembly.org/

  • ブラウザからアセンブリを動作させるための技術
  • C言語とかうごく
  • Chromeなどで使える
  • 速度向上が目的

ライブラリ

Jquery

https://jquery.com/

  • JavaScriptのライブラリ
  • HTMLドキュメントのトラバースと操作、イベント処理、アニメーション、Ajaxが簡単になる

React.js

https://ja.reactjs.org/

  • javascriptのライブラリ
  • UIに特化している

フレームワーク

Vue.js

https://jp.vuejs.org/index.html

  • AngularJSの好きなところを抽出して作ったwebアプリケーションフレームワーク

Nuxt.js

https://nuxtjs.org/

  • Vue.jsをベースとしたwebアプリケーションフレームワーク
  • ブラウザでもサーバでも同一のVue.jsシングルファイルコンポーネントを利用してWeb画面を作成することができる
  • SPAやSSR作れる

Next.js

https://nextjs.org/

  • React.jsベースのフレームワーク
  • SSRやSPA、TypeScriptをサポートしている

Angular

https://angular.io/

  • TypeScriptベースのフレームワーク
  • SPAが作りやすいのが特徴
  • Angular.jsとは別物

ブラウザ

PhantomJS(開発終了)

https://phantomjs.org/

  • JSで作られたヘッドレスクライアント

ツール群

Webpack

https://webpack.js.org/

  • assetをまとめるためのツール
  • 複数のjsとかを一つのjsにしたりできる

Babel.js

https://babeljs.io/

  • JavaScriptのコンパイラ
  • 新しいJavaScriptに対応していないブラウザのための、新しいJavaScriptの書き方を古い書き方にコンパイルする
  • Node.jsで作られている

esbuild

https://esbuild.github.io/

  • ビルドツール、爆速
  • node.js製。コード自体はGolangで並列処理している

その他

TypeScript

https://www.typescriptlang.org/

  • JavaScriptを拡張して作られた言語。Microsoftが開発
  • TypeScriptをコンパイルしてJavaScriptにする
  • 型定義ができる

GraphQL

https://circleci.com/ja/blog/introduction-to-graphql/

  • フロントエンドで機能するクエリ言語。meta社が開発
  • APIに問い合わせするときにデータの取得形状を指定できる
  • 型や必要なkeyのみを指定できたりする
  • API側が改修できないときなどにフロントの使いやすいように指定できる

メモ

ブラウザのレンダリング

https://zenn.dev/oreo2990/articles/280d39a45c203e

JavaScriptの実行の仕組み

全体の流れ

https://engineering.mercari.com/blog/entry/20220128-3a0922eaa4/

実際に全体の動きをステップ毎に追えるサイト

https://www.jsv9000.app/?code=Y29uc29sZS5sb2coJ3NjcmlwdCBzdGFydCcpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogIGNvbnNvbGUubG9nKCdzZXRUaW1lb3V0Jyk7Cn0sIDApOwoKUHJvbWlzZS5yZXNvbHZlKCkKLnRoZW4oZnVuY3Rpb24gbWljcm8xKCkgewogIGNvbnNvbGUubG9nKCdwcm9taXNlMScpOwp9KS50aGVuKGZ1bmN0aW9uIG1pY3JvMigpIHsKICBjb25zb2xlLmxvZygncHJvbWlzZTInKTsKfSk7Cgpjb25zb2xlLmxvZygnc2NyaXB0IGVuZCcpOw%3D%3D

コールスタックと実行コンテキスト

https://zenn.dev/estra/books/js-async-promise-chain-event-loop/viewer/b-epasync-callstack-execution-context
https://developer.mozilla.org/ja/docs/Glossary/Call_stack

WebAPIs

https://developer.mozilla.org/ja/docs/Learn/JavaScript/Client-side_web_APIs/Introduction

マイクロタスクとタスクの実行の流れ

https://zenn.dev/estra/books/js-async-promise-chain-event-loop/viewer/b-epasync-callstack-execution-context

イベントループ

https://meetup-jp.toast.com/896

JavaScriptの非同期処理の歴史

XMLHttpRequest:コールバック地獄

Promise:thenでつなぐようになってネストは深くならなくなった ※XMLHTTPRequestとは別仕様と。

async/await:↑のsyntax sugerになる。↑をわかりやすくしたもの

XMLHttpRequest
https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
Promise
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise

感想

ふわっとしていますが現在はこのような理解です。

  • Next.jsやNuxt.jsの一番の特徴はSSRができること
  • SSRの場合はサーバ側実行環境はNode.js

参考サイト

もらったアドバイス

https://zenn.dev/en30/articles/2e8e0c55c128e0

https://zenn.dev/en30/articles/2129c7f88c450f9fe410

SPA関連技術で以下もホットですね(なんて分類するんだろ・・・)
phoenix liveview
rails hotwire
laravel livewire

GitHubで編集を提案

Discussion