Gateway setup guide ― Meta App + Claude key + nginx

3 ステップで Meta ログインを実稼働化。所要 ~30 分、課金なし、Meta App 審査不要 (public_profile + email のみ)。

Step 1. Meta for Developers でアプリ作成

1developers.facebook.com にログイン (Facebook 個人アカウント可)。マイアプリ →「アプリを作成」

2ユースケース選択: 「Facebook ログインでユーザーを認証し、データをリクエスト」を選択 (review 不要のため)

3アプリ名 = JAVATEL RLM Gateway (任意)、連絡先メール入力、ビジネスポートフォリオ任意

4左サイドバー: 「アプリの設定」 →「基本」 を開き、アプリ ID をコピー (これが META_APP_ID)

5「プラットフォームを追加」 → 「ウェブサイト」、サイト URL = https://javatel.co.jp/

6「製品」 → 「Facebook ログイン」 → 「設定」有効な OAuth リダイレクト URI に追加:

https://javatel.co.jp/ja/resource/slimetree-rlm/meta/gateway/
https://javatel.co.jp/resource/slimetree-rlm/meta/gateway/

Step 2. App ID を Gateway HTML に差込

取得した App ID で、/ja/resource/slimetree-rlm/meta/gateway/index.html および /gateway/index.html の以下の行を置換します:

// === 設定: Meta App ID ===
const META_APP_ID = '__JAVATEL_META_APP_ID__';
//                                         ↑ ここに 15 桁前後の数字を貼る
//                                           例: '1234567890123456'

置換後、HTTPS で gateway を開くと「Meta アカウントでログイン」ボタンが活性化します。

注: App は「開発モード」(default) でも、App 作成者本人 + 開発者ロール付きのユーザーはログイン可能。一般公開には「ライブモード」へ切替 (review 不要、Settings → 基本 → アプリモードを公開へ)。

Step 3. nginx ヘッダ (任意 / shared-memory WASM 化時に必要)

mock WASM は SharedArrayBuffer 不要のため 本デモでは Step 3 はスキップ可。実 WASM (272 KB) に差替えて WebWorker / 永続化を使う場合のみ:

server {
    listen 443 ssl http2;
    server_name javatel.co.jp;

    # gateway path のみ COOP/COEP を有効化 (他 path に影響させない)
    location /gateway/ {
        add_header Cross-Origin-Opener-Policy   "same-origin" always;
        add_header Cross-Origin-Embedder-Policy "require-corp" always;
        add_header Cross-Origin-Resource-Policy "same-origin" always;
    }
    location /ja/resource/slimetree-rlm/meta/gateway/ {
        add_header Cross-Origin-Opener-Policy   "same-origin" always;
        add_header Cross-Origin-Embedder-Policy "require-corp" always;
        add_header Cross-Origin-Resource-Policy "same-origin" always;
    }
    location ~ \.wasm$ {
        types { application/wasm wasm; }
        add_header Cross-Origin-Resource-Policy "same-origin" always;
    }
}

Step 4. Claude API key (利用側設定)

R 判定時のみ Anthropic API を呼びます。エンドユーザは:

  1. console.anthropic.comAPI Keys → Create Key
  2. key (sk-ant-api03-...) をコピー
  3. Gateway の「2. Claude (Anthropic) API key」欄に貼って「保存」

key は ブラウザ localStorage のみに保存、javatel サーバには一切送信されません (browser direct call, anthropic-dangerous-direct-browser-access: true ヘッダで明示同意)。利用料金はキー所有者の Anthropic アカウントへ直接課金。

Step 5. 検証

# ログイン経路
curl -I https://javatel.co.jp/ja/resource/slimetree-rlm/meta/gateway/                 # 200
# WASM mock
curl -I https://javatel.co.jp/ja/resource/slimetree-rlm/meta/gateway/slimetree-rlm-mock.js  # 200, application/javascript

# (任意) COOP/COEP 確認
curl -sI https://javatel.co.jp/ja/resource/slimetree-rlm/meta/gateway/ | grep -i "cross-origin"

# ライセンス API (multi-service) の動作確認
curl -s https://javatel.co.jp/api/trial/services | python3 -m json.tool   # 7 サービス返却

Step 6. mock JS → 実 WASM への差替え

SlimeTree-RLM の実 WASM (約 272 KB) を入手したら、index.html 内の 1 行を変えるだけで切替えできます。他の呼出 (rlm.route(text) 以降) は完全に同じ。

// === mock 版 (現状) ===
import { SlimeTreeRLM } from './slimetree-rlm-mock.js';
const rlm = new SlimeTreeRLM();
await rlm.init();

// === 実 WASM 版 ===
import init, { SlimeTreeRLM } from './slimetree_rlm.js';
await init({
  module_or_path: './slimetree_rlm_bg.wasm',
  // shared memory を使う場合は memory: new WebAssembly.Memory({ shared: true, ... })
});
const rlm = new SlimeTreeRLM({
  capacity: 16 * 1024 * 1024,
  audit:    true,
  // mode: 'shared',  // SAB-backed WebWorker pool 共有時のみ
});

shared memory (WebWorker pool) を使う場合は本ファイル Step 3 の COOP/COEP ヘッダが必要です。詳細は Tutorial 中級編 (SAB + WASM ビルド) 参照。

注: 実 WASM は SlimeTree-RLM 商用ライセンスの対象です。本ファイルの差替えコード自体は MIT (公開) ですが、slimetree_rlm_bg.wasm 本体は別途ライセンス契約が必要です。

Step 7. ライセンスサーバ確認 (オプション)

Gateway は /api/trial/subscription/start 等で本物のライセンスサーバ (Python + SQLite + Ed25519、127.0.0.1:8765 で稼働) を呼びます。ユーザがメール+パスワード認証で 30 日トライアルを開始できる状態か確認:

# サービスカタログ (公開)
curl -s https://javatel.co.jp/api/trial/services

# 認証エンドポイント (空 body で 400 = エンドポイント生きている確認)
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://javatel.co.jp/api/account/me/subscriptions \
    -H "Content-Type: application/json" -d '{}'                          # 400 → OK

関連