---
canonical: "https://agi-labo.com/tools/wings/docs/web-apps"
title: "Web アプリと共有"
description: "ブラウザで開くアプリを作り、指定した人と共有します。"
section: "主要機能"
order: 7
pageType: "how-to"
lastVerifiedVersion: "1.4.16"
lastVerifiedAt: "2026-10-15"
draft: false
surfaces: ["cli", "console", "api"]
plans: ["free", "member"]
---

Web アプリは、ブラウザから Handler を使うための画面です。
開けるのは所有者と、メールアドレスを指定して共有した人だけです。
誰でも開ける公開モードはありません。

## 1. コードを保存する

次のコードを `hello-web.js` として保存します。

```js
export default {
  async fetch(request, env) {
    return new Response('<!doctype html><h1>Hello, Wings</h1>', {
      headers: { 'Content-Type': 'text/html; charset=utf-8' },
    })
  },
}
```

## 2. Web アプリとして登録する

```sh
wings handler deploy --name hello-web --file hello-web.js
wings handler list
```

一覧に出た ID を `<handler-id>` に入れます。
次のコマンドで Web アプリを作り、URL を確認してください。

```sh
wings trigger add-web <handler-id> --slug hello-web
wings trigger list <handler-id>
wings trigger url <handler-id> <trigger-id>
```

`<trigger-id>` は Trigger の一覧に出た ID です。
表示された URL をブラウザで開き、Console でログインします。
「Hello, Wings」が表示されれば成功です。

## ログイン状態について

アプリのセッションは24時間です。
通常は、Console からのログアウトでもアプリからログアウトします。
ただし、Web アプリからログアウトできなかったという警告が出た場合は、ログイン状態が最大24時間残ることがあります。
共有端末では、その警告が出ていないか確認してください。

アプリの無効化や削除、共有解除でも、対象のセッションを終了します。
アプリを無効にしても共有設定は残ります。
削除すると共有設定も消えます。

## 人を招待する

```sh
wings trigger share <handler-id> <trigger-id> --email teammate@example.com
wings trigger shares <handler-id> <trigger-id>
wings trigger unshare <handler-id> <trigger-id> --email teammate@example.com
```

招待メールは送られません。
`share` で追加したら、アプリの URL を本人に渡してください。
招待された人は、指定されたメールアドレスの AGIラボアカウントでログインします。
無料アカウントで利用できます。
閲覧だけで Wings の利用開始や無料枠の作成にはなりません。

| 上限 | 無料枠 | 会員 |
| --- | --- | --- |
| 1アプリ | 5人 | 20人 |
| アカウント全体の異なるアドレス | 20人 | 100人 |
| 直近24時間の追加 | 30件 | 30件 |

共有相手を削除しても、直近24時間の追加回数は戻りません。
`shares` で現在の人数と上限を確認できます。
`sharing_unavailable` が返る場合は、今のアカウントでは共有相手を追加できません。
一覧の確認と削除はできます。

## 共有相手ができることを決める

招待された人も、所有者の Handler を動かします。
その Handler を通じて所有者の Connection、Secret、Database を使います。
実行時間も所有者の枠から使います。
表示内容だけでなく、データを変更する操作にも権限の確認を入れてください。

`env.WINGS_VIEWER` で閲覧者を確認できます。
`email` はメールアドレス、`role` は所有者なら `owner`、共有相手なら `member` です。
この値は Handler から書き換えられません。
Web アプリ以外の Run や、呼び出し先の子 Handler では `undefined` です。

Web アプリの Run は毎分・毎時の Run 回数には含めません。
1日の実行時間と、Web アプリ専用のアクセス上限は使います。

## 開発時の制限

- アプリごとに `agi-wings.app` の別の URL を使います。トップは `/` です。
- GET、HEAD、POST に対応します。POST はアプリ自身のページから送ってください。
- 要求は256 KiB、応答は1 MiBまでです。`/_wings/` はサービスが使う予約パスです。
- GET でデータを書き換えないでください。
- Service Worker、iframe での表示、別のアプリからの fetch は使えません。
- 応答はブラウザに保存しない設定（`private, no-store`）です。
- リダイレクト先は同じアプリ内に限ります。外部サイトには転送できません。

## Web アプリが開かなくなったとき

別のアプリが保存した Cookie の影響で、Web アプリが開かなくなる場合があります。
ブラウザの設定で `agi-wings.app` のサイトデータを消すと、直る場合があります。

サイトデータを消すと、localStorage のデータも消えます。
残す必要があるデータは [Database](/tools/wings/docs/databases-sql) に保存してください。

アプリの認証には、独自の Cookie ではなく `env.WINGS_VIEWER` を使います。
同じサイトの別アプリが、JavaScript で作った Cookie を上書きできるためです。
