フロントエンド何も知らない状態から、Next.jsでポートフォリオサイトを作るまで勉強したことのメモ

背景
- 新しい技術を勉強したい
- 最近AIとUX両方扱えるような人材が世の中的に & 個人の経験によりこれからより希少性が高くなってきそうな感覚がある
- ChatGPTや周辺技術の進化によりフロントエンド学びやすくなっているのではないか
→ 自分でもフロントエンドやUXについての理解を深めるために & 新しい技術を学びたい気持ちを満たすために、モダンなフロントエンドを勉強してみよう
→ 自分に取って役に立つ、かつ難易度的にちょうど良さそうなポートフォリオサイトから作ってみる
参考:

インプット
Reactチュートリアル
確実に必要になりそうなReactのチュートリアルをやった。そもそもCSSもHTMLもJSもよくわかってないことに気づく。あと素のReactで実装するのは大変そうと理解した。
動画による全体的なインプット
そもそも何がわかってないのかわからないので、動画で広くインプットした。しまぶーさんの動画がわかりやすく、カバレッジも広かったので、ざっくり下記のプレイリストの動画を見た。(10時間分くらい?)
各技術が何のために使われるのか、詳しい人からみて、初心者にはどの技術がおすすめなのかなどがわかった。
- CSS基礎
- HTML & CSSレイアウト
- モダンJavaScript
- Tailwind CSS
- Next.jsと一緒に学ぶReact講座
他の方の実装
Next.jsをどうやって使うと良いのか知るため & 世の中のポートフォリオサイトってどんな実装構成になっているか漁ってみた。とくにcatnoseさんのコードはCloneしてCopilot chatにかけながら理解した。
フロントエンドの勉強の仕方
Tailwind CSS
便利だが、各コンポーネントに奔放に書いていいのだろうか?お作法を知りたくていくつか調べた
↓
大丈夫らしい
Figma
モックを作るためにFigmaも勉強した。多機能でわくわくするが難しい
CSS grid & flex
fonts
UIコンポーネント

Next.jsを動かす
まず、公式ドキュメント見ながら、Next.jsを動かしてみる。その中で気になった内容はまとめる
環境構築
App Router vs Pages Router
今回は未来のデファクトになりそう & 現在recommendされているapp routerを選択した。

Copilot
GitHub Copilotの設定も併せてしておく

モックアップの作成
上記サイトのデザインを参考につくっていく。まずモックアップをFigmaで実装した。

ポートフォリオサイト
tailwind css等を学び、レポジトリを参考に実装した。デザインがまだほとんど模倣状態なのであとで改修したい。
参考にしたRepository

Blog欄の作成
zennやnoteで書いたブログを、ポートフォリオサイトに集約したい。
RSSで取得して、整形し、リンクにするのが楽そうなのでこれで進める。
できました
参照したブログ
RSSから情報を抽出し、json形式にする
参照した親の要素を継承したくないときは下記を利用する

勉強した感想・所感
免責: まだ、静的サイトを作った上での感想に過ぎない
- アニメーション・大規模システムでの開発・セキュリティなどプロダクションレディな状況をを加味した・チーム開発等をしたら、もっと難しさと向き合う必要がありそう
- 学んで良かったこと
- 他のエンジニアが話していることがわかるようになった
- フロントエンドで気にするところがどんな部分なのか
- stateの持たせ方
- SSR, SSGなど
- フロントエンドで気にするところがどんな部分なのか
- やりたいことのアイディアが広がった
- どういうアイディアなら実装が簡単で、何なら大変かちょっとわかるようになった
- StreamlitやGradioなどフレームワークではやりづらいことも、実装したらいいやと思えるようになった
- 他のエンジニアが話していることがわかるようになった
- 気づいたこと
- 勉強のしやすさ
- 他の人のコードを参考にしやすい。
- Next.jsというフレームワークに乗っているなら、どこを見ればいいか大体わかる
- npm run devでlocalで動かせるし、書き換えるとすぐに結果が反映される(MLなら計算資源・データを用意し、学習を待つ必要がある)
- ML系に比べ、Zennなどにたくさん情報が落ちている
- 他の人のコードを参考にしやすい。
- 一方で流れが速いので、今何が主流かを追うのが難しい(ex. App Router vs Pages Router)
- 静的サイトを作ることは簡単になっていると感じた
- TailwindCSSなど、簡単にコンポーネントを作れる技術の発展
- Vercelのような簡単にデプロイできるサービスの登場
- 認証などは全く別の技術だが、フロントを触ることで関心を持つようになる
- 他にもデザインや、Figmaなど
- 勉強のしやすさ

設計について
- AIにばこばこコードを書いて貰って、これってどうやって保守するんだと気になり設計などを勉強した
- フロントエンドが難しくなってる理由
- ユーザ操作の複雑化(操作・入力バリデーションの増加・リッチなUI)
- 画面状態の複雑化
- 複数状態の組み合わせ
- フロントエンドは、ユーザへの表示と操作による状態遷移を達成させる
- ユーザがしたと思ったことを画面に表す
- フロントエンドの設計とは、画面の設計 + 画面の奥にあるソフトウェアをどのように組み立てるという二つが存在する
- OOPのような既存の設計が利用出来る
- 表示・操作・状態を分けるなど
- UIパーツの設計方法論にはAtomic Designなどが存在する
- OOPのような既存の設計が利用出来る
- クリーンアーキテクチャ的な思考も活用できそう
- 例えばUI, View, Controller, Stateの依存方向を一方向にするなど
- ディレクトリ構造と依存方向を揃える
Refs

テストについて
- テストの効能
- 動作確認のフィードバックが高速になる
- 保守のための機能を保証する
- 仕様書が役に立つ
- テストの種類
- ビジュアルリグレッション
- Chromaticなどが利用出来る
- インタラクションテスト
- Storybookのinteraction testsを利用
- ロジックテスト
- ビジュアルリグレッション
Storybookについて
- コンポーネントを生成することが出来る
- プロダクトに組み込まなくても独立した環境でコンポーネントの開発が出来る
- 開発環境として、品質検査として、コミュニケーションツールとして使っている

個人開発について

Figmaについて