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短縮サービスとして利用します。

以下の手順で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/ にアクセスし、初期セットアップを完了します。
- 「Install YOURLS」ボタンをクリック
- データベーステーブルが自動的に作成されます
-
.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管理画面から以下の手順で行います:
- ブラウザで
http://localhost/admin/にアクセスしてログイン - 上部メニューから「機能拡張を管理」をクリック
- 有効化したいプラグインの「有効」ボタンをクリック
利用可能なサンプルプラグイン:
-
random-shorturls- ランダムな短縮URLを生成 -
hyphens-in-urls- URLにハイフンを使用可能に -
random-bg- ランダムな背景パターン -
sample-toolbar- カスタムツールバーのサンプル
7.動作確認
④「Random ShortURLs」を有効化
「Random ShortURLs」は一般のクラウドシステムのURL短縮サービスのようにランダムの指定文字数のハッシュコードのような短縮URLを設定する機能です。
文字数は有効化後に「Random ShortURLs」を押すと「Random Keyword Length」というパラメタが現れ文字数を設定することができます。
「Random ShortURLs」の行をマウスオーバーすると「操作」に「有効」というボタンが現れるため、「有効」を押します。

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



