Dev Study
← 解説「Angularとは — SPAをまるごと作れるフレームワーク」に戻る

サンプルコードで身につける: Angularとは — SPAをまるごと作れるフレームワーク

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1従来型サイトとSPAの違い

従来型はページを移動するたびにサーバーが新しいHTMLを丸ごと返します。SPAでは最初の1枚だけを受け取り、以降はJavaScriptが必要な部分だけを書き換えます。この違いが操作の滑らかさの差になります。

// ── 従来型のWebサイト ──
// ページ移動のたびにサーバーがHTMLを丸ごと返す
//   /list を開く    → サーバーが list.html を返す(画面全体を再読み込み)
//   /detail を開く  → サーバーが detail.html を返す(また再読み込み)

// ── SPA(Angularが作るもの)──
// 最初に1枚だけHTMLを受け取り、あとはJSが書き換える
//   初回アクセス    → index.html とJSを受け取る
//   /list に移動    → JSが画面の中身だけを一覧に書き換える
//   /detail に移動  → JSが画面の中身だけを詳細に書き換える
//   → 画面全体の再読み込みが起きないので操作が滑らか

2「一式揃っている」とはどういうことか

SPAを作るには画面部品・通信・ルーティングなど複数の道具が必要です。Angularはそれらを公式がまとめて提供するため、道具選びで迷わずに開発を始められます。チームでプロジェクトが違っても構成が似るのが実務上の利点です。

// SPAづくりに必要な道具と、Angularでの担当
//
// やりたいこと           Angularでの道具(すべて公式)
// ─────────────────────────────────────────────
// 画面部品を作る         コンポーネント(@Component)
// 値の変化を画面に反映   シグナル(signal)
// APIからデータ取得      HttpClient
// URLごとに画面を切替    Router
// フォーム入力の管理     Forms
// ビルド・開発サーバー   Angular CLI(ng コマンド)
//
// 他のライブラリを探して組み合わせる作業が最小限で済む

3Angularのコードを一目見てみる

詳細は後のレッスンで学ぶので、ここでは雰囲気だけつかみましょう。TypeScriptのクラスに @Component という印を付けると画面部品になる、というのがAngularの基本形です。この形がこれから何度も登場します。

import { Component } from '@angular/core';

// クラスに @Component を付けると「画面部品」になる
@Component({
  selector: 'app-hello',            // HTMLタグとしての名前
  template: '<h1>{{ message }}</h1>', // 表示する内容
})
export class Hello {
  message = 'はじめてのAngular';
}

// 今は「クラス + デコレータ = 画面部品」とだけ分かればOK

4バージョンの確認とリリースサイクル

Angularはおよそ半年ごとにメジャーバージョンが上がります。自分のプロジェクトのバージョンは ng version で確認できます。記事を読むときは、その記事がどのバージョン前提かを意識する習慣が大切です。

# プロジェクトのAngularバージョンを確認する
ng version

# 出力例(抜粋):
# Angular CLI: 20.1.0
# Angular: 20.1.2
# Node: 22.12.0

# リリースサイクルの目安:
#   ・約半年ごとにメジャーバージョンが1つ上がる
#   ・v17(2023年)以降は standalone が標準の書き方
#   ・古い記事の NgModule 前提のコードは「古い書き方」と判断してよい

5SPAのHTMLはほぼ空っぽ

Angularアプリの index.html を見ると、bodyの中にはタグが1つあるだけです。画面の中身はすべてJavaScriptが後から描き込むため、HTML自体はほぼ空で構いません。これがSPAという方式を最も分かりやすく物語っています。

<!-- Angularアプリの index.html(ほぼこれで全部) -->
<!doctype html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>MyApp</title>
  </head>
  <body>
    <!-- 中身はこのタグ1つだけ。ここにJSが画面を描き込む -->
    <app-root></app-root>
  </body>
</html>