Appqr について
Appqrは、iOSとAndroidのユーザーを各アプリストアへ振り分けるQRコードを作成するコマンドラインツール兼Node.jsパッケージです。開発者はリダイレクト用ファイルを変更せずにキャンペーン別のコードを作成でき、MCPサーバー経由で対応エージェントから操作できます。
主な機能
- 01端末に応じたApp Store・Google Playへの転送
- 02キャンペーン用QR画像の生成
- 03iOSとAndroidで別々の計測パラメーター
- 04ストアURLの検証
- 05コマンドライン、Node.jsパッケージ、MCPツール
活用シーン
- 01両ストアで配信するアプリ向けの共通QRコード作成
- 02キャンペーンごとのQR画像作成
- 03MCP対応エージェントからのQRファイル生成
MCP 対応
内蔵MCPサーバーは、初期設定、キャンペーンQR生成、ストアURL検証のツールを対応するAIエージェントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
アプリを作成し、両方のストアで公開しました。ランディングページ、名刺、プレスキットで使える QR コードが 1 つ必要です。この用途に対応する他のツールは、どれも月額サブスクリプション料金がかかります。AppQR は無料で、マシン上で動作し、ずっと使えます。
npx appqr setup \
--ios "https://apps.apple.com/app/id123456789" \
--android "https://play.google.com/store/apps/details?id=com.myapp" \
--url "https://myapp.com/go"
✓ redirect.html → ./appqr-output/redirect.html
✓ qr.png → ./appqr-output/qr.png
→ Upload redirect.html to your site at: https://myapp.com/go
→ Done! For future campaigns, run: appqr campaign
仕組み
Scan QR
↓
Phone opens: myapp.com/go?d=eyJpb3MiOiJodHRw...
↓
redirect.html detects device (client-side JS, no server)
↓
iOS user → App Store
Android → Google Play
QR コードは、両方のストアの URL を URL 自体に Base64 形式で埋め込みます。redirect.html はデコードしてリダイレクトするだけの小さな汎用ファイルです。キャンペーンデータは一切含まず、変更する必要もありません。新しいキャンペーンごとに、新しい QR 画像を生成するだけです。
**リダイレクトの経路に AppQR のサーバーが介在することはありません。**すべて開発者自身のウェブサイト上で動作します。
インストール
npm install -g appqr
インストールせずに実行することもできます。
npx appqr setup ...
使い方
ステップ 1 — セットアップ(アプリごとに 1 回)
appqr setup \
--ios "https://apps.apple.com/app/id123456789" \
--android "https://play.google.com/store/apps/details?id=com.myapp" \
--url "https://myapp.com/go"
最初の QR コードでキャンペーン追跡を有効にする場合:
appqr setup \
--ios "https://apps.apple.com/app/id123456789" \
--android "https://play.google.com/store/apps/details?id=com.myapp" \
--url "https://myapp.com/go" \
--ios-params "ct=launch&pt=12345&mt=8" \
--android-params "utm_source=launch&utm_campaign=v1&utm_medium=organic" \
--output ./public/go
redirect.html をサイトにアップロードします。アップロードするファイルはこれだけです。以後、変更する必要はありません。
ステップ 2 — 新しいキャンペーン QR(必要なだけ何度でも)
appqr campaign \
--ios "https://apps.apple.com/app/id123456789" \
--android "https://play.google.com/store/apps/details?id=com.myapp" \
--url "https://myapp.com/go" \
--ios-params "ct=instagram_launch&pt=12345&mt=8" \
--android-params "utm_source=instagram&utm_campaign=launch&utm_medium=paid" \
--output ./qrs/instagram
✓ qr.png → ./qrs/instagram/qr.png
iOS URL: https://apps.apple.com/app/id123456789?ct=instagram_launch&pt=12345&mt=8
Android URL: https://play.google.com/store/apps/details?id=com.myapp&utm_source=instagram...
No file upload needed — redirect.html already handles this.
アップロードも、ウェブサイトの変更も必要ありません。キャンペーンごとに新しい QR 画像を用意するだけです。
キャンペーンパラメーターの形式を表示
appqr params
Node.js パッケージとして使う
import { setup, campaign } from 'appqr'
// First time setup
const result = await setup({
ios: 'https://apps.apple.com/app/id123456789',
android: 'https://play.google.com/store/apps/details?id=com.myapp',
hostedUrl: 'https://myapp.com/go',
iosParams: 'ct=launch&pt=12345&mt=8',
androidParams: 'utm_source=launch&utm_campaign=v1&utm_medium=organic',
outputPath: './public/go'
})
// → result.redirectPath upload this once
// → result.qrPath use this as your QR image
// Campaign QR — no upload needed
const qr = await campaign({
ios: 'https://apps.apple.com/app/id123456789',
android: 'https://play.google.com/store/apps/details?id=com.myapp',
hostedUrl: 'https://myapp.com/go',
iosParams: 'ct=instagram_launch&pt=12345&mt=8',
androidParams: 'utm_source=instagram&utm_campaign=launch&utm_medium=paid',
outputPath: './qrs/instagram'
})
// → qr.qrPath your campaign QR image
TypeScript の型定義がすべて含まれています。@types/appqr は必要ありません。
MCP — AI エージェント向け(Claude、Cursor、Copilot)
AppQR には MCP(Model Context Protocol)サーバーが組み込まれています。MCP に対応した AI エージェントは、CLI の知識や手作業なしで、ネイティブにスマート QR コードを生成できます。
Claude Desktop に追加
{
"mcpServers": {
"appqr": {
"command": "npx",
"args": ["appqr", "mcp"]
}
}
}
Cursor に追加
{
"mcpServers": {
"appqr": {
"command": "npx",
"args": ["appqr", "mcp"]
}
}
}
接続すると、エージェントに次のように依頼できます。
「アプリ用のスマート QR コードを生成してください。App Store:apps.apple.com/app/id123。Play Store:play.google.com/store/apps/details?id=com.app。myapp.com/go にホストしてください。」
エージェントは appqr_setup または appqr_campaign を直接呼び出し、ファイルパスを受け取ります。
公開される MCP ツール
| ツール | 説明 |
|---|---|
appqr_setup | 初回セットアップ — redirect.html と qr.png を生成 |
appqr_campaign | 新しいキャンペーン QR — qr.png のみを生成 |
appqr_validate | 生成前にストア URL を検証 |
キャンペーンパラメーターの形式
Apple App Store
| パラメーター | 内容 | 必須 | 例 |
|---|---|---|---|
ct | キャンペーントークン — 任意のラベル | 推奨 | ct=instagram_launch |
pt | プロバイダートークン — 数値の Apple ID | 推奨 | pt=12345 |
mt | メディアタイプ — アプリの場合は常に 8 | はい | mt=8 |
--ios-params "ct=instagram_launch&pt=12345&mt=8"
Google Play(標準 UTM)
| パラメーター | 内容 | 必須 | 例 |
|---|---|---|---|
utm_source | トラフィックソース | はい | utm_source=instagram |
utm_medium | マーケティングメディア | はい | utm_medium=paid |
utm_campaign | キャンペーン名 | はい | utm_campaign=launch |
utm_content | 特定の広告またはクリエイティブ | いいえ | utm_content=banner_v1 |
utm_term | 検索広告のキーワード | いいえ | utm_term=todo+app |
--android-params "utm_source=instagram&utm_campaign=launch&utm_medium=paid"
Bitly / QR Tiger / Branch を使わない理由
| その他 | AppQR | |
|---|---|---|
| iOS / Android を判別するスマートリダイレクト | ✓ 有料 | ✓ 無料 |
| 料金 | $15–40/月 | 無料 |
| サービス終了後も QR が使える | ✗ | ✓ いつでも使える |
| キャンペーン追跡パラメーター | ✓ 有料 | ✓ 無料 |
| Apple と Google それぞれのパラメーター | ✗ まれ | ✓ 対応 |
| エージェント / CLI との親和性 | ✗ | ✓ 対応 |
| MCP サーバー | ✗ | ✓ 対応 |
| キャンペーンデータが相手のサーバーに保存される | ✓ 常に | ✗ されない |
リポジトリ構成
appqr/
├── public/
│ ├── index.html # Landing page
│ └── llms.txt # AI agent discovery
├── api/
│ └── ping.js # Telemetry (Vercel serverless)
├── cli/
│ ├── bin/appqr.js # CLI entry point
│ ├── src/
│ │ ├── core.js # Core logic
│ │ ├── mcp.mjs # MCP server
│ │ ├── telemetry.js # Anonymous counters
│ │ ├── index.js # npm package exports
│ │ └── index.d.ts # TypeScript types
│ └── package.json
├── vercel.json
└── README.md # This file
Web バックエンドをデプロイする(Vercel + Supabase)
Web バックエンドはランディングページをホストし、匿名の使用状況テレメトリーを収集します(インストール数、使用回数、エージェントと人間の内訳 — 個人データは含まれません)。
1. Vercel にデプロイする
git clone https://github.com/harishakumarn/appqr
cd appqr
vercel deploy
または、Vercel ダッシュボードから接続します。リポジトリをインポートして、ワンクリックでデプロイできます。
2. Supabase をセットアップする(任意 — テレメトリー用)
Supabase プロジェクトで次の SQL を実行します。
create table counters (
id integer primary key default 1,
installs bigint default 0,
setups bigint default 0,
human_runs bigint default 0,
agent_runs bigint default 0,
qrs_generated bigint default 0,
constraint single_row check (id = 1)
);
insert into counters (id) values (1);
create or replace function increment_counter(col_name text)
returns void as $$
begin
execute format(
'update counters set %I = %I + 1 where id = 1',
col_name, col_name
);
end;
$$ language plpgsql;
Vercel の環境変数に追加します。
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
3. テレメトリー URL を更新する
cli/src/telemetry.js で、TELEMETRY_URL を Vercel のデプロイ URL に置き換えます。
4. npm に公開する
cd cli
npm publish
プライバシーとテレメトリー
AppQR は実行ごとに匿名の ping を 1 回送信します。URL、キャンペーンデータ、ストアのリンク、個人情報、デバイス識別子は一切収集されません。
追跡されるのは、次のいずれかのカウンターの増分のみです。
installed、setup、human_run、agent_run、qr_generated
今後ずっとオプトアウトするには:
echo 'export APPQR_NO_TELEMETRY=1' >> ~/.zshrc
または、実行ごとにオプトアウトするには:
APPQR_NO_TELEMETRY=1 appqr setup ...
貢献
プルリクエストを歓迎します。コードベースは意図的に小さくしてあり、コアロジックは 200 行未満です。
git clone https://github.com/harishakumarn/appqr
cd appqr/cli
npm install
node bin/appqr.js setup --help
ライセンス
MIT © AppQR Contributors
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。