UIXHERO

Share Modal(シェアモーダル)

コンテンツのURL・アクセス権・共有先を設定・送信するためのモーダルダイアログ。リンクコピー・メール招待・権限設定・SNSシェアの設計パターンと、アクセシビリティ(フォーカストラップ・aria-modal)を解説する。

2026年3月3日
更新: 2026年9月3日
14
by Dengen Yosho(DGYS)

コンテンツのURL・アクセス権・共有先を設定・送信するためのモーダルダイアログ。リンクコピー・メール招待・権限設定(閲覧者/編集者)・SNSシェア・QRコードを組み合わせた複合で、Google Docs・Figma・Notion・GitHubなどのコラボレーションツールに広く使われる。単純なURL表示から多段階の権限管理まで、用途によって複雑さが大きく異なる。

この記事を読むと、リンクコピーボタンのフィードバック設計・権限レベルのセレクト・メール招待の入力パターン・フォーカストラップ・aria-modal 実装・コピー成功状態の管理が自分でできるようになります。


1. UI例(Preview / Live)

実装で見る(GunjoUI)

この部品を、デザインシステム GUNJO の実装で確かめられます。

2. 定義(Definition)

コンテンツ(ドキュメント・画像・リンク)の共有設定を行うモーダルダイアログ。アクセス権の設定・招待・URLコピーを1か所で完結させる複合UIコンポーネント。

Share Modal の3つのコア機能

機能説明
リンクコピー共有URLをクリップボードにコピー
ユーザー招待メールアドレスを入力して特定ユーザーを招待
アクセス権設定閲覧者/編集者/公開などの権限レベルを選択

3. 使い分け(When to use / When NOT to use)

3.1 When to use

  • コラボレーションツール:Google Docs・Figma・Notion のドキュメント・ファイル共有
  • コンテンツ公開設定:ブログ記事・ポートフォリオの公開/非公開切り替え
  • リソース共有:フォルダ・プロジェクトへのメンバー招待
  • SNSシェア:X・Facebook・LINEなどへのシェアリンク生成

3.2 When NOT to use

  • 常時表示する権限設定:頻繁に操作する権限管理は設定ページに置く
  • 単純なURLコピーのみ:URLだけなら <button onclick="copy"> + Tooltip で十分(モーダル不要)

4. 設計判断の核(Decision Principles)

Share Modalの核は「コピーフィードバック」——リンクコピーボタンは「コピー」→「✓ コピー済み」→「コピー」の状態遷移で成功を明示する。この瞬間的なフィードバックがないと、ユーザーはコピーされたか不安になり再度押してしまう。

判断の優先順位:① コピー → ② 権限レベルの明確な表現 → ③ メール招待のバリデーション → ④ aria-modal

  • コピー成功は2秒間「✓ コピー済み」を表示し aria-live="polite" で通知するsetTimeout で2秒後に元のラベルに戻す。aria-label も「コピー済み」に切り替えることでスクリーンリーダーにも通知できる
  • 権限レベルは「閲覧者」「編集者」「コメント可」などユーザーが理解できる言葉で表現する:「read」「write」などの技術語ではなく、実際の操作内容(何ができるか)を示す言葉を使う
  • モーダルはフォーカストラップを実装するrole="dialog" + aria-modal="true" を設定し、Tabキーのフォーカスをモーダル内に閉じ込める。Escape キーで閉じる
  • メール招待フィールドは Enter キーで送信できるようにするonKeyDownEnter を検知して招待アクションを実行する。送信ボタンのクリックと同じ動作を提供する

5. 状態設計(States)

状態コピーボタン入力フィールド
初期「コピー」(非活性気味)プレースホルダー表示
コピー成功「✓ コピー済み」(緑)
2秒後「コピー」に戻る
メール入力中テキスト表示
招待ボタン無効(空の場合)有効(入力あり)
送信中disabled + スピナー
招待済みリストに追加

6. バリエーション設計(Variants)

バリアント特徴使用例
リンクのみURLコピー+権限ブログ・メディア
メール招待付きユーザー招待+権限管理Google Docs・Figma
SNSシェアプラットフォーム別ボタンメディア・ポートフォリオ
公開設定付き非公開/リンク/公開の3択CMS・Notion
埋め込みコード<iframe> コードのコピーYouTube・Google Maps

7. パターン集(Good / Bad / How to fix)

7.0 よく崩れる設計パターン(3つ)

  • コピー後にフィードバックがない:ボタンを押しても何も変わらず、コピーされたか分からない
  • 権限の説明が技術語:「read」「write」「owner」などの技術語を使い、ユーザーが何ができるか分からない
  • フォーカストラップがない:Tabキーでモーダル外の要素にフォーカスが移動し、操作が混乱する

7.1 Bad(典型3つ)

  • コピーボタンに onClick のみでフィードバックがなく、ユーザーが再度押してしまう
  • 権限セレクトに「role: viewer / editor / owner」の技術語が並び、意味が分かりにくい
  • role="dialog" がなくキーボード操作でモーダル外にフォーカスが出る

7.2 Good(対になる3つ)

  • setCopied(true) → 2秒後 setCopied(false) + aria-label 切り替えでコピー成功を明示する
  • 「閲覧者(読み取り専用)」「編集者(変更可能)」のような自然言語で権限を表現する
  • role="dialog" aria-modal="true" + Tabキートラップ(onKeyDown でフォーカス制御)を実装する

7.3 How to fix(手順)

  1. コピーボタンに copied state を追加し、成功時に2秒間ラベルと色を変える
  2. aria-labelaria-live でコピー成功をスクリーンリーダーに通知する
  3. 権限ラベルをユーザーが理解できる言語に書き換える
  4. モーダルに role="dialog" aria-modal="true" aria-labelledby を追加する

8. ルール(Must / Better)

Must(守らないと壊れる)

Better(品質が跳ねる)


9. アクセシビリティ要件(必須)

Screen Reader

<div
  role="dialog"
  aria-modal="true"
  aria-labelledby="share-modal-title"
>
  <h2 id="share-modal-title">「UIデザイン入門」を共有</h2>

  <!-- コピーボタン:状態に応じて aria-label を切り替え -->
  <button
    aria-label="リンクをコピー"
    aria-live="polite"
  >
    コピー
  </button>

  <!-- コピー成功時 -->
  <button
    aria-label="コピーしました"
  >
    ✓ コピー済み
  </button>

  <!-- 招待リストの削除ボタン -->
  <button aria-label="tanaka@example.com を削除">×</button>

  <!-- 閉じるボタン -->
  <button aria-label="閉じる">×</button>
</div>

10. 実装メモ(Implementation Notes)

  • navigator.clipboard.writeText():クリップボードAPIは https:// 環境でのみ動作。localhost では動作するが、ステージング環境でHTTPを使っている場合は document.execCommand('copy') のフォールバックが必要
  • フォーカストラップの実装useEffect でモーダル内のフォーカス可能要素(button, input, select, [tabindex])を取得し、Tab / Shift+Tab が最初/最後の要素を循環するよう onKeyDown で制御する。focus-trap-react ライブラリを使うと簡単
  • メール入力のバリデーション:正規表現でのバリデーションは厳格にしすぎると正しいメールを弾く。/^[^\s@]+@[^\s@]+\.[^\s@]+$/ 程度のゆるいバリデーションで十分
  • 権限変更のリアルタイム反映:招待済みユーザーの権限をセレクトで変更したら、即時APIコールで反映するか、「保存」ボタンでまとめて送信するかを設計段階で決める

11. 関連リンク


12. まとめ

Share Modalの設計で最重要なのは「コピーフィードバック」と「フォーカストラップ」です。リンクコピーは Share Modal の最も使われる操作であり、成功が視覚的に伝わらないと が大きく損なわれます。権限レベルは技術語ではなくユーザーが理解できる言葉で表現し、aria-modal + フォーカストラップのセット実装でアクセシビリティを担保してください。

更新のお知らせ

サイトに載せていない実例や、新しい記事のお知らせはこちらで出しています。

読んだ内容を、自分の画面に当てるとき

UIXHEROは、記事を書くほかに、画面の検品・判定、デザインシステムの構築、実装と改善の伴走を受けています。何を頼めばいいか決まっていない段階の相談も、同じ窓口で受けます。

UIXHEROに頼めることを見る

※ 記事の内容についての質問や、書いてほしいテーマの要望も同じ窓口で受けています

記事をシェア

メールでお知らせを受け取る

最終更新: 2026年9月3日

この記事を書いた人

Dengen Yosho(DGYS)

Dengen Yosho(DGYS)

UI/UXデザイナー兼デザインエンジニア デザイン歴25年以上 情報設計〜UIデザイン〜React/TypeScriptによる実装までを一気通貫で担当 大手企業のDXプロジェクトや決済アプリ領域で、デザインリードとして改善と構築を経験 現在はフリーランスとして、プロダクトのUI/UX改善とデザインシステム構築を支援 長年の実務の中で感じてきたのは、 「良いUI」はセンスではなく、再現可能な判断の積み重ねであるということ UIXHEROは、 心理学や行動科学の知見を、現場で使える設計言語に翻訳するための場所 関心領域は「ユーザーの行動が変わるUI」 人の認知・注意・意思決定の構造を理解し、 “なぜそのUIが機能するのか”を言語化することを目指している

あわせて読みたい

この記事に関連する記事をご紹介します

Bar Chart(棒グラフ)

カテゴリごとの量を棒の長さで比べるチャート。ゼロ基線の扱い、並び順、縦横の選び方、しきい値の見せ方という設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
18

Donut Chart(ドーナツチャート)

中央をくり抜いた円で構成比を示すチャート。中央に置く値の選び方、円グラフとの使い分け、リングの太さ、凡例の作りという設計判断と、色だけに頼らないアクセシビリティ要件を解説する。

2026年8月27日
17

Gauge Chart(ゲージチャート)

1つの値を範囲の中に置いて示す半円のチャート。範囲の両端に意味があるかという条件、しきい値の帯の設計、色だけで良否を伝えない書き方という設計判断とアクセシビリティ要件を解説する。

2026年8月27日
16

もっと深く知りたいですか?

ここに掲載されていないトピックについても、リクエストがあれば解説記事を追加します。 わかりにくい点や、具体的な事例について知りたいことがあれば教えてください。

リクエストを送る