💡

この記事では、Astroブログに実装したUX機能をコード付きで解説します。

はじめに

ブログのユーザー体験を向上させるため、以下の10機能を実装しました。

機能説明
読み進め位置保存次回訪問時に続きから読める
フローティングシェアモバイルでワンタップシェア
コードコピーボタンコードブロックにコピー機能
キーボードショートカットCmd+K で検索にジャンプ
トースト通知操作フィードバック表示
読書プログレスバー記事の読み進め度を可視化
目次スクロールスパイ現在読んでいるセクションをハイライト
印刷用スタイル記事の印刷最適化
ダークモード対応CSS変数によるテーマ切り替え
閲覧数トラッキングAstro DBによるカウント

1. 読み進め位置の保存

記事を途中まで読んで離脱した場合、次回訪問時に「続きから読みますか?」と提案する機能です。

// ReadingPositionSave.astro (一部抜粋)
const slug = window.location.pathname.split(/).filter(Boolean).pop();
const storageKey = `reading-position-${slug}`;

// スクロール位置を保存
window.addEventListener('scroll, () => {
 const percent = (scrollTop / docHeight) * 100;
 localStorage.setItem('storageKey, String(percent));
});

ポイント:

  • localStorage で位置を永続化
  • 24時間以内 & 10%以上読んでいた場合のみ復元を提案
  • 5秒後に自動でトーストを閉じる

2. フローティングシェアボタン

モバイルでスクロール時に表示されるフローティングボタンです。

User
User

スマホでシェアボタン押しにくいんだよね

Bot
Bot

フローティングボタンなら親指で届く位置に常に表示されます!

対応プラットフォーム:

  • X (Twitter)
  • LINE
  • リンクコピー

3. コードコピーボタン

すべての <pre> タグに自動でコピーボタンを追加します。

// CopyCodeButton.astro
document.querySelectorAll(pre).forEach((block) => {
 const button = document.createElement(button);
 button.textContent = Copy;
 button.addEventListener("click, async () => {
 await navigator.clipboard.writeText(block.textContent);
 button.textContent = Copied!;
 });
 block.appendChild(button);
});

4. キーボードショートカット

パワーユーザー向けのショートカット機能です。

ショートカット動作
Cmd/Ctrl + K検索にフォーカス
Escape検索からブラー
/検索にフォーカス

5. トースト通知システム

window.showToast() でどこからでも通知を表示できます。

// 使用例
window.showToast({
 message: "コピーしました", type: "success", // success, error, info, warning
 duration: 3000, });

まとめ

これらの機能は PostLayout.astro で統合されており、すべての記事ページで自動的に有効になります。

全コンポーネント一覧
  • ReadingProgress.astro
  • FloatingShare.astro
  • CopyCodeButton.astro
  • KeyboardShortcuts.astro
  • Toast.astro
  • ReadingPositionSave.astro
  • ViewCounter.astro

開発ロードマップ

1

Reading Progress & Position

localStorageを活用した軽量な実装で、サーバー負荷をかけずに読書体験を向上。

2

Interactive UI

フローティングボタンやトースト通知など、ユーザーのアクションに対して適切なフィードバックを返す仕組みを導入。

3

Analytics Integration

Astro DBを用いたプライバシー重視の閲覧数カウント機能を実装(次回解説)。

Astro DB Docs

Docs
Astro DB Docs

次回は閲覧数トラッキングの実装について詳しく解説します。