0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gmail PWA で Windows 既定メールアプリ化:mailto リンクを Gmail で開く

Last updated at Posted at 2025-09-05

1. はじめに

Windows 上で mailto リンクをクリックしたとき、 Gmail で直接メールを作成したい と考えたことはないだろうか。2025年9月5日現在、Windows用の公式Gmailアプリは存在しておらず、 mailto リンクを直接Gmailで開くことはできない。
本記事では、私OnieMikelが制作した Gmail PWA を例に、Windows ネイティブ感覚で Gmail を扱う方法と、裏でどのような技術が使われているかを解説する。

以下のレポジトリは、MITライセンスで公開している。

この Gmail PWA は、Gmail 本体のラッパーであり、 Sideload 可能な Windows アプリとして mailto リンクの既定アプリとして設定可能。
「メールを送るときは Gmail を直接開きたい」人に最適なソリューションである。

2. この記事でわかること

  • webサイトをPWA化する方法
  • msix パッケージに自己署名する方法

3. 結論(すぐに Gmail PWA を利用したい人)

以下のリンクから、最新リリース版をダウンロードし、説明に従って導入すればよい。

4. なぜ Gmail PWA を作ったか

  • mailto リンクをクリックしても Gmail が開かない
  • ブラウザで Gmail を開いても、自動で入力されるテンプレをコピペする必要がある

Gmail PWA はこれらを解消し、Windows 上で Gmail を直接呼び出す「ネイティブ感覚のラッパー」 として設計した。

  • mailto リンクを Gmail に直結
  • タスクバーやスタートメニューにピン留め可能

5. Gmail PWA プロジェクト概要

Gmail PWA のディレクトリ構造(抜粋):

gmail-pwa/
├─ public/                  # 公開リソース用ディレクトリ
│   ├─ handler/             # mailto リンクなどの HTML ハンドラ
│   │   ├─ compose.html     # メール作成画面へのリダイレクト
│   │   ├─ mailto-handler.js
│   │   └─ mailto.html      # mailto ハンドリング用ページ
│   ├─ icons/               # PWA 用アイコン
│   │   ├─ icon-192.png
│   │   ├─ icon-512.png
│   │   ├─ maskable-192.png
│   │   ├─ maskable-512.png
│   │   └─ monochrome.svg
│   └─ manifest.json        # Web App Manifest
├─ offline.html             # オフライン表示用ページ
├─ index.html               # PWA 起動・Gmail へのリダイレクト
├─ main.js                  # Service Worker 登録スクリプト
├─ service-worker.js        # オフライン対応 Service Worker
├─ README.md                # 説明書
└─ LICENSE                  # MIT ライセンス

6. 技術的解説

ここからは、開発者向けに MSIX パッケージ化や Service Worker、mailto ハンドラなどの技術的ポイント を解説する。

使用技術

  • Web App Manifest v3 準拠
  • Service Worker によるオフライン対応
  • PWABuilder によるクロスプラットフォーム配布
  • Windows MSIX / Sideload による PWA 配布
  • アイコン画像は ChatGPT により作成

MSIX パッケージ化と署名

Windows 向け PWA 配布には MSIX パッケージ化と署名 が必要。署名によりユーザーは安全にインストール可能。

signtool.exe による自己署名

開発環境や社内配布向け。

# 自己署名証明書の作成
$pwd = ConvertTo-SecureString -String "YourPasswordHere" -Force -AsPlainText
$cert = New-SelfSignedCertificate -Type Custom -Subject "CN=Gmail PWA" `
    -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature

Export-PfxCertificate -Cert "Cert:\CurrentUser\My\$($cert.Thumbprint)" `
    -FilePath "C:\GmailPWA\GmailPWA.pfx" -Password $pwd

# MSIX 署名
signtool sign /fd SHA256 /a /f "C:\GmailPWA\GmailPWA.pfx" /p YourPasswordHere "Gmail PWA.sideload.msix"

⚠️ 注意

  • .pfx は秘密鍵を含むため絶対に公開禁止
  • 自己署名の場合、Windows に信頼済み証明書として登録が必要

MSIX Packaging Tool を使った GUI 署名

GUI ツールで署名作業を視覚的に確認可能。

  1. MSIX Packaging Tool を起動
  2. パッケージを選択
  3. .pfx を指定して署名
  4. 生成後 Sideload 可能

Service Worker の設置と登録

オフラインページやバックグラウンド処理の形を用意。

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js')
        .then(reg => console.log('Service Worker registered:', reg.scope))
        .catch(err => console.error('Service Worker registration failed:', err));
}

キャッシュ戦略(オフラインページ)

Gmail 本体はオンライン依存だが、オフラインページの形は用意。

const CACHE_NAME = 'gmail-pwa-cache-v1';
const OFFLINE_URL = '/offline.html';

self.addEventListener('install', event => {
    event.waitUntil(
        caches.open(CACHE_NAME)
            .then(cache => cache.add(OFFLINE_URL))
    );
});

self.addEventListener('fetch', event => {
    event.respondWith(
        fetch(event.request).catch(() => caches.match(OFFLINE_URL))
    );
});

Background Sync / Periodic Sync / Push 通知

形だけ用意。実際の動作はなし。

// Background Sync(形だけ)
self.addEventListener('sync', event => {
    if (event.tag === 'send-email-queue') {
        event.waitUntil(Promise.resolve());
    }
});

// Periodic Sync(形だけ)
navigator.serviceWorker.ready.then(reg => {
    reg.periodicSync.register('update-inbox', {
        minInterval: 60 * 60 * 1000
    });
});

// Push 通知(形だけ)
self.addEventListener('push', event => {
    const data = event.data ? event.data.json() : {};
    event.waitUntil(
        self.registration.showNotification(data.title || 'Gmail PWA', {
            body: data.body || '',
            icon: '/icons/icon-192.png'
        })
    );
});

mailto: ハンドラ登録

manifest.jsonhandler/ 内 HTML で Gmail PWA を既定アプリに。

"protocol_handlers": [
    {
        "protocol": "mailto",
        "url": "/handler/mailto.html?url=%s"
    }
]
  • mailto.html は Gmail 作成画面にリダイレクト
  • Windows の設定で Gmail PWA を既定アプリに指定

PWA インストールプロンプト

ユーザーに PWA インストールを促す UI をカスタマイズ可能。

let deferredPrompt;
window.addEventListener('beforeinstallprompt', e => {
    e.preventDefault();
    deferredPrompt = e;
    showInstallButton(); // UI 表示関数
});

installButton.addEventListener('click', async () => {
    deferredPrompt.prompt();
    const { outcome } = await deferredPrompt.userChoice;
    console.log('User response:', outcome);
    deferredPrompt = null;
});

7. まとめ

Gmail PWA は Windows 上で mailto リンクを Gmail に直結する ネイティブ感覚ラッパー
技術的には MSIX 署名や Service Worker などを組み合わせ、以下を提供:

  • Windows 既定メールアプリとして mailto 連携
  • Sideload 可能な MSIX パッケージ
  • オフラインページ・バックグラウンド処理の形(動作しない)
  • PWA インストールプロンプトのカスタマイズ

オンライン Gmail 依存だが、mailto 利用者にとっては大きな利便性を提供する。

8. 参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?