mcpField
A
angular-ssr

angular-ssr

github.com/oguzhan18開発7168 回インストール31 週間前に更新
リポジトリ

angular-ssr について

Angular 21 のサーバーサイドレンダリング、ハイドレーション、プリレンダリングを扱う開発者向けリファレンススキルです。現在の設定方法や、ルートごとのハイブリッドレンダリングを案内します。

主な機能

  1. 01Angular CLI による SSR 設定
  2. 02クライアントおよび増分ハイドレーション
  3. 03ルート単位のハイブリッドレンダリング
  4. 04@defer による遅延読み込み
  5. 05ブラウザーとサーバーの判定
  6. 06TransferState によるリクエスト再利用

活用シーン

  1. 01Angular アプリへの SSR 導入
  2. 02増分ハイドレーションの設定
  3. 03ルートごとのレンダリング方式の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-ssr

インストール後、Claude Code で/angular-ssrを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/discussions/
_INDEX.md
references/docs/
_INDEX.md
references/issues/
_INDEX.md
references/releases/
_INDEX.md

詳細

@angular/ssr(サーバーサイドレンダリング)

バージョン: Angular 21(2025) タグ: SSR、ハイドレーション、事前レンダリング、SEO、Angular Universal

参考資料: SSR ガイド • ハイドレーション • @angular/ssr

API の変更点

このセクションでは、最近のバージョン固有の API の変更点について説明します。

  • 新機能:インクリメンタルハイドレーション — すべてを一度にではなく、コンポーネントを段階的にハイドレートします ソース

  • 新機能:ハイブリッドレンダリング — ルートごとにレンダリングモードを設定できます ソース

  • 新機能:provideClientHydration — イベントのリプレイに対応した最新のハイドレーション設定

  • 新機能:遅延可能ビュー(@defer) — SSR に対応しながらコンポーネントを遅延読み込みします

  • 新機能:ngSkipHydration — 特定のコンポーネントのハイドレーションをオプトアウトします

  • 非推奨:Angular Universal — @angular/ssr に移行してください

ベストプラクティス

  • CLI で SSR を有効にします
ng add @angular/ssr

# Or create new project with SSR
ng new my-app --ssr
  • クライアントハイドレーションを有効にします
import { provideClientHydration } from '@angular/platform-browser';

export const appConfig: ApplicationConfig = {
  providers: [
    provideClientHydration()
  ]
};
  • パフォーマンス向上のため、インクリメンタルハイドレーションを使用します
import { provideClientHydration, withIncrementalHydration } from '@angular/platform-browser';

export const appConfig: ApplicationConfig = {
  providers: [
    provideClientHydration(withIncrementalHydration())
  ]
};
  • 遅延読み込みには @defer を使用します
@Component({
  template: `
    @defer (on viewport) {
      <heavy-component />
    } @placeholder {
      <div>Loading...</div>
    }
  `
})
export class MainComponent {}
  • isPlatformBrowser を使用してブラウザー固有のコードを処理します
import { PLATFORM_ID, Inject } from '@angular/core';

constructor(@Inject(PLATFORM_ID) private platformId: Object) {
  if (isPlatformBrowser(this.platformId)) {
    // Browser-only code
  }
}
  • TransferState を使用して HTTP リクエストの重複を防ぎます
import { TransferState, makeStateKey } from '@angular/platform-browser';

@Injectable()
export class DataService {
  constructor(private http: HttpClient, private transferState: TransferState) {}

  getData() {
    const DATA_KEY = makeStateKey('DATA');
    
    if (this.transferState.hasKey(DATA_KEY)) {
      return of(this.transferState.get(DATA_KEY, []));
    }
    
    return this.http.get('/api/data').pipe(
      tap(data => this.transferState.set(DATA_KEY, data))
    );
  }
}
  • DOM を操作するコンポーネントではハイドレーションをスキップします
@Component({
  selector: 'app-third-party',
  host: {
    'ngSkipHydration': 'true'
  }
})
export class ThirdPartyComponent {}
  • ルートごとにハイブリッドレンダリングを設定します
import { RenderMode, ServerRoute } from '@angular/ssr';

export const serverRoutes: ServerRoute[] = [
  {
    path: 'dashboard',
    renderMode: RenderMode.Client
  },
  {
    path: 'blog/:slug',
    renderMode: RenderMode.Server
  },
  {
    path: 'about',
    renderMode: RenderMode.Prerender
  }
];
  • サーバーサイドのロジックには platform-server を使用します
import { isPlatformServer } from '@angular/common';

constructor(@Inject(PLATFORM_ID) platformId: Object) {
  if (isPlatformServer(platformId)) {
    // Server-side only
  }
}

コメント