フロントエンドとバックエンド
Web開発やアプリ開発において、「フロントエンド」と「バックエンド」という言葉をよく耳にします。この章では、それぞれの役割と違い、使われる技術、そして実際の業務パターンについて解説します。
なぜ分かれているのか
Webアプリケーションは、大きく2つの領域に分かれます。
graph LR
subgraph フロントエンド
A[ブラウザ/アプリ]
end
subgraph バックエンド
B[サーバー]
C[(データベース)]
end
A <-->|HTTP/API| B
B <--> C
| 領域 | 役割 | 実行場所 |
|---|---|---|
| フロントエンド | ユーザーが見て操作する画面 | ユーザーのブラウザ/端末 |
| バックエンド | データの保存・処理・ビジネスロジック | サーバー |
この分離には理由があります:
- セキュリティ: 重要なデータや処理をサーバー側で管理
- パフォーマンス: 重い処理をサーバーで、軽い処理をクライアントで分担
- 保守性: 画面と処理を分けることで変更しやすくなる
フロントエンド技術
基本技術(必須)
どのフロントエンド開発でも使う基本技術です。
| 技術 | 役割 | 例 |
|---|---|---|
| HTML | 画面の構造を定義 | ボタン、テキスト、入力欄など |
| CSS | 見た目を装飾 | 色、配置、アニメーションなど |
| JavaScript | 動きを付ける | クリック処理、データ取得など |
フロントエンドフレームワーク
現代の開発では、JavaScriptのフレームワークを使うことが一般的です。
| フレームワーク | 特徴 | 主な用途 |
|---|---|---|
| React | コンポーネント指向、大規模開発向け | SPA、管理画面、複雑なUI |
| Vue.js | 学習コストが低い、日本語情報が多い | 中小規模サイト、社内システム |
| Angular | フルスタック、TypeScript標準 | 大企業のエンタープライズ向け |
| jQuery | 従来からある定番、シンプル | レガシーシステム、簡単な動き |
1年目のポイント: 現場で使っているフレームワークを学びましょう。どれを選ぶかは現場次第です。
SPAとMPA
フロントエンドには大きく2つのアーキテクチャがあります。
graph TB
subgraph "SPA(Single Page Application)"
S1[初回: HTML+JS一括取得]
S2[以降: APIでデータのみ取得]
S3[画面切替: JSで書き換え]
end
subgraph "MPA(Multi Page Application)"
M1[毎回: サーバーでHTML生成]
M2[画面切替: ページ遷移]
end
| 方式 | メリット | デメリット | 例 |
|---|---|---|---|
| SPA | 高速な画面遷移、リッチなUI | 初期読込が遅い、SEO対策が必要 | Gmail、Slack |
| MPA | SEOに強い、シンプル | 画面遷移が遅い | 従来のWebサイト |
バックエンド技術
サーバーサイド言語とフレームワーク
バックエンドの開発言語は多様です。現場によって使う技術が異なります。
| 言語 | 主なフレームワーク | 特徴 | よく使われる現場 |
|---|---|---|---|
| Java | Spring Boot, Struts | 大規模開発に強い、型安全 | 金融、基幹系、SIer |
| C# | ASP.NET, .NET Core | Microsoft製品と親和性高い | 業務システム、Windows系 |
| PHP | Laravel, CakePHP | Web開発の定番、学習コスト低 | Webサービス、CMS |
| Ruby | Ruby on Rails | 開発速度が速い、スタートアップ向け | Web系スタートアップ |
| Python | Django, Flask | AI/ML連携しやすい、シンプル | データ分析、API開発 |
| Node.js | Express, NestJS | JSで統一できる、リアルタイム通信 | リアルタイムアプリ、API |
| Go | Gin, Echo | 高速、並行処理に強い | マイクロサービス、インフラ |
1年目のポイント: 言語の優劣はありません。現場で使われている言語を習得することが大切です。
データベース
バックエンドはデータベースと連携してデータを管理します。
| 種類 | 代表例 | 特徴 |
|---|---|---|
| RDB(関係データベース) | MySQL, PostgreSQL, Oracle | 構造化データ、トランザクション |
| NoSQL | MongoDB, Redis, DynamoDB | 柔軟な構造、高速アクセス |
詳細は データベースの基礎 を参照してください。
フルスタックフレームワーク
フロントエンドとバックエンドを一つのフレームワークで開発できるものもあります。
主なフルスタックフレームワーク
| フレームワーク | ベース技術 | 特徴 |
|---|---|---|
| Next.js | React + Node.js | SSR/SSG対応、API Routes内蔵 |
| Nuxt.js | Vue.js + Node.js | Vue版のNext.js的存在 |
| Ruby on Rails | Ruby | MVC、scaffold、高速開発 |
| Laravel | PHP | Eloquent ORM、Blade テンプレート |
| Django | Python | 管理画面自動生成、堅牢 |
| ASP.NET MVC | C# | Razorテンプレート、Visual Studio連携 |
Next.jsの例
Next.jsでは、同じプロジェクト内でフロントエンドとAPIを開発できます。
my-app/
├── app/ # フロントエンド(React)
│ ├── page.tsx # トップページ
│ └── users/
│ └── page.tsx # ユーザー一覧ページ
├── app/api/ # バックエンド(API)
│ └── users/
│ └── route.ts # ユーザーAPI
└── package.json
graph LR
subgraph Next.js
F[フロントエンド<br/>React コンポーネント]
B[バックエンド<br/>API Routes]
end
F -->|fetch| B
B --> DB[(データベース)]
実際の業務パターン
現場では、様々な開発パターンがあります。自分がどのパターンで開発するのか把握しましょう。
パターン1: フロントエンドのみ開発
graph LR
subgraph 担当範囲
A[フロントエンド]
end
subgraph 別チーム/外部
B[既存API]
end
A -->|API呼び出し| B
特徴:
- 既存のAPIを使って画面を作る
- API仕様書を読んで連携する
- 画面設計・UIに集中できる
よくある現場:
- 大規模プロジェクトで分業している
- 外部サービスのAPIを利用する
- モバイルアプリ開発
パターン2: バックエンドのみ開発
graph LR
subgraph 別チーム
A[フロントエンド]
end
subgraph 担当範囲
B[API開発]
C[(データベース)]
end
A -->|API呼び出し| B
B --> C
特徴:
- API設計・実装に集中
- データベース設計も担当することが多い
- API仕様書を作成する側
よくある現場:
- マイクロサービス開発
- 複数クライアント(Web・モバイル)向けAPI
- データ処理・バッチ処理
パターン3: フロントエンドもバックエンドも開発
graph LR
subgraph 担当範囲
A[フロントエンド]
B[バックエンド]
C[(データベース)]
end
A --> B
B --> C
特徴:
- 機能全体を一人(または少人数)で担当
- 画面からデータベースまで一貫して理解
- 小回りが利く
よくある現場:
- スタートアップ・ベンチャー
- 小規模チーム
- 社内ツール開発
パターン4: フルスタックフレームワークで一体開発
graph LR
subgraph 担当範囲(Next.js/Rails等)
A[画面]
B[API/コントローラ]
C[モデル/DB]
end
A --> B --> C
特徴:
- 一つのフレームワークで完結
- 開発環境がシンプル
- チーム全員が同じ技術スタック
よくある現場:
- Webサービス開発
- プロトタイプ開発
- 中小規模のプロジェクト
技術選定の背景を理解する
なぜその技術が選ばれているか
現場で使われている技術には理由があります。
| 観点 | 選定理由の例 |
|---|---|
| 既存資産 | 過去のシステムとの互換性、既存ライブラリの活用 |
| チームスキル | メンバーが習熟している技術を選ぶ |
| 要件 | パフォーマンス、セキュリティ、スケーラビリティ |
| コスト | ライセンス費用、インフラ費用、学習コスト |
| エコシステム | ライブラリの充実度、コミュニティの活発さ |
1年目のポイント: 「なぜこの技術を使っているのか」を先輩に聞いてみましょう。技術選定の背景を知ることで、システム全体の理解が深まります。
技術の組み合わせ例
よくある技術スタックの組み合わせです。
| パターン | フロントエンド | バックエンド | データベース |
|---|---|---|---|
| JAMstack | React/Vue | Node.js/Go | MongoDB/PostgreSQL |
| LAMP | jQuery/Vue | PHP (Laravel) | MySQL |
| MEAN | Angular | Node.js (Express) | MongoDB |
| Java系 | React/Vue/Thymeleaf | Spring Boot | Oracle/PostgreSQL |
| .NET系 | Razor/React | ASP.NET Core | SQL Server |
| Rails系 | Hotwire/React | Ruby on Rails | PostgreSQL |
まとめ
覚えておくべきこと
- フロントエンド: ユーザーが見る画面(ブラウザ/アプリ側)
- バックエンド: データ処理・保存(サーバー側)
- 開発パターン: 現場によって担当範囲が異なる
- 技術選定: 現場の事情に応じて選ばれている
1年目にやるべきこと
- [ ] 自分の現場がどのパターンか把握する
- [ ] 使われている技術スタックを確認する
- [ ] 担当範囲(フロント/バック/両方)を明確にする
- [ ] 技術選定の理由を先輩に聞いてみる