puku0x.dev
Scullyでブログ作成 Friday, June 5, 2020
#angular
#scully

Scully とは

Scully(スカリー)は Angular 用の静的サイトジェネレーターです。同様のものには GatsbyGridsome などがあります。

Scully を利用することでページをプリレンダしたり、Markdown ファイルからブログを作成したりできます。

Angular Universal との違い

Scully は内部で Puppeteer を利用して静的ページを生成しています。Angular Universal のような SSR ではなくブラウザで実行した結果をそのまま使っているため isPlatformServer() で処理を分岐させる必要がなく、気軽に Angular アプリケーションにプリレンダリングを導入できるのが利点です。

導入

ng new で新規アプリケーションを作成します。

ng new my-app --routing

ng add で Scully を追加します。

ng add @scullyio/init

ng generate でブログ用のファイルを追加します

ng g @scullyio/init:blog

設定

デフォルトではシンタックスハイライトが含まれないため追加しておきましょう。

import { ScullyConfig, setPluginConfig } from '@scullyio/scully';

setPluginConfig('md', { enableSyntaxHighlighting: true });

export const config: ScullyConfig = {
  projectRoot: './src',
  projectName: 'my-app',
  outDir: './dist/static',
  routes: {
    '/blog/:slug': {
      type: 'contentFolder',
      slug: {
        folder: './blog',
      },
    },
  },
  defaultPostRenderers: ['seoHrefOptimise'],
};

seoHrefOptimise は Scully がプリレンダする HTML 内のリンク URL に末尾スラッシュ / を追加するプラグインです。SEO 対策に必要です。

開発

Scully を用いたブログの開発では

  • Angular アプリケーションの更新
  • 記事の更新

の二つを同時に動かす必要があります。

ng serve の代わりに ng build の watch モードを使うのをお勧めします。

npm run build -- --watch

そして別ターミナルで Scully を watch モードで起動します。

npm run scully -- --watch

この状態で http://localhost:1668 を開くと開発中のアプリケーションを静的ファイルが生成された状態で見ることができます。

現在は自動リロード機能に不具合があるため、変更を反映するには手動でリロードする必要があります。

ビルド

記事を公開する準備ができたら Markdown ファイルのメタ情報に published: true を追加しましょう。

---
title: blog
description: sample
published: true
---

アプリケーションをビルドしましょう。

npm run build -- --prod
npm run scully

デプロイ

Netlify や Firebase Hosting などを使ってブログをデプロイしてみましょう。

Scully を使う場合は ng deploy が使えないことに注意してください(ng build --prod 実行後すぐにデプロイされてしまうため)。また、History API を使ったルーティングの際に必要な URL リライトの設定は必要ありません。

まとめ

Scully の登場で Angular を使って JAMstack なブログを作ることも簡単になったと思います。今はまだアルファ版ですが今後の発展が楽しみです。

次の投稿
Scully で PWA
前の投稿
こんにちは