ブログをはじめました:読みやすさにこだわった技術ブログの作り方

Astro と Markdown で、読み心地とスクロールの気持ちよさを大切にした技術ブログを作りました。設計で意識したことをまとめます。

Hiraoku2 分で読めます

青い椅子に座り、ノートとパソコンでブログを書き始める人の黒ペン風イラスト

技術ブログを書くための場所を、自分で作ることにしました。外部サービスも便利ですが、文字組みや配色、スクロールしたときの手触りまで自分で決められるのは、書く側にとっても読む側にとっても大きな価値があります。

目指したのは「長く読んでも疲れない」こと

技術記事は、コードと文章を行き来しながらじっくり読まれることが多いものです。そこで、次の 3 つを最優先にしました。

  • 紙のような背景色: 真っ白ではなく、少し温かみのあるアイボリーにして目の負担を減らす
  • ゆったりした行間: 日本語の本文は行間を 1.95 程度まで広げ、1 行の長さも 40 文字前後に抑える
  • 見出しはセリフ体: 本文はゴシック、見出しは明朝・セリフ体にして、文章の構造がひと目で分かるようにする

良いデザインは、読者に「読みやすい」と意識させないデザインだ。

技術スタック

用途 採用したもの
フレームワーク Astro
記事 Markdown / MDX(Content Collections)
コードハイライト Shiki
フォント Source Serif 4, Noto Serif JP, DM Sans, Noto Sans JP

Astro は静的な HTML を出力し、必要な場所にだけ JavaScript を足せるので、ブログのような「読むためのサイト」にはぴったりです。

Markdownの記事をAstroでHTMLにし、文字組みを整え、必要な演出を加える構成

図はサイトの役割を整理した概念図です。文字組みや演出の設定はビルド時に用意され、ブラウザで表示されます。

スクロールに合わせた演出

アイキャッチや見出しは、画面に入るとふわっと表示されます。仕組みはシンプルで、IntersectionObserver で要素が見えたらクラスを付けるだけです。

const io = new IntersectionObserver((entries) => {
  for (const entry of entries) {
    if (!entry.isIntersecting) continue;
    entry.target.classList.add('is-visible');
    io.unobserve(entry.target);
  }
});

document.querySelectorAll('[data-reveal]').forEach((el) => io.observe(el));

表示の変化は opacity と transform を CSS の transition で動かしています。

動きが苦手な人への配慮

OS の設定で「視差効果を減らす」を有効にしている人には、prefers-reduced-motion を見てアニメーションをすべて止めています。演出はあくまで「あると嬉しい」ものであって、内容を読む妨げになってはいけません。

これから

まずは週に 1 本を目標に、開発の中で学んだことを書いていきます。読んでくださった方の役に立てば嬉しいです。

ほかの記事も読む