
MetaMask Snapの技術解説:開発者体験、機能制限、セキュリティおよび商業的ポテンシャル分析
TechFlow厳選深潮セレクト

MetaMask Snapの技術解説:開発者体験、機能制限、セキュリティおよび商業的ポテンシャル分析
MetaMask Snapとは何か?その技術的な機能にはどのようなものがあるのか?
執筆:李大猫、Bruce
MetaMask Snap とは何か?
先日、ConsenSysは一般向けにMetaMask Snaps Open Betaの提供を開始したと発表しました。MetaMask Snapsにより、ウォレットの機能拡張が可能になり、第三者開発者が作成したアプリ(Snap)をインストールすることで新たな機能を利用できるようになります。
もしConsenSysがMetaMaskを「WeChat」のような存在に作り上げたとすれば、Snapはその「WeChatミニプログラム」に相当します。つまりMetaMaskの野心がここに表れており、ConsenSysの規模とMetaMaskのユーザー数を考慮すると、ウォレット分野の構図が大きく変わる可能性があります。
現在、公式サイトでは利用可能な35種類のSnapを公開しており、Snapアプリストアもリリースされています。https://snaps.metamask.io/

一部Snapの概要
それでは技術的視点から見た場合、MetaMask Snapとは具体的にどのようなものでしょうか? どの程度の機能制限があるのか? 安全性はどうか? 開発体験はいかがなものか? これらの要素が、MetaMask Snapの将来性を左右するかもしれません。
昨年からLXDAOはSnapの実装について深く研究しており、複数のメンバーがすでにSnapの開発に参加し、関連ハッカソンにも積極的に参加しています。本稿では上記の疑問について技術的な観点から詳しく解説し、実際にSnapを開発してその開発体験を紹介します。
MetaMask Snap 初めての体験
MetaMask Snap のインストール
通常はMetaMask Snap公式マーケットからインストールできますが、プロジェクト側の公式サイトから直接インストールすることも可能です。UniPassを例に挙げると、アプリページにアクセスするとMetaMask接続用のボタンが表示されます。

クリックすると、Snapのインストールが開始されます:

MetaMask Snap の使用方法
インストール完了後、対応する製品や機能を使い始めることができます。このアプリでは、UniPassがあなたのためにスマートコントラクトアカウントを作成し、MetaMaskのEOAアカウントから簡単に操作できるようにしてくれます。

送金操作を行う際、UniPassのSnapがポップアップされ、UniPass AAウォレットに対して本当にこの操作を実行するか確認を求められます。

MetaMaskで承認すれば、該当の操作を実行できます。このシナリオでは、MetaMaskはSnapを通じてUniPass AAウォレットを制御できるようになり、UniPassは独自のウォレットプラグインを開発しなくてもユーザーがウォレットを操作でき、非常に低コストでユーザーを獲得することが可能になります。
このインストール・使用プロセスから、何が読み取れるでしょうか?
-
Snapは細かい権限制御を備えており、ウォレット接続の許可やネットワークリクエストなども含まれます。全体的に最小権限原則(Principle of Least Privilege)に基づいて設計されており、安全性を最優先としています。
-
npm:@unipasswallet/unipass-snapからわかるように、SnapはNPMによるパッケージおよびバージョン管理を採用しています。後ほど安全性について詳しく説明します。
-
Snapは高い柔軟性を持ち、プロジェクトのニーズに応じて自由に開発し、表示内容やロジックを決定できます。ただしUIはやや簡素であり、改善の余地があります。
-
Snapの体験は非常にシンプルかつ信頼性が高く、ベータ版でありながらも実稼働レベルに達していると言えます。
ウォレット製品にとって、安全性は常に最優先事項です。次に、Snapのセキュリティ設計について分析します。
Snapは安全なのか?
Snapコードのランタイム解析
前述のように、SnapはNPMによるパッケージおよびバージョン管理を採用しており、実態はWebおよびJavaScriptベースのアプリであることがわかります。JSの文法は非常に柔軟で自由度が高いため、XSSやフィッシング攻撃のリスクが生じやすくなります。MetaMask Snapはこういった課題に対しどのように対処しているのでしょうか?
調査によると、MetaMaskはAgoricを支援しており、同社のHardened JavaScript(別名Secure EcmaScript)を「完全仮想化」サンドボックスソリューションとして深く統合しています。AgoricはJavaScriptの制限APIを設計し、TC-39(JS標準化委員会)にドラフト提案を提出しています。URL:https://github.com/tc39/proposal-ses
簡単に言えば、Hardened JavaScriptはより安全な標準JavaScriptのサブセットです。JSのいくつかの機能やメカニズムを活用しつつ、特定のAPIの呼び出し権限や方法を制限することでリスクを低減しています。これにより、対象コード専用の安全なサンドボックス環境を構築し、最小権限原則に基づいたコードの権限管理を実現しています。

AgoricとMetaMaskは共同で LavoMoat プロジェクトを開発し、Snapのセキュリティを強化しています。LavaMoatはツール群であり、主にJSプロジェクトにおける外部依存関係のセキュリティリスクを軽減し、特定のAPIやロジックに対する制限を強化します。
また、AgoricとMetaMaskは共同でブラックボックス/ホワイトボックステストを実施し、詳細なセキュリティレポートを公開しています。このため、コード実行時のレベルにおいて、Snapの安全性には十分な根拠があります。
Snapのコードはオープンソースかつ監査必須
明確なユーザー承認フローと最小権限設計に加え、公式認定されたSnapになるためにはコードをオープンソースにする必要があります。これにより、コミュニティの力で悪意のあるコードが組み込まれる可能性を大幅に低下させます。
さらに、公式サイトに掲載されているSnapはすべて第三者のセキュリティ企業によるコード監査を経てからリリースされています。これによりSnapの信頼性が大幅に向上しており、監査担当者には皆がよく知るSlowMist(慢霧)も含まれます。

現在判明しているSnapのセキュリティリスク
現時点ではSnapがNPMのパッケージおよびバージョン管理に依存しているため、コード層面での変更可能性があり、監査が義務付けられていないことから一定のセキュリティリスクが存在します。
MetaMaskはNPMプラットフォームのバージョンリリースを制御できないため、プロジェクト側はいつでも新しいバージョンをリリースし、ユーザーにインストールを促すことができます。しかし監査にはコストがかかるため、監査会社はすべてのバージョンをチェックすることはできません。そのため、「最新バージョンの変更内容がオープンソース化されていない、あるいは監査を受けていない」という状況が生じる可能性があります。
ただし、実行環境はサンドボックス内であり、最小権限設計が採用されているため、ユーザーが新たに権限を手動で承認しない限り、新バージョンのSnapは以前のバージョンと同じ権限しか持てません。しかし、あるSnapが過剰な権限を要求している場合、依然としてリスクが残ります。したがって、Snapのインストール・使用時には引き続き注意が必要です。
MetaMask Snapの技術的能力と制限
最近になって正式に発表されたMetaMask Snapですが、実際にはすでに4年間開発が続けられてきました! 最初の構想は、Dan Finlayが2019年10月10日にMedium上で発表したものです。
安全性、柔軟性、効率性のバランスを取ることは非常に大きな課題であり、MetaMaskがこの日を迎えるために多大な投資と準備を行ってきたことがうかがえます。
現在、主に以下の3つのAPIが開放されています:
-
相互運用性(Interoperability):開発者がMetaMask上で他のチェーンのウォレットを開発可能にします
-
トランザクションインサイト(Transaction Insights):ユーザーが取引を開始する前に取引データを取得し、リスクがあるかどうかを分析可能にします
-
通知(Notifications):Snapを通じて直接ユーザーにメッセージをプッシュできます(ただし、これはサイト側のサポートが必要なため、やや使い勝手が悪い)

以下では、MetaMask Snapが具体的に提供している能力とその効果を簡単に紹介し、より直感的な理解を助けます。
通知(Notification)機能
snap_notifyインターフェースを使うと、MetaMaskまたはブラウザ内で通知を表示できます。Snapはこのインターフェースを通じてユーザーに直接メッセージを送信できます。具体例は下図の通りです:

トランザクションインサイト(Transaction Insights)機能
ユーザーがスマートコントラクトとインタラクトする際、MetaMaskはSnapのonTransactionイベントをトリガーし、未署名の元取引データをonTransactionハンドラーに渡します。Snapは取引の再確認画面でカスタマイズされた表示内容を返すことができます。

この機能により、取引情報のセキュリティ監査や追加情報の表示などが実現できます。
DialogインターフェースとカスタムUI機能
Dialog機能により、Snapは独立したウィンドウを直接ポップアップでき、従来のAlert/Confirm/Promptのようなポップアップ機能を実現できます(下図参照)。それぞれ通知、確認、情報入力などの用途に適しています。

Dialogを利用することで、簡単なインタラクティブUIや操作をカスタマイズし、DAppと連携できます。
MetaMask Snapでは現時点で実現できない機能とは?
安全性などの理由により、Snapは現在サードパーティのフロントエンドフレームワークをサポートしておらず、提供されているUIKitもごく少数です。以下はinsightを使った例で、開発者が呼び出せるUIコンポーネントライブラリの全貌を示しています。

図の通り、現在利用可能なのはHeading(大文字)、Text(小文字)、Panel(カード、1回のみ使用可)、Divider(区切り線)、Copyable(クリックでコピー)、および一部のMarkdownサブセット(太字と斜体)だけです。したがって、インタラクティブな構築は現時点では困難であり、HTML埋め込みによるインタラクション操作もできません。公式Discordで質問したところ、これらはすべてセキュリティ上の配慮によるものであり、今後のバージョンで緩和される予定との回答がありました。
また、同様にセキュリティ上の理由から、外部リクエストはFetchメソッドのみサポートされており、WebSocketなどの他のプロトコルはサポートされていません。セキュリティ、機能、プライバシーの制限により、クライアント情報(例えば、現在Snapを起動しているウェブサイトのURL)を取得することもできず、より多様な機能の実現が制限されています。
こういった問題と制限の多くはセキュリティ上の配慮によるものであり、将来的にセキュリティが証明されれば、さらに多くの権限が開放されるものと思われます。
これらのAPIを提供するMetaMaskは、もはや単なるウォレットではなく、一種のオープンプラットフォームとなっています。これはかつて微信が公式アカウントやミニプログラムをリリースしたときの印象に似ており、一瞬にして単なるチャットツールではなくなった感があります。
MetaMaskは2019年に、多数のパブリックチェーンやプロジェクト、さまざまなカスタムウォレットのニーズが生まれることを見越していました。各プロジェクトが独自のプラグインを開発し、ユーザーが複数のプラグインをインストールするよりも、MetaMask Snapを基盤として開発するほうが合理的です。最初に公開されたSnapsの中には、Sui Wallet、Solana Wallet、Arweave Walletなど、非EVMエコシステムのウォレットも含まれています。既存のユーザー基盤を活かし、MetaMask Snapはウォレット市場の構図に大きな影響を与えるでしょう。
実際、MetaMask Snapの可能性は私たちの想像を超えるかもしれません。それはウォレットの範疇を超えているのです。EthSignチームの作品を見てみると、MetaMask Snapsを活用して汎用パスワードマネージャー「KeyChain」を開発しています。これにより、ブラウザ内のすべてのパスワードをウォレットの鍵で暗号化して保存できます。つまり、ウォレットさえ守れば、すべてのパスワードも守られるのです。

Snapは開発者と密接に関わるものであり、APIが開放されている以上、開発体験がどうかは非常に重要です。そこで、実際にSnapを開発して体験してみましょう。
実際にSnapを開発してテストする
アイデアの整理
一般に、ほとんどのユーザーは、自分がインタラクトしているスマートコントラクトが実際何であるかをほとんど理解していません。主に以下の問題があります:
-
取引先のコントラクトがフィッシングサイトによって置き換えられたものではないか
-
取引先のコントラクトがアップグレード可能なコントラクトではないか
-
スマートコントラクトが新しくデプロイされたばかりで、まだ検証されていないものではないか
-
取引先のコントラクトがオープンソースになっているか
普通のユーザーに取引前にSolidityコードを読ませるのは現実的ではありません。このような場面では、トランザクションインサイト機能を使ってスマートコントラクトの分析を行うのが非常に有効です。例えばAIを使って、比較的浅いレベルのセキュリティ監査を行い、80%の初歩的なフィッシング攻撃を排除できるかもしれません。
開発環境の準備
ウォレットのダウンロード
まずMetaMask Flaskをインストールする必要があります。

MetaMask Flaskは開発者中心のMetaMask拡張版で、新機能のプレビューおよび実験的機能の開発に主に使用されます。これは開発者用バージョンであるため、日常使用には使わず、普段使う秘密鍵もインポートしないでください。ここでFlaskを使う主な目的は、開発中のSnapをローカルで即座にプレビューできるようにするためです。
インストール後は、MetaMask本体や他のブラウザウォレットを一時的に無効にするか、新しいChromeプロファイルを作成して使用することをお勧めします。さもないと競合が発生します。
アカウントの作成
ウォレットのインストール後、通常のMetaMaskウォレットと同様に新規ウォレットを作成してください。ただし、これはテスト専用のウォレットであるため、普段使っているウォレットをインポートしないでください。
次に、新しく作成したウォレットにテスト用のコインをチャージする必要があります。テストコインはフェイスプリント(水道栓)から取得できます。本稿で取り上げるSnapはGoerliを使用しているため、以下はGoerliを前提とします。
テンプレートからSnapを初期化
公式ドキュメントに従い、まずCLIツール@metamask/create-snapを使用して新しいSnapプロジェクトを作成し、公式テンプレートで初期化します:

Snapのファイル構造
Snapの主要ファイルは./packages/snapにあります。ディレクトリ構造は以下の通りです:

Snapの設定ファイルはsnap.manifest.jsonにあり、本体ファイルは./src/index.tsです。非常にシンプルな構成になっています。
権限の有効化
まず権限を有効化する必要があります。snap.manifest.jsonに以下の3行を追加します:

Mainfestファイルでは、descriptionやproposedNameを変更することで、プロジェクトの説明や名称を編集できます。
取引の取得
本ケースでは、index.tsファイルの修正だけで全機能を実現できます。簡単なコード例を以下に示します。実行可能な完全なコードは https://github.com/LidamaoHub/insights を参照してください。

より複雑なSnap製品を開発する場合は、MetaMask Snap開発者ドキュメントを参照してください。
インストール後、すべての取引で同様のリスク警告メッセージが表示されるようになります:

現在のSnapの開発体験は非常にスムーズで、特に大きな問題はありません。公式テンプレートも非常に充実しています。経験豊富な開発者は数時間以内に習得し、自身が必要とするSnapの開発を開始できます。しかし、正式にリリースし、メインユーザー層に使ってもらうには、最大の障壁がセキュリティ監査です。すべての独立系開発者や小規模チームが自らのSnapを監査するリソースを持っているわけではありません。このため、Snapの数や多様性は、今後しばらくは爆発的な成長は見込めないでしょう。
開発者支援
上記のサンプルを正常に動作させることができたら、おめでとうございます。あなたはもう立派なSnap初心者開発者です!
MetaMask公式は昨年、MetaMask Grants DAOを設立し、贈呈プログラムを通じてMetaMaskエコシステム内の高価値プロジェクトを支援しています。MetaMask Grants DAOは社員主導の実験的プログラムで、世界中の外部開発者に助成金を交付し、MetaMaskエコシステム内で影響力のある体験を構築することを目指しています。MetaMaskは毎四半期の利益の一部をこのDAOに投入しており、現在の年間予算は240万ドルです。
現在、MetaMaskエコシステムを豊かにするプロジェクトであれば、誰でも公式のMetaMask Grants DAO(MetaMask Grant)の申請が可能です。詳細は https://metamaskgrants.org/ をご覧ください。
なお、LXDAOは今年、幸運にもMetaMask Grantsの支援を受け、関連プロジェクトの開発に参加し、連絡チャネルを確立しました。LXDAOメンバーで関連アイデアをお持ちの方は、より効率的に申請を提出できます。

まとめ
以上、技術的視点からSnapとは何か、安全性、機能制限、開発体験について分析しました。簡単なまとめは以下の通りです:
-
SnapはWeChatミニプログラムのような存在で、MetaMaskの可能性を大きく広げます
-
全体的な安全性は良好ですが、一定のリスクもあり、高リスク権限には引き続き注意が必要です
-
セキュリティ上の理由から、現時点で開放されている機能は少ないですが、それでも十分な可能性を持つSnapが作れます
-
4年間にわたる開発とテストを経て、開発体験は優れています。しかし、セキュリティを重視するあまりホワイトリスト制度や監査要件が設けられており、近い将来に大量のSnapが出現することは期待できません
現在、MetaMask Snapは急速に進化を続けており、今後さらに多くの権限と機能が開放されると信じています。より開放的かつ安全な仕組み、例えばApple公式の監査審査メカニズムや公式コードリポジトリのバージョン管理などが導入されれば、より多くの開発者が低コストで参加できるようになります。この問題が改善されれば、将来的に大きな需要が生まれるでしょう。Snap専任の開発者という職種が現れるかもしれません。
膨大なMetaMaskユーザー基盤を活かせば、独立系開発者にも一定のチャンスがあるかもしれません。Snapが次に生み出す画期的な革新に、我々は今か今かと待ち望んでいます。
最後に、本記事をご覧いただきありがとうございます。MetaMask Snapの現状をより多くの人に理解していただければ幸いです。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News














