2
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?

DBもサーバーも使わない。microCMSだけで短縮URL基盤を作る

Last updated at Posted at 2025-12-03

この記事は、【 microCMS Advent Calendar 2025 】の1日目の記事です。

こんにちは。tampopo256です。
今年もアドベントカレンダーの時期がやってきました。
(昨年はサボって書かなかったのですが...)

今回はmicroCMSを使って短縮URLサービスでも作ろうと思います。

microCMSとは

APIベースの日本製ヘッドレスCMS「microCMS」とは?
ヘッドレスCMSはヘッド(表示面)がなく、APIによってコンテンツを配信するのが特徴。
サイト全体ではなくコンテンツ単位で管理、ノーコードでスピーディーに編集。

従来のCMS=サイト全体を管理

従来のCMSはコンテンツの管理に加えて、表示面がセットになっています。管理にはサーバーやデータベースなど専門>知識が必要になります。
ヘッドレスCMS=コンテンツを管理

コンテンツをAPIから取得しサイトやアプリ内の任意の箇所のみCMS化が可能。サイト自体はCMS外で管理するため、>柔軟性の高い運用ができます。

2024年に株式会社エイチーム(現:株式会社エイチームホールディングス)に買収されたので、サービスが改悪されるかと思いきや、毎月機能や修正リリースが入っていて今後に期待のサービスです。

なお、設立当初は "岐阜県多治見市" に本社があったのでご近所さんです。

なぜこれを今作るのか😕

アドベントカレンダーのプレゼントを見ていて、「よっしゃ作るか。」

と思ったら昨年度でした...

と思っていたら今年もありましたので、書きます。
リファのシャワーヘッドが欲しかった...

最近、Cloudflare Workersなどに頼り切っていて面白くないので、今回は以下の制約を設けます。
縛り開発ってやつですね。

⛔️ 制約

  1. フロントエンドは静的であること
  2. お金がかからないこと
  3. 非エンジニアでも短縮URLが容易に登録できること
  4. 誰でも簡単に真似できること

を元にやっていきます。

🛠️ 開発

まずは、microCMSにアカウント登録します。

スクリーンショット 2025-12-03 16.18.54.png

実は企業内でしか使ったことなかったので、個人のアカウントは初作成でした。

✅ コンテンツモデル設計(最小構成)

今回は 本当に最低限 にしました。
不要な情報は一切持ちません。

API ID:short-links

フィールド構成

フィールドID 用途
originalUrl テキスト リダイレクト先URL
enabled 真偽値 有効/無効

スクリーンショット 2025-12-03 17.03.38.png

そして重要なのが、

microCMS の「コンテンツID」そのものを短縮URLのパスとして使います

例:

  • コンテンツID:abc123
  • リダイレクト先:https://example.com
  • 短縮URL: https://r.example.com/?r=VHKgZ5

これにより 重複しないID管理 すら不要になります。

スクリーンショット 2025-12-03 18.12.47.png
また、microCMSならコンテンツIDを自分で設定することもできるので、任意の文字列にすることも簡単にできます。

追伸(2025/12/27)

microCMSのブログを漁っていたところ、以下の記事より1文字~60文字のコンテンツIDを指定できるようになったようです。

✅ セキュリティ方針

今回は ブラウザから microCMS API を直接叩く構成 なので、バックエンドや管理画面などは一切不要です。

✅ 挙動ルール(超シンプル)

今回の短縮URLは、次のルールで動作します。

状態 表示
レコードが存在しない 「見つかりません」
enabled = false 「見つかりません」
originalUrl が空 「見つかりません」
enabled = true & URLあり 301 リダイレクト

つまり:

「リンクが見つかった時だけリダイレクトし、それ以外はすべて Not Found」

という仕様です。
存在するかどうかを外部から推測しにくく、セキュリティ的にも安全です。

🌍 GitHub Pages 側の構成

リポジトリにindex.htmlを配置して、pagesで公開。
その後、独自ドメインを設定し公開。

短縮URLは
https://r.example.com/?r=<コンテンツID>
などで簡単に作れます。

📄 index.html

GitHub Pages に置く index.html はこれだけです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>Not Found</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <style>
    body {
      font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
      text-align: center;
      padding: 48px 16px;
      color: #333;
    }
  </style>
</head>
<body>
  <h1>見つかりません</h1>
  <p>指定されたリンクは存在しないか、無効化されています。</p>

  <script>
    (async () => {
      const SERVICE_DOMAIN = "village-se"; // 自身のものに変更
      const API_KEY = "C0vNh6hGUNitwPo4RmGeF1SEa5M2kl4z90Xf"; // 自身のものに変更

      // どの GET パラメータを slug として使うか
      // 例: https://example.com/?code=abc123 → code=abc123 を使う
      const TARGET_PARAM = "r"; // 好きな名前に変更してOK

      const params = new URLSearchParams(window.location.search);
      let slug = params.get(TARGET_PARAM);

      if (!slug) return;

      try {
        const endpoint =
          `https://${SERVICE_DOMAIN}.microcms.io/api/v1/short-links/${encodeURIComponent(slug)}`;

        const res = await fetch(endpoint, {
          headers: {
            "X-MICROCMS-API-KEY": API_KEY,
          },
        });

        if (!res.ok) return;

        const data = await res.json();

        if (!data.enabled || !data.originalUrl) return;

        // 取得できたURLにリダイレクト
        window.location.replace(data.originalUrl);
      } catch {
        // 何もしない(常に Not Found 表示)
      }
    })();
  </script>
</body>
</html>

運用方法

スクリーンショット 2025-12-03 18.17.03.png

  1. コンテンツIDを短縮パスとして決定
  2. originalUrl に転送先URLを入力
  3. enabled = true にする

完了

非エンジニアでも GUIだけで短縮URLを発行できます。

実運用して感じたメリット

  • DB不要
  • サーバー不要
  • 管理画面が最初から完成している
  • 権限管理も microCMS 任せ
  • 社内用短縮URLにも最適

⚠ 注意点

  • 高トラフィック用途には不向き
  • APIキーは 読み取り専用

クリック数などの分析をしたい場合は
別途ログ基盤(GA4 等)と併用が無難

✅ まとめ

microCMS は CMSというより軽量設定DBとしても使える

GitHub Pages と組み合わせることで
完全無料・完全静的な短縮URLサービスが構築できる

個人用・イベント用・社内用には十分すぎる構成

🎁 おわりに

無事に microCMS アドベントカレンダーにも一応貢献しつつ、一つサービスが完成しました。

2
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
2
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?