振り返って補足:当事者は迷う、今振り返ると Modern.js の発展は、初期の宣伝と比較して氷山の一角を露呈している。常に新しい。最初は語雀に発表され、今はブログに移されている。
原文は GMTC2021 での講演 現代のウェブ開発に入る(GMTC 2021 講演「バイトダンスの現代的なウェブ開発の実践」全文)
もう一つ対応する PDF は、今は公開しない。
技術的詳細#
三つの部分:
- 全体的に「伝統的な開発」を振り返り、ボトルネックを見つける
- 問題を解決するために起こった変化とトレンド
- バイトダンスの技術的成果、これを「エンジンのアップグレード」と呼ぶ
バイトダンスのような大企業ではプロジェクトが多く、規模が大きいため、フロントエンドの問題がより明確に浮き彫りになる。
- 現代のウェブ開発の現状と未来:https://zhuanlan.zhihu.com/p/88616149
伝統的な開発と問題#
下の図は伝統的な開発技術スタックを示している。図を読んでください。
図の下から上にかけて、抽象レイヤーが下層から上層に向かっている。最右の三つのボックスは、最下層から最上層まで延びており、これらがエンドツーエンドのソリューションであることを示している。左側の体系や互いに切り離されており、大量の重複を含んでいる。このシェアは時間の関係でこの部分については話さない。
青いボックスはコードレベルのもので、緑のボックスはプラットフォームレベルのものである。
この技術は停滞に近づくと、多くの問題を示す。
-
スキャフォールド。構造と例がある
-
必ず変更しなければならないファイルがあり、変更後に実際のプロジェクト構造に合致する
-
複数のプロジェクトが同じスキャフォールドを使用し、それぞれ発展し、最終的に差異が大きくなり、再利用が難しい
-
スキャフォールドが進化しても、元のプロジェクトには利益をもたらさない
-
プロジェクトテンプレート
-
異なるプロジェクトでテンプレートが異なり、ますます増える
-
テンプレートはそれぞれ発展し、更新が停止するものもある
-
webpack のラッピング
-
誰もが webpack を設定する必要がないように、ラッピングや包装を行う、慣例
-
ラッピングの抽象度は限られており、設定の API は多様で、複雑になると変更が必要になる。規範が多すぎる
-
コンパイラツールの進化。webpack の他にも選択肢が多い。これを JS の第三紀元と呼ぶ。具体的な技術的詳細は省略
-
dev build だけでは不十分で、下の図は非常に神秘的で、一列一列に見ると、ここでは展開しないが、フロントエンドにはまだ多くの作業があり、dev と build だけでは不十分である。そして、プロジェクトの下層サービスには関与しない。
図中のこの文章は Redux の作者 Dan が書いた記事からのもので、JS ツールの設定 API の設計について語っている。この文章はこの分野の抽象と設計が巨大な影響をもたらし、高いハードルがあり、非常に真剣かつ専門的に扱う必要があることを述べている。このような作業は高度な集中を必要とし、「Webpack エンジニア」に様々な「規範」を扱わせるべきではない。
- JavaScript のるつぼ: https://increment.com/development/the-melting-pot-of-javascript/
JavaScript の第三紀元: https://www.swyx.io/writing/js-third-age
続き
-
フロントエンドのエンジニアリング。コードレベルに限らず、プラットフォームレベルには至らない。(微妙に serverless?)
-
react の問題。
-
どの具体的な技術フレームワークを選ぶか。彼らは徐々に react に統一されていく、その理由はコミュニティのエコシステム、アプリケーションの規模、設計の進化、設計のトレンドである。この部分はあまり意味がなく、結論があれば良い。
-
react はフレームワークとしての機能が不完全
-
フレームワークレベルを見てみると、例えば nest はバックエンド中心の開発を提供し、普通の web プロジェクトのフロントエンドとの関係はあまりない。node の導入はハードルが高く、node から bff など、略する
-
核心は:層分け + 関心の分離(下には絶対に serverless がある)
参考リンク:
ウェブフレームワークエコシステムの進展 (Chrome Dev Summit 2019): https://youtu.be/QDljY2I1Pfw
NestJS の哲学: https://docs.nestjs.com/#philosophy
クリーンアーキテクチャ: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
BFF パターン(バックエンド・フォー・フロントエンド):入門: https://blog.bitsrc.io/bff-pattern-backend-for-frontend-an-introduction-e4fa965128bf
続き
- IaaS とバックエンド PaaS。フロントエンドとはさらに関係がない。青色には統一された収束点が必要である。(それは何か、必然的に serverless である)
下の図、緑の部分は下層サービス。黄色と青はフロントエンドとバックエンド。
これで第一部が終了。
問題がすべて提起された。どう解決するか、これが第二部の内容である。
変化のトレンド#
- 現代のウェブ開発の現状と未来(JSDC 2019 講演全文): https://zhuanlan.zhihu.com/p/88616149
- 現代のウェブ開発を理解する(JSConf China 2017):https://youtu.be/515pkXWHgnE
https://2017.jsconfchina.com/files/02-modern-web-dev-dexteryy.pdf
技術は進化している
まず青色を見てみよう:
-
lamp
Linux+apache+mysql+php
古いスタイル、略 -
ruby on rails。
MVC
層を導入 -
12-factor app 十二要素アプリケーション宣言は、エンジニアリングの標準であり、具体的には略
-
mean/mern
mongo+express+angular/react+node.js
の説明は略 -
「パラダイムシフト」:https://wiki.mbalib.com/wiki/%E8%8C%83%E5%BC%8F%E8%BD%AC%E6%8D%A2
-
アセットパイプライン: https://guides.rubyonrails.org/asset_pipeline.html
-
MERN スタック: https://www.mongodb.com/mern-stack
オレンジ色の部分を見て、続きは未完。
-
JAMstack
-
j,js -> CSR 対応単一ページ
-
A, apis -> BFF ContentMesh
-
Markup SSR/SSG serverless
-
SHAMstack
-
静的ホスティング -> serverless
-
Apis+js
-
Markup
-
STAR アプリ
-
メタフレームワーク
star は上記の二つの基盤の上に組み合わされている
海外の技術コミュニティではmeta-framework
が言及されている。
本質的には JAMstack と STAR が強調する部分を組み合わせ、クライアント中心の、より高い抽象を含む、汎用的なウェブフレームワークの形式であり、全体システムがこれらのニーズを満たすために、様々なパターンを抽象化し、簡素化する。
また、s 曲線を示し、UI フレームワークが安定に近づくと、react を基に統合され、新しい主流技術が形成されることを述べている。
参考資料
- JAMstack: https://jamstack.org/
- SHAMstack: https://css-tricks.com/jamstack-more-like-shamstack/
- "Content Mesh": https://www.gatsbyjs.com/blog/2018-10-04-journey-to-the-content-mesh/
- ooooops I guess we’re* full-stack developers now: https://css-tricks.com/ooooops-i-guess-were-full-stack-developers-now/
- STAR アプリ:開発ワークフローのための新世代のフロントエンドツール: https://css-tricks.com/star-apps-a-new-generation-of-front-end-tooling-for-development-workflows/
- React ディストリビューションと JavaScript フレームワークのデプロイメント時代: https://www.swyx.io/react-distros/
次のトピックに進むことができる。伝統的な開発が現代のウェブ開発に変わることを「パラダイムシフト」と呼び、様々な古いモデルが新しいモデルに移行する。
現代開発の定義#
「現代のウェブ開発」は、同一のプログラム内で統合開発を実現し、開発、デバッグ、実行、デプロイなどのプロセスで「サーバーレス化」を実現し、フロントエンド技術スタックの開発者が真の「製品開発者」になることを容易にする。
参考リンク
-
DX とは何か?(Developer Experience): https://medium.com/swlh/what-is-dx-developer-experience-401a0e44a9d9
-
"SSG": https://www.freecodecamp.org/news/static-site-generation-with-nextjs/
-
"ISG": https://www.smashingmagazine.com/2021/04/incremental-static-regeneration-nextjs/
-
"マイクロフロントエンド": https://micro-frontends.org/
第三部に入る
バイトダンスのベストプラクティス#
振り返ると、伝統的な開発と現代の開発
図中の緑はプラットフォーム化された基盤を示し、青は純粋なコードレベルの基盤を示している。
プロジェクトが生成され、完全にオンラインであり、一つのボタンでプレビューできる。