ブログのスタイル変更ログ init - Bulma & テーマ導入 -

このサイトは、はてなブログをカスタマイズして構築しています。

このカテゴリではブログのカスタマイズの記録を記載していきます。

まずは初回なので全体的なセットアップからです。

テンプレート

GitHub - hatena/Hatena-Blog-Theme-Boilerplate

はてなブログはカスタマイズ用のテンプレートとして上記のリポジトリを公開してくれています。私もこれをベースに作成しています。

また、公式のヘルプもさっと一読しておくといいと思います。

デザインテーマ制作の手引き - はてなブログ ヘルプ

CSS フレームワーク

今回は、テンプレートに加えて CSS フレームワークを導入しています。

Bulma: Free, open source, and modern CSS framework based on Flexbox

Bulma を選択したのには、はてなブログとの相性がとかの理由はありません。tailwind 等でも良かったのですが、直近の仕事で使っていたのでサクッと使えるだろうと考えただけです。なんでも良いと思います。

ただ、後述しますが、はてなブログは添付できる CSS のサイズが大きく無いので、その辺りで使えないフレームワークが出てくるかもしれません。

Bulma のテーマ

Bulma のデフォルトから少し変えたかったので、テーマを適用しています。

以下の Themefisher のリポジトリから Free で利用できるテンプレートを利用しています。

Themefisher · GitHub

では、ここからは具体的な作業を見ていきます。

作業

はてなブログのテンプレートの環境をローカルに作る

GitHub - hatena/Hatena-Blog-Theme-Boilerplate

README に詳しい手順が書かれているので特筆すべき点はありません。(多くの方がここに関しては解説記事を書いていらっしゃるので、不明点があれば探してみるとよさそうです)

Bulma の導入

npm で Bulma をインストールします。

cd Hatena-Blog-Theme-Boilerplate/
npm install -D bulma

続いて、scss/boilerplate.scss の最後の行に以下を追記します。

@import 'bulma/css/bulma.min.css';

これで問題なく npm start できればここまでは OK です。

テーマを導入する

Themefisher の Bulma テーマのリポジトリは大体以下のようになっています。

└── source/
    └── scss/
        ├── style.scss
        └── templates/

そして style.scsstemplates ディレクトリ内のファイルを含む依存関係が記述されています。

例えば以下のテーマを見てもらえると感じが掴めると思います。 kross-bulma/source/scss/style.scss at main · themefisher/kross-bulma · GitHub

よって、お好みのテーマリポジトリをダウンロードし、 scss ディレクトリを丸ごと、 Hatena-Blog-Theme-Boilerplate/scss に上書きします。
同じファイル名のものは無いはずなので、両方のファイルが共存することになるはずです。

そして、テーマの style.scss の内容を、テンプレートの scss/boilerplate.scss の最終行に全てコピーします。そこまでできれば、 style.scss は削除してします。

ここまでで scss/boilerplate.scss には、Bulma とテーマの import 文が末尾に並んでいるはずです。

ビルド後の CSS の軽量化

ここまでで、おそらく Bulma とテーマのスタイルを使った開発ができていると思います。

しかし、この状態で npm run build すると分かるのですが、相当大きなサイズの CSS ファイルがビルドされてしまいます。 (少なくとも 200kb は超えていると思います)

以下のヘルプにある通り、はてなブログのデザインCSS は 64kb が上限です。
デザインCSSを記述する - はてなブログ ヘルプ

よって、このままではいくらスタイルをカスタマイズしても実際に適用することができません。

PurgeCSS の導入

PurgeCSS - Remove unused CSS | PurgeCSS

今回は PurgeCSS を使って軽量化します。簡単には実際に使ったスタイルのみをビルド対象に含めるというものです。

まずは npm で導入します。

npm install -D vite-plugin-compression
npm install -D @fullhuman/postcss-purgecss

続いて、使ったかどうかを判断するための HTML を配置します。
PurgeCSS はあくまで検査対象となる HTML 等を走査して、使われているスタイルを検出します。
はてなブログのスタイル開発においては、対象の HTML ははてなブログのデザインのページに直接記述しますが、ここではその HTML をローカルで管理することで PurgeCSS が検査できるようにします。(もっといい方法がありそうな気もしますが)

よって、以下のようにディレクトリとファイルを配置します。

.
├── blog/
│   ├── below_the_blog_title.html // Header の Below the blog title
│   ├── entry_sample.html // ここに関してはブログエントリーの HTML を開発者ツールでコピー
│   ├── footer.html // Footer
│   ├── html_in_entry_footer.html // Entry の HTML in entry footer
│   └── html_in_entry_header.html. // Entry の HTML in entry header
├── scss/
...

entry_sample.html だけは異なりますが、他は全て管理者メニューのデザインページのカスタマイズタブで設定できる HTML です。
entry_sample.html はコメントにある通り、開発者ツールでコピーしてきた実際のエントリーの HTML です。このエントリーにははてなブログが最初に用意する確認用のエントリーを使いました。(「あのイーハトヴォのすきとおった風・・・」から始まるものです。) また、これに関しては container class が追加 div のみを利用しています。 (エントリーの内容だけが必要なので、これで十分と判断しています)

最後に vite.config.js を以下のように変更します。

import autoprefixer from "autoprefixer";
import viteCompression from "vite-plugin-compression";
import purgecss from "@fullhuman/postcss-purgecss";

export default {
  plugins: [viteCompression()],
  build: {
    rollupOptions: {
      input: ["scss/boilerplate.scss"],
      output: {
        assetFileNames: ({ name }) => name,
      },
    },
    outDir: "build",
    cssMinify: true,
  },
  css: {
    devSourcemap: false,
    postcss: {
      plugins: [autoprefixer(),
        purgecss({
          content: ["blog/*.html"],
          safelist: [/^entry/, /^archive/, /^page/] // ここに関しては開発内容に合わせる
        }),
      ]
    }
  },
};

ここまでで npm run build を実行し、ビルド後の CSS ファイルが十分に軽量化されていれば成功です。

参考

ビルドされた CSS の内容を貼り付ける

特に説明は不要かもしれませんが、カスタマイズの Advanced -> Stylesheet に貼り付けます。 ヘルプにもありますが、レスポンシブ対応の CSS を書くことを心がけます。

まとめ

はてなブログのカスタマイズは多くの人が実施していて方法も様々だと思います。
私も現状こうしていますが、引き続きやり方は模索していきたいと思います。

以下は、実際にこのブログに適用している私のスタイルを管理するリポジトリです。この記事の内容時点のハッシュは 118b325 となります。

GitHub - MakeEverythingGames/hatena-blog-styles