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?

DockerでYOURLS(日本語)を構築

Posted at

image.png
作成日:2025年11月24日(日)

1.はじめに

会社ではMicrosoft 365 E3ライセンスが使用でき、イントラ内部でiPhoneでも動作するWebアプリケーションを認証付きで利用できるPower Appsなどが利用できとても便利です。しかし、Power AppsのURLにはアプリケーションIDやテナントIDなどの情報が含まれるため、必要最小限の情報でもURLが220バイトほどになります。これは仕様上やむを得ないのですが、社内でアプリを展開する際、この長いURLをメールやWebのお知らせに貼り付けるのは少し不便です。ハイパーリンクを使えば短く表示できますが、担当者によってはハイパーリンク化せずそのまま貼り付けてしまうため、運用には不向きです。

また、NFCタグに登録されたURLをiPhoneで読み取る用途(資産管理、フリーロケーション管理など)では、NFCタグの規格がNTAG215(504Byte)に限定されてしまいます。そのため、コストが安く流通量の多いNTAG213(144Byte)が使えないという問題もあります。

そこで、インターネット上にURL短縮サービスを構築します。これにより、NFCタグにiPhoneをタッチするだけで、Microsoft 365のPower Appsサービスを利用できるようになります。

2.URL短縮サービス

URL短縮サービスとは、長いURLを短く簡潔なリンクに変換するWebサービスです。サービス内のデータベースで長いURLと短いURLの対を管理し、サイトにアクセスした場合に、長いURLに転送するというものです。主に以下のような目的で利用されます:

  • 文字数制限のあるSNSやメッセージでの共有
  • 印刷物やNFCタグなど物理媒体への記載
  • クリック数やアクセス元などの統計情報の取得
  • URLの見た目を整え、ブランディングやセキュリティの向上

以下は主要なURL短縮サービスの比較表です:

項番 サービス名 特徴 料金 カスタムドメイン 分析機能 ホスティング形態
1 Bitly 最も有名なURL短縮サービス。豊富な分析機能とAPI提供 無料プランあり(有料プランは月額$29〜) 有料プランで対応 詳細な統計情報 クラウドサービス
2 TinyURL シンプルで使いやすい老舗サービス。登録不要で利用可能 基本無料 非対応 基本的な統計のみ クラウドサービス
3 Rebrandly ブランディングに特化。カスタムドメインが使いやすい 無料プランあり(有料プランは月額$29〜) 無料プランでも対応 詳細な統計情報 クラウドサービス
4 YOURLS オープンソースで自社サーバーに構築可能。完全にコントロール可能 無料(サーバー費用のみ) 独自ドメイン使用 プラグインで拡張可能 セルフホスト
5 Short.io API連携が充実。開発者向け機能が豊富 無料プランあり(有料プランは月額$20〜) 有料プランで対応 詳細な統計情報 クラウドサービス

本記事では、オープンソースのYOURLSを採用しています。クラウドサービスを使わずにデータを完全管理でき、プラグインによる高いカスタマイズ性も魅力です。

3.YOURLSとは

YOURLS(Your Own URL Shortener)とは、2009年にリリースされて以来、世界中で広く利用されているオープンソース(MIT License)のURL短縮サービスです。セリフホスト(社内イントラ内や、自社専用クラウド)のサーバー上に構築できる点が特徴です。一般的なクラウド型のサービス(BitlyやTinyURLなど)と異なり、データベースや短縮リンクの運用を完全に自社でコントロールできるため、セキュリティやプライバシー管理面で大きな強みがあります。また、プラグインによる機能拡張や独自ドメインの利用、アクセス統計分析なども可能です。利用料金は無料ですが、サーバーの維持費のみが必要となります。Dockerなどのコンテナ技術を使えば、手軽にインストール・管理できる点も魅力です。企業や組織、開発者がカスタム用途や物理メディア(NFCタグ・印刷物)との連携で使うケースが増えています。

今回のMicrosoft 365 Power AppsのURL短縮用途において、YOURLSは最適な選択と考えています。社内システムとの統合が必要な場合でも、オープンソースであるため自由にカスタマイズできます。また、Dockerコンテナでのデプロイにも対応しており、環境構築が簡単に行えるため、迅速な導入が可能です。

4.システム構成

URL短縮サービス(YOURLS)の使い方は様々ですが、今回はMicrosoft 365 Power AppsへのURL短縮サービスとして利用します。
YOURLS_usecase.png

以下の手順でPower Appsサービスを利用
①NFCタグをタッチ
②短いURLでYOURLSサービスを開く
③Power Appsサービスに転送
④M365のOkta認証
⑤サービスを利用

5.課題

YOURLSはプラグインも充実した優れたサービスですが、動作にMySQLが必要です。DockerHubのオフィシャルイメージのページにdocker-compose.ymlファイルがありますが、YOURLS_SITEなどの設定で簡単には動作しませんでした。そこで、Docker環境で確実に動作するdocker-compose.ymlを作成しました。

最初がDockerHubのオフィシャルイメージのサイトに記載されたdocker-compose.yml、次が私がカスタマイズしたものです。

name: yourls
services:
  yourls:
    image: yourls
    restart: always
    depends_on:
      - mysql
    ports:
      - 8080:8080
    environment:
      YOURLS_DB_PASS: example
      YOURLS_SITE: https://example.com
      YOURLS_USER: example_username
      YOURLS_PASS: example_password
  mysql:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: yourls
    volumes:
      - db:/var/lib/mysql

version: '3'
services:
  db:
    image: mysql:8.0
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: yourls
      MYSQL_USER: yourls
      MYSQL_PASSWORD: yourls
    volumes:
      - ./volumes/mysql:/var/lib/mysql

  yourls:
    container_name: some-yourls
    depends_on:
      - db
    ports:
      - 80:8080
    environment:
      - YOURLS_SITE=http://localhost
      - YOURLS_USER=yourls
      - YOURLS_PASS=yourls
      - YOURLS_DB_HOST=db
      - YOURLS_DB_USER=yourls
      - YOURLS_DB_PASS=yourls
      - YOURLS_DB_NAME=yourls
    image: yourls

6.GitHubパッケージ化

実際の運用では、日本語化やdocker-compose.ymlの微調整が必要になることがあります。そこで、GitHubのpotofo/yourlsリポジトリに、日本語化済みですぐに動作するdocker-compose.ymlを用意しました。このパッケージにはYOURLSおよびYOURLS-ja_JPを組み込んでいます。

6.1. インストール

①リポジトリーのクローン

git clone https://github.com/potofo/yourls

②環境変数の設定

.env.exampleをコピーして.envファイルを作成し、必要に応じて設定を変更します。.env.exampleはWSL環境で動作確認しやすいよう、仮パスワードなどをあらかじめ設定しています。そのため、何も変更せずにすぐ動作させることができます。ただし、本番運用時には必ず設定を見直してください。

cp .env.example .env

③.envファイルの主要な設定項目

# YOURLSのサイトURL外部アクセス用のURL
YOURLS_SITE=http://localhost

# YOURLS管理者のユーザー名とパスワード
YOURLS_USER=admin
YOURLS_PASS=admin

# 言語設定ja_JP: 日本語
YOURLS_LANG=ja_JP

# タイムゾーンオフセット日本標準時は9
YOURLS_HOURS_OFFSET=9

# 外部アクセス用のポートデフォルト: 80
YOURLS_EXTERNAL_PORT=80

# MySQL設定
MYSQL_ROOT_PASSWORD=example
MYSQL_DATABASE=yourls
MYSQL_USER=yourls
MYSQL_PASSWORD=yourls

6.2. Dockerコンテナの起動

docker compose up -d

6.3. YOURLSのセットアップ

ブラウザで http://localhost/admin/ にアクセスし、初期セットアップを完了します。

  1. 「Install YOURLS」ボタンをクリック
  2. データベーステーブルが自動的に作成されます
  3. .envで設定したユーザー名とパスワードでログイン

※YOURLS_USERとYOURLS_PASSは「Install YOURLS」ボタンを押したときのみ参照されるようです。インストール後はyourls/config/config.phpの$yourls_user_passwordsを修正する必要があります。

例:

デフォルト

 $yourls_user_passwords = [
   'admin' => 'phpass:!2y!12!h6uszqIZdPCHVJMgRH6jpeDRERePWb.KuBn6n.QBWQVKF02vcgoWq' /* Password encrypted by YOURLS */ ,
 ];

変更後

 $yourls_user_passwords = [
   'admin' => 'newpassword' /* Password encrypted by YOURLS */ ,
 ];

6.4. コンテナの運用

①コンテナの停止

docker compose down

②コンテナのログ確認

# 全コンテナのログ
docker compose logs -f

# YOURLSコンテナのみ
docker compose logs -f yourls

# MySQLコンテナのみ
docker compose logs -f db

③コンテナの再起動

docker compose restart

④データベースの初期化

データベースを完全に削除して初期状態に戻す場合は、以下の手順を実行します。

⚠️ 警告

この操作を実行すると、全ての短縮URLとデータが完全に削除されます。実行前に必ずバックアップを取ってください。

初期化手順

(a)コンテナの停止とボリュームの削除

docker compose down --volumes

(b)MySQLデータディレクトリの削除

rm -rf ./volumes/mysql

(c)コンテナの再起動

docker compose up -d

(d)YOURLSの再セットアップ

ブラウザで http://localhost/admin/ にアクセスし、再度初期セットアップを実行します。

6.5. プロジェクト構成

.
├── config/
   ├── config.php              # YOURLS設定ファイル
   ├── config-sample.php       # 設定ファイルのサンプル
   ├── languages/
      └── ja_JP.mo           # 日本語翻訳ファイル
   ├── plugins/               # プラグインディレクトリ
   └── pages/                 # カスタムページ
├── volumes/
   └── mysql/                 # MySQLデータ自動生成
├── .env                       # 環境変数設定git管理外
├── .env.example              # 環境変数のサンプル
├── docker-compose.yml        # Docker Compose設定
├── LICENSE.txt               # ライセンスファイル
└── README.md                 # このファイル

6.6. プラグインの有効化

プラグインを有効化するには、YOURLS管理画面から以下の手順で行います:

  1. ブラウザでhttp://localhost/admin/にアクセスしてログイン
  2. 上部メニューから「機能拡張を管理」をクリック
  3. 有効化したいプラグインの「有効」ボタンをクリック

利用可能なサンプルプラグイン:

  • random-shorturls - ランダムな短縮URLを生成
  • hyphens-in-urls - URLにハイフンを使用可能に
  • random-bg - ランダムな背景パターン
  • sample-toolbar - カスタムツールバーのサンプル

7.動作確認

http://localhost/adminにアクセス
YOURLS_1.png

②ユーザ名:admin、パスワード:adminでサインイン
YOURLS_2.png

③機能拡張を管理をクリック
YOURLS_3.png

④「Random ShortURLs」を有効化
「Random ShortURLs」は一般のクラウドシステムのURL短縮サービスのようにランダムの指定文字数のハッシュコードのような短縮URLを設定する機能です。
文字数は有効化後に「Random ShortURLs」を押すと「Random Keyword Length」というパラメタが現れ文字数を設定することができます。
「Random ShortURLs」の行をマウスオーバーすると「操作」に「有効」というボタンが現れるため、「有効」を押します。
YOURLS_4.png

※「Random ShortURLs」を有効にした後も、「カスタムの短縮URL」を設定できます。

8.参考URL

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?