0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CSSプロパティをまとめた辞書アプリをNext.jsで作ってみた

Last updated at Posted at 2025-08-03

1. はじめに

Web制作やコーディングをしていると、ふと「このCSSプロパティ、どう書くんだっけ?」と思って調べること、ありませんか?
私は制作のたびに flex や position などをGoogleで検索し直していて、「また調べてる…」と自分でも苦笑いするくらい、効率が悪いなと感じていました。

そこで、「必要なときにサッと調べられて、しかも見やすい辞書があれば絶対便利だよな」と思い立ち、自分と同じ悩みを持つ人のために CSSプロパティ辞書アプリ を作ることにしました。

最初は React(Vite)で作っていたのですが、もっとSEOを強化して検索からも見つけてもらえるように、そしてスマホでも快適に使えるようにPWA対応をしっかり整えるため、Next.js に移行しました。

この記事では、このアプリの概要から、Next.jsでの実装ポイント、開発中の工夫や苦労、そして今後の展望までをまとめてご紹介します。


2. アプリの概要

  • 名称:CSS Dictionary
  • URLhttps://www.css-dictionary.com
  • 機能
    • CSSプロパティのキーワード検索
    • カテゴリ別一覧
    • プロパティ詳細(説明・シンタックス・サンプル)
    • 逆引き機能
    • CSSテクニック集
    • お気に入り登録・履歴機能
    • PWA対応(ホーム画面追加&オフライン利用可能)

スクリーンショット 2025-08-03 14.06.05.png


3. 技術スタック

  • フロントエンド:Next.js(App Router)
  • スタイリング:Tailwind CSS
  • データ管理:ローカルJSON
  • ホスティング:Vercel
  • PWAnext-pwa
  • SEOmetadata API + sitemap + robots.txt

4. 実装ポイント

4-1. データ管理(JSON)

CSSプロパティの情報はJSONで管理しています。
これにより、データの追加・修正が容易で、ビルド時に静的生成(SSG)できます。

{
  "name": "flex",
  "category": "レイアウト",
  "syntax": "flex: <flex-grow> <flex-shrink> <flex-basis>;",
  "description": "フレックスボックスでアイテムの伸縮や配置を設定します。",
  "example": "flex: 1 0 auto;",
  "tips": "flex: 1; で均等に並べやすい",
  "common_mistakes": [
    "親要素にdisplay:flexが必要",
    "flex-directionと混同しやすい"
  ],
  "id": "flex"
}

4-2. 静的生成(SSG)

Next.js の generateStaticParams を使い、プロパティごとの静的ページをビルド時に生成しています。
これにより、すべてのプロパティページがあらかじめ HTML として生成され、表示速度や SEO 効果が高まります。

export async function generateStaticParams() {
  return properties.map((p) => ({ id: p.id }));
}

4-3. SEO 設定

Next.js の generateMetadata を使って、各ページごとに <title><meta description> を動的に設定しています。
これにより、検索結果に適切なタイトルと説明文が表示され、SEOの効果が高まります。

export function generateMetadata({ params }) {
  const prop = properties.find(p => p.id === params.id);
  return {
    title: `${prop.name} | CSS Dictionary`,
    description: `${prop.name} の使い方とサンプルコードを解説`,
  };
}

さらに、next-sitemap を利用して sitemap.xml を自動生成し、Google Search Console に登録しています。
これにより、新しいプロパティページも素早くインデックスされます。

4-4. PWA 対応

next-pwa を導入し、PWA(Progressive Web App)として動作するようにしました。
これにより、スマホのホーム画面に追加して、オフライン環境でも利用できます。

const withPWA = require('next-pwa')({
  dest: 'public',
  register: true,
  skipWaiting: true, // 新しいバージョンを即時反映
});
module.exports = withPWA({
  // その他の Next.js 設定
});

skipWaiting: true を設定することで、新しいバージョンの Service Worker が即座に有効になり、キャッシュ更新のタイムラグを防げます。

4-5. お気に入り機能

お気に入りは localStorage に保存し、カスタムフック useFavorites で管理しています。
この仕組みにより、ブラウザを閉じてもお気に入り状態が保持されます。

export function useFavorites() {
  const [favorites, setFavorites] = useState<string[]>([]);

  const addFavorite = (id: string) => {
    const updated = [...favorites, id];
    setFavorites(updated);
    localStorage.setItem('favorites', JSON.stringify(updated));
  };

  return { favorites, addFavorite };
}

お気に入りページでは、このフックで保存したデータを一覧表示し、プロパティ詳細ページへのリンクを提供しています。

5. 開発で工夫したこと

  • プロパティ情報を JSON で管理
    データの追加・修正が容易になり、構造のシンプル化を実現。
  • 静的生成(SSG)で SEO と表示速度を両立
    すべてのプロパティページを事前生成し、高速かつSEOに有利な構成に。
  • 逆引き機能を実装
    「やりたいこと」から適切なCSSプロパティを探せる逆引き検索機能を追加。
    例:「テキストを中央寄せしたい」→ text-align, justify-content などを提案。
  • CSSテクニック集を実装
    実務や学習で役立つCSSテクニックをまとめたページを用意。
    グラデーション背景、ホバーアニメーション、Flexboxレイアウト例など、コード付きで掲載。
  • PWA 対応でオフラインでも利用可能に
    スマホのホーム画面に追加して、オフラインでも辞書機能が使える。
  • キャッシュ更新問題を解決
    skipWaiting: true と更新通知 UI の導入で、最新バージョンが即時反映されるようにした。

6. 公開と今後の展望

今後追加予定

  • プロパティ使用例の充実
  • 逆引き機能の検索精度向上(類義語や複数条件対応)
  • CSSテクニック集のコンテンツ拡充(アニメーション、CSS変数活用例など)

7. まとめ

React(Vite)から Next.js へ移行することで、SEO と PWA 対応が容易になり、
CSS 辞書アプリとしての価値を高めることができました。
さらに、逆引き検索やCSSテクニック集といった実務で役立つ機能も搭載し、
日常のコーディングをよりスムーズにするツールになっています。

Web 制作の現場や学習で役立つツールとして、今後も改善を続けていきます。
ぜひ試して感想をいただけると嬉しいです!

▶ アプリはこちらhttps://www.css-dictionary.com
▶ X(Twitter)はこちらhttps://x.com/hello__world_0

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?