「フロントエンドの基礎知識がある」って何を知ってたら言えるの?
本当に興味のある情報だけ食べて生きていきたいとは思うけれど、お仕事をいただくとなるとそうはいかないこともままある。フロントエンドのお仕事をいただく人が持つ「常識」って具体的にどんなんだろう?とふと疑問に思った。
とりあえず自分が知ってるそれっぽい単語を思いついた順に並べてみる。
- HTTP, サーバー, クライアント
- Web API, REST, GraphQL
- PWA
- CDN
- SSR, SSG
- Cache
- Webpack, バンドル・ビルドツール
- npm, パッケージマネージャ
- Virtual DOM
- ESLint
- HTML, CSS
- JS, Node.js, TS
- React, Vue,...
- Next, Nuxt
- Webアクセシビリティ
- パフォーマンス最適化
- BFF
- Jamstack
- 認証
- Cookie
- オブジェクト指向UI
- オブジェクト指向プログラム
- 関数型プログラミング
- Storybook, UI snapshot
- test
- CI/CD
- Error tracking
ツールの使い方を知っていることと概念を理解していることはまた別だからな...そこの境界線も難しい。
そもそもHTML/CSS/JavaScriptだけでも広大だからな...
基礎ってなんだ?有名なやつを眺めてみる
他の記事ではほとんどがこんな感じで「HTML/CSS/JS、JSライブラリを一通り学びましょう!それが終わったらAdvancedな内容に進みましょう!」という風に書いてある。自分もその流れで勉強しているからなんともいえないが、なんか違う気がするんだよなあ
過去の自分に読ませたいZenn本の構想をしてみる。ハンズオンしながらフロントエンドの基礎知識のindexingができるイメージ。
『ポケモン図鑑アプリを育てて、フロントエンドの基礎知識をゲットだぜ!』
HTML/CSS/JavaScript/React/TypeScriptの基礎知識を前提とする。
第一章
ポケモンAPIをクライアント側で叩いて好きな6体を表示するだけのアプリ。6体の指定はハードコーディングする。
学ぶこと
- Web API(REST)
- HTTP(サーバーとクライアントの区別)
- 宣言的UI
- Tailwind CSS。CSS in JSやCSS Moduleとの違いや、それぞれのメリデメなどの整理。
- Suspence
第二章
第一章で作ったやつのSSR、SSG版をそれぞれ作ってVercelにデプロイする。クライアント側でやることを減らしてパフォーマンスを改善するという基本的な方針を理解する。
学ぶこと
- Next.js, Vercel
- SSR, SSG
- CDN, Cache
- Server Component
第三章
認証機能をつけてアカウントごとに6体を選べるようにする。「だったらSSGが最強じゃん!」ってなったあとにSSGでできないことを学ぶためにアプリをインタラクティブにする。バックエンドはFirebaseで作る。
学ぶこと
- 認証(JWT?)
- Firebase, Firestore(NoSQL), Cloud Functions?
- Form
- Global State
第四章
わざと3章までのUIをイマイチにして、それを改善していく。モデルを意識させるために、1つのアカウントで複数のパーティを作れるようにして、ユーザープロフィールを編集できるようにする。
学ぶこと
- オブジェクト指向UI
- 画像のアップロード
- 画像最適化
- Storybook
- Container/Presenter Pattern
- UI libraryのどれか(執筆しやすいTailwindを使いたいのでdaisyとか?)
第五章
次からプラットフォーム型のアプリになっていくので、アプリが大きくなる前に開発体制を整える。
学ぶこと
- ESLint(Next.jsのデフォルトから更に盛り込んでいく)(Prettierだけは最初からやっておく。無いと辛いので。)
- Testの種類と使い所
- CI/CD(GitHub Actions, Vercel)
- Error Tracking
第六章
好きなパーティを作って公開できるプラットフォームにする。あえてRESTのつらみが生じるようなUIにしてGraphQLに変える。ユーザーの交流を想定してアプリっぽいことをいろいろ盛り込む。
学ぶこと
- GraphQL
- SEO(というかOGPの設定など)
- Dynamic OG Image
- PWA
- ......