初心者がWeb開発を構造で整理してみた
cherieです。
半年前からWEBを中心にプログラミングの学習をしている初心者なんですが、学習を進めるにつれてぼんやりと必要な知識の構造化ができてきたので今回言語化してみました。
特別な発見ではないし、日々コードを書いている人なら当たり前に理解しているのはもちろんのうえ、まだまだ解像度や理解の不足が多々あります。
ただ、初心者の自分にとってはこの全体を構造化する作業が、理解を整理する上でかなり効果的だったので、
今自分が何を学習しているのか迷子になっている人や足りてない知識を確認したい人の助けになればいいかなと思います。
整理の方針
個人開発(インターン未経験)のみを行なっている初心者の視点です。
理解の階層(個のコードからシステム全体まで)を意識して整理しました。
コードを書く行為が、どの範囲・責務に属するのかを見渡せるようにした構成になっています。
WEB開発俯瞰図
├─ 1. 言語特性の理解
│ ├─ 構文・制御構造(if, loop, function, class)
│ ├─ 型・スコープ・オブジェクト指向・プロトタイプ・クロージャ
│ ├─ 標準ライブラリ(I/O / 文字列処理 / 日付 / 正規表現 / 例外)
│ ├─ 並行処理(goroutine / async / thread)
│ └─ メモリ管理・参照・GC
│
├─ 2. アルゴリズムとデータ構造
│ ├─ 基本アルゴリズム(sort, search, recursion)
│ ├─ データ構造(list, tree, graph, heap, map)
│ ├─ 計算量・Big O表記・最適化
│ └─ 応用(動的計画法・グリーディ・バックトラック)
│
├─ 3. データの扱い(データ設計・永続化)
│ ├─ データモデリング(エンティティ・正規化・リレーション)
│ ├─ データベース(SQL / ORM / トランザクション)
│ ├─ データ形式(JSON / CSV / YAML)
│ ├─ キャッシュ・インデックス・クエリ最適化
│ └─ データ処理基盤(ETL / バッチ / ストリーム処理)
│
├─ 4. データの流れとアプリケーション構造
│ ├─ クライアント → API → DB のリクエストフロー
│ ├─ HTTP / REST / GraphQL / WebSocket
│ ├─ 認証・セッション・トークン管理(JWT / OAuth2)
│ ├─ 状態管理とデータバインディング(React Hooks / Context / Zustand)
│ └─ バックエンド構造(Router, Controller, Service, Repository)
│
├─ 5. 設計パターン(クラス・オブジェクト構造)
│ ├─ 23のGoFパターン
│ ├─ 生成系:Factory / Builder / Singleton
│ ├─ 構造系:Adapter / Decorator / Composite / Proxy
│ └─ 振る舞い系:Strategy / Observer / Command / State
│
├─ 6. アーキテクチャパターン(アプリ全体構造)
│ ├─ MVC / MVVM / Clean Architecture
│ ├─ Repository / Layered / Service Locator
│ ├─ Event-driven / Microservice
│ └─ UI〜データ層を貫く責務分離・疎結合の仕組み
│
├─ 7. 設計思想・原則(思想・哲学)
│ ├─ SOLID原則(単一責任・依存逆転など)
│ ├─ クリーンアーキテクチャ(依存の方向と内向き制御)
│ ├─ DDD(ドメイン駆動設計)/ユビキタス言語
│ └─ Hexagonal / Onion / Ports & Adapters思想
│
├─ 8. パッケージ・フレームワーク・プラットフォーム(拡張基盤)
│ ├─ Web: FastAPI / Gin / Echo / Next.js / Express
│ ├─ フロントエンド: React / TypeScript / Tailwind CSS
│ ├─ バックエンド補助: SQLAlchemy / Prisma / Pydantic
│ └─ 汎用ユーティリティ(requests / logging / dotenv / axios)
│
├─ 9. ネットワークとセキュリティ(通信基盤)
│ ├─ TCP/IP・HTTP・DNS・SSL/TLS
│ ├─ 認証・認可(OAuth2 / JWT)
│ ├─ 攻撃対策(CSRF, XSS, SQL Injection)
│ └─ インフラ構成(ロードバランサ、Firewall、CORS)
│
├─ 10. 仮想化・クラウド環境(デプロイ・実行基盤)
│ ├─ コンテナと仮想化(Docker / Podman / Proxmox / VM)
│ ├─ オーケストレーション(Docker Compose / Kubernetes)
│ ├─ クラウド(AWS / GCP / Cloudflare / Vercel)
│ ├─ CI/CDパイプライン(GitHub Actions / Cloud Build)
│ └─ 環境変数・シークレット管理(dotenv / Vault)
│
├─ 11. テストと品質保証(検証基盤)
│ ├─ ユニットテスト(pytest / unittest / jest)
│ ├─ 結合テスト・E2Eテスト(Playwright)
│ ├─ モック・スタブ・依存注入(Mock / Fixture / DI)
│ ├─ 自動化(CI上でのテスト実行 / カバレッジ計測)
│ └─ 静的解析・Lint・型チェック(ESLint / MyPy / Ruff / Go vet)
│
└─ 12. チーム開発・運用(実務スキル)
│ ├─ 開発フロー・リリース管理 (Git / GitHub Flow / CI-CD)
│ ├─ コードレビュー・リファクタリング文化
│ ├─ Issue・ドキュメント管理
整理して見えたこと
多い!(笑)
自分が勉強を始めたときはすでにvibe codingが実用されており、私も最初から利用していたので1~7番は特に透明化されていたように感じます。
結局そこら辺の知識も必要だと気づくまでに随分かかってしまった・・・
設計パターン、アーキテクチャ論は最初はなにを言っているのかわからなかったなあ。できる人と開発してみたり本を読む中で少しだけ理解できたんですが、それだけでも今までのハテナが繋がった気がして、自分の中でいちばんのブレークスルーだったと思います。
勉強始めた頃は一つを学ぼうとすると無限に知らないことが出てきて正直気が滅入る時もありましたが、構造化して理解できると他の概念との繋がりも同時に意識できるので関連付けの効果で記憶の定着もしやすくなったし、何より楽しいですね。
今たりてないのは、全部と言いたいんですが、4,5,6,9,11は重点的にやっていかんといけんと思っとります。
「なんでpythonつかってるの?」とか聞かれても困ってしまうし。
言語特性と抽象的なパターン設計とが結びついてくるとまた変わってくるんでしょうね。
まとめ
今回の構造はあくまで一例で、人によって解釈が分かれると思うし解釈のレベルが低く感じる人もいると思います。
ですが構造化をするという行為は誰にとっても有用だと思うのでぜひ参考にしていただければ幸いです。
アドバイス、注釈はなんでも嬉しいのでコメント待ってます!