AI

OSSリンク短縮比較:Shlink vs YOURLS vs Kutt でURLを管理する

オープンソースラボ編集部2026年6月13日

OSSリンク短縮比較:Shlink vs YOURLS vs Kutt でURLを管理する

Bitly($8/月〜)・TinyURL・Rebrandlyなどの有料SaaSに依存せず、自社ドメインでURLを短縮・追跡・管理できるセルフホストOSSリンク短縮ツールは、マーケティング・ドキュメント管理・QRコード生成に欠かせません。Shlink(PHP製・REST API充実・リアルタイム統計)・YOURLS(PHP製・最古のOSS URLリダイレクター・WordPress統合)・Kutt(Node.js製・モダンUI・パスワード保護)の3つが2026年のOSSリンク短縮ツールの主要選択肢です。

セルフホストリンク短縮ツールを使う理由

  • 独自ドメイン: s.example.com/abc123のように自社ブランドのURLを発行
  • 完全な統計: クリック数・国・デバイス・ブラウザを自社サーバーで記録・分析
  • リンク期限設定: 一定期間後に無効化するリンクをマーケティングキャンペーンに使用
  • プライバシー: 訪問者データをBitly等のサードパーティに渡さない

主要ツールの概要

Shlink

2016年公開、PHP製のOSSです。GitHubスター3k+。REST APIとWebhook・リアルタイムクリック統計・QRコード生成が充実したOSS URLショートナーで、CLI/APIから短縮URLを管理できます。geo-IPによる国別クリック追跡・UTMパラメータ保持・カスタムスラッグに対応しています。

# docker-compose.yml: Shlink + Redis + MariaDB
version: "3.8"
services:
  shlink:
    image: shlinkio/shlink:stable
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      DEFAULT_DOMAIN: s.example.com
      IS_HTTPS_ENABLED: "true"
      DB_DRIVER: mysql
      DB_HOST: shlink-db
      DB_NAME: shlink
      DB_USER: shlink
      DB_PASSWORD: ${DB_PASS}
      REDIS_SERVERS: tcp://shlink-redis:6379
      GEOLITE_LICENSE_KEY: ${GEOLITE_KEY}  # GeoIPデータ用(無料登録)
      SHORT_URL_UNIQUE_VISITS_STATS_ENABLED: "true"
    depends_on: [shlink-db, shlink-redis]

  shlink-db:
    image: mariadb:10.11
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS}
      MYSQL_DATABASE: shlink
      MYSQL_USER: shlink
      MYSQL_PASSWORD: ${DB_PASS}
    volumes:
      - shlink_db:/var/lib/mysql

  shlink-redis:
    image: redis:7-alpine

volumes:
  shlink_db:
# Python: Shlink REST API で短縮URL・QRコードを自動生成
import requests
from typing import Optional
from datetime import datetime, timedelta

SHLINK_URL = 'https://s.example.com'
API_KEY = 'your-shlink-api-key'
HEADERS = {'X-Api-Key': API_KEY, 'Content-Type': 'application/json'}

def create_short_url(long_url: str, custom_slug: Optional[str] = None,
                     expires_days: Optional[int] = None,
                     max_visits: Optional[int] = None) -> dict:
    '''Shlinkで短縮URLを作成(カスタムスラッグ・有効期限・最大クリック数対応)'''
    payload = {
        'longUrl': long_url,
        'findIfExists': True,  # 同じURLが既に存在する場合は既存のものを返す
    }
    if custom_slug:
        payload['customSlug'] = custom_slug
    if expires_days:
        payload['validUntil'] = (datetime.now() + timedelta(days=expires_days)).isoformat()
    if max_visits:
        payload['maxVisits'] = max_visits

    resp = requests.post(f'{SHLINK_URL}/rest/v3/short-urls', json=payload, headers=HEADERS)
    data = resp.json()
    return {
        'short_url': data['shortUrl'],
        'short_code': data['shortCode'],
        'qr_url': f'{SHLINK_URL}/rest/v3/short-urls/{data["shortCode"]}/qr-code',
    }

def get_visit_stats(short_code: str) -> dict:
    '''短縮URLのクリック統計を取得(国別・デバイス別)'''
    resp = requests.get(
        f'{SHLINK_URL}/rest/v3/short-urls/{short_code}/visits',
        headers=HEADERS,
        params={'itemsPerPage': 100},
    )
    data = resp.json()
    visits = data['visits']['data']
    by_country = {}
    for v in visits:
        country = v.get('visitLocation', {}).get('countryName', 'Unknown')
        by_country[country] = by_country.get(country, 0) + 1
    return {'total': data['visits']['pagination']['totalItems'], 'by_country': by_country}

def bulk_create_campaign_urls(base_url: str, campaign: str, sources: list) -> list:
    '''マーケティングキャンペーン用にUTMパラメータ付き短縮URLを一括作成'''
    results = []
    for source in sources:
        utm_url = (f'{base_url}?utm_campaign={campaign}&utm_source={source}'
                   f'&utm_medium=email')
        result = create_short_url(utm_url, custom_slug=f'{campaign}-{source}')
        results.append({'source': source, **result})
    return results

YOURLS

2009年公開、PHP製のOSSです。GitHubスター11k+。最古のOSSリンク短縮ツールで、最も成熟したコミュニティとWordPress・Zapierプラグインエコシステムを持ちます。シンプルなPHP+MySQLで動作し、管理ダッシュボードでURLを一元管理できます。

# docker-compose.yml: YOURLS
version: "3.8"
services:
  yourls:
    image: yourls:latest
    restart: unless-stopped
    ports:
      - "80:80"
    environment:
      YOURLS_DB_HOST: yourls-db
      YOURLS_DB_NAME: yourls
      YOURLS_DB_USER: yourls
      YOURLS_DB_PASS: ${DB_PASS}
      YOURLS_SITE: https://s.example.com
      YOURLS_USER: admin
      YOURLS_PASS: ${ADMIN_PASS}
    depends_on: [yourls-db]

  yourls-db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS}
      MYSQL_DATABASE: yourls
      MYSQL_USER: yourls
      MYSQL_PASSWORD: ${DB_PASS}
    volumes:
      - yourls_db:/var/lib/mysql

volumes:
  yourls_db:

Kutt

2017年公開、Node.js/TypeScript製のOSSです。GitHubスター8k+。パスワード保護・有効期限・カスタムドメイン対応のモダンUI搭載OSSリンク短縮ツールで、Redisキャッシング・PostgreSQL永続化・APIトークン認証によるREST API提供が特徴です。

# docker-compose.yml: Kutt
version: "3.8"
services:
  kutt:
    image: kutt/kutt:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      DB_HOST: kutt-db
      DB_NAME: kutt
      DB_USER: kutt
      DB_PASSWORD: ${DB_PASS}
      REDIS_HOST: kutt-redis
      REDIS_PORT: 6379
      JWT_SECRET: ${JWT_SECRET}
      DOMAIN: https://s.example.com
      DEFAULT_DOMAIN: s.example.com
      LINK_LENGTH: 6
      DISALLOW_ANONYMOUS_LINKS: "true"  # 認証済みユーザーのみ短縮URL作成可能
      USER_LIMIT_PER_DAY: 50
      MAIL_HOST: smtp.example.com
      MAIL_PORT: 587
      MAIL_USER: ${SMTP_USER}
      MAIL_FROM: noreply@example.com
      MAIL_PASSWORD: ${SMTP_PASS}
    depends_on: [kutt-db, kutt-redis]

  kutt-db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: kutt
      POSTGRES_USER: kutt
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes:
      - kutt_db:/var/lib/postgresql/data

  kutt-redis:
    image: redis:7-alpine

volumes:
  kutt_db:

機能比較表

比較項目ShlinkYOURLSKutt
REST API✅ 充実
QRコード生成△(プラグイン)
パスワード保護
訪問統計✅ geo-IP
GitHub Stars3k+11k+8k+

リンク短縮ツールはその他カテゴリ/categories/miscのプロジェクト管理ツールと統合してドキュメントリンク・Wiki URLを短縮してQRコード付きで配布します。マーケティングカテゴリ/categories/marketingのWebアナリティクス(Plausible/Umami)とShlink統計を組み合わせてキャンペーンリンクのクリック率とサイト流入を包括的に計測します。

FAQ

Q. ShlinkのQRコード生成APIでダウンロード可能なQRコード画像を取得するには?

A. ShlinkのREST APIエンドポイントGET /rest/v3/short-urls/{shortCode}/qr-codeでQRコード画像を直接取得できます。パラメータ: ?size=300(サイズ: px)・?format=png(フォーマット: png/svg)・?margin=10(余白px)・?color=000000(QRコード色HEX)・?bgColor=ffffff(背景色HEX)・?errorCorrection=L(エラー訂正レベル: L/M/Q/H)。実装: requests.get(f'{SHLINK_URL}/rest/v3/short-urls/{code}/qr-code?size=400&format=png&errorCorrection=H')でバイナリ画像を取得→open('qr.png', 'wb').write(resp.content)で保存。SVGフォーマット: format=svgでベクター画像取得→印刷物・看板用途に最適(解像度依存なし)。動的QRコード: 短縮URL自体のリダイレクト先を後から変更できる(ShlinkのPATCH /rest/v3/short-urls/{shortCode})→QRコードを印刷した後でもリンク先変更が可能。

Q. YOURLSのAPIでSlack BotからURLを短縮するには?

A. YOURLS署名APIでSlack Botのアクションハンドラーからリンクを短縮します。YOURLS API設定: user/plugins/ディレクトリにapiプラグインがデフォルト有効。APIキール生成: 管理ダッシュボード→User管理→APIキー生成。Slack Bot実装(Python Bolt): POST https://s.example.com/yourls-api.phpaction=shorturlurl=長いURLkeyword=カスタムスラッグsignature=APIキーを送信→JSON形式でshorturl返却→SlackメッセージにURLを埋め込んで返答。署名ベース認証: signatureパラメータにAPIキーを渡す方式(タイムスタンプ署名も対応: md5(タイムスタンプ+APIキー)timestampsignatureで送信)→セキュアな自動化に対応。

Q. Kuttでチームメンバーにカスタムドメインを割り当てるには?

A. KuttのAdmin機能でカスタムドメインをユーザーに割り当てて、チームメンバーが独自ドメインのURLを発行できる設定が可能です。設定: ①管理者ダッシュボード→Domains→Add Domain②custom.example.comのDNS設定: KuttサーバーのIPにAレコード→Let's Encryptで自動SSL③ユーザーのCustom Domain設定でそのドメインを選択→そのユーザーが作成するURLはすべてcustom.example.com/xxxxx形式で発行。マルチテナント: 部署別・クライアント別にカスタムドメインを割り当て→ブランド別のURLを管理→統計もドメイン別に分離。API: POST /api/v2/linkscustomDomain: custom.example.comを指定して特定ドメインのURLを発行。

Q. Shlink・YOURLS・Kuttのどれを選ぶべきですか?

A. REST API・QRコード・geo統計が必要ならShlink最大のプラグインエコシステム・WordPress連携・PHP/MySQL環境ならYOURLSパスワード保護・モダンUI・チーム利用・PostgreSQLならKuttが向いています。Shlink優位: ①OpenAPI仕様の充実したREST API→自動化・CI/CD統合が容易②geo-IPによる国別クリック追跡→マーケティング分析③マルチドメイン対応(1Shlinkインスタンスで複数短縮ドメイン管理)④Webhookで短縮URL作成・クリックイベントをn8n・Zapierに送信。YOURLS優位: ①2009年から続く最成熟のOSS・プラグイン200本以上②WordPress用の公式プラグインで記事内のURL短縮が1クリック③ダッシュボードでURLを一覧・検索・タグ付け。Kutt優位: ①URLにパスワード設定→限定公開ファイル配布・社内文書共有②有効期限付きURL→セキュアなダウンロードリンク③カスタムドメインのマルチテナント対応。

まとめ

ユースケース推奨ツール
REST API・QRコード・geo統計Shlink
WordPress統合・プラグインエコシステムYOURLS
パスワード保護・モダンUI・チーム利用Kutt

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。