# 【簡素】Flutter × Web3に触れてみる

> Flutterで仮想通貨ウォレットやNFT、スマートコントラクトを扱うDAppは作れるのか？web3dartやWalletConnectを使った接続方法、開発時の注意点、セキュリティやUXの課題を調べてみた。

- 公開日: 2025-09-12
- 著者: Matsu
- タグ: Flutter, Web3
- URL: https://tech.anycloud.co.jp/articles/flutter-web3

---

## Flutterはブロックチェーンアプリ開発と相性がいい？

**Flutterって暗号通貨ウォレットの開発に良い選択肢かな？**

<div class="link-card-wrap"><a class="link-card" href="https://www.reddit.com/r/FlutterDev/comments/1aewqma/is_flutter_a_good_option_for_crypto_wallet/?tl=ja&amp;seeker-session=true" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">Reddit - Please wait for verification</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-01-favicon.ico" alt=""><span class="link-card-domain">www.reddit.com</span></span></span></a></div>

> やあ、こんにちは。今までいくつか暗号通貨プロジェクトを手がけてて、Web3.jsとかEthers.jsを使ってたんだけど、モバイルアプリに関してはFlutterがすごく好きでさ。 でも、それが良い選択肢なのかどうかわからないんだよね。 Dartで良いライブラリ（安全なライブラリ）ってある？ UserOperationsも使いたいんだけど、Flutterで今のところできるのかどうかもわからなくて。

Flutterはクロスプラットフォーム開発フレームワークとして人気が高まっていますが、ブロックチェーンや仮想通貨アプリとの相性はどうでしょうか？

本記事では、Flutterで「仮想通貨ウォレット」「NFT」「スマートコントラクトDApp」などを開発できるのかを調査してみました。

※（スマートコントラクトDApp：ブロックチェーン上のプログラム（スマートコントラクト）を直接呼び出して動く分散型アプリ）

## Flutterで開発できそうなこと

### Web3ライブラリを使ったウォレット接続

-   `web3dart`パッケージでEthereumとやり取り可能
-   メタマスクやWalletConnectを使うことでユーザーのウォレットに接続できる

<div class="link-card-wrap"><a class="link-card" href="https://pub.dev/packages/web3dart" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">web3dart | Dart package</span><span class="link-card-description">A Celo compatible Dart library to connect to Ethereum clients. Send transactions and interact with smart contracts! Pay transaction fees using `feeCurrencies` on Celo.</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-02-favicon.ico" alt=""><span class="link-card-domain">pub.dev</span></span></span><img class="link-card-image" src="./linkcard-02-image.webp" alt=""></a></div>

<div class="link-card-wrap"><a class="link-card" href="https://pub.dev/packages/walletconnect_dart" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">walletconnect_dart | Dart package</span><span class="link-card-description">Open protocol for connecting decentralised applications to mobile wallets with QR code scanning or deep linking.</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-03-favicon.ico" alt=""><span class="link-card-domain">pub.dev</span></span></span><img class="link-card-image" src="./linkcard-03-image.webp" alt=""></a></div>

ウォレット接続のフローイメージ

1.  WalletConnectでセッション開始（QRコード or Deeplink）
2.  ユーザーがウォレットアプリで承認
3.  Flutterアプリでアカウントアドレスを受け取り、署名やトランザクション送信が可能に

### ブロックチェーンのデータ取得

-   RPCエンドポイント（ブロックチェーンと外部アプリをつなぐAPI URL）経由で残高やトランザクション履歴取得
-   NFTメタデータの取得と表示

`web3dart`で残高を取得するコード例

```dart
final client = Web3Client('<https://mainnet.infura.io/v3/YOUR_PROJECT_ID>', Client());
final address = EthereumAddress.fromHex('0x...');
final balance = await client.getBalance(address);
print('残高: ${balance.getValueInUnit(EtherUnit.ether)} ETH');
```

### **スマートコントラクト呼び出し**

-   `web3dart`の`call`/`sendTransaction`でコントラクトの読み書き可能（ブロックチェーン上のプログラム（コントラクト）の関数を実行すること）

## 開発する上での注意点

### パッケージを使うことになるのがほとんどだが安全か見極めなければいけない

Web3関連の機能は、ほとんどが外部パッケージに依存します。

-   `web3dart`や`walletconnect_dart`などの利用は必須に近いが、メンテナンス状況・更新頻度・GitHub Issueの活発度を確認する
-   安全でないパッケージを使うと、秘密鍵や署名データの漏洩リスクがある
-   可能であればソースコードを一読し、依存ライブラリに危険な挙動がないか確認する

> 特にウォレット接続や署名周りは攻撃対象になりやすいため、信頼できるパッケージを選ぶことが非常に重要です。

近年、暗号資産に対するハッキングはどんどん増えていますので、開発者としても本当に注意しなければいけません。。。

<div class="link-card-wrap"><a class="link-card" href="https://www.coindeskjapan.com/301146/" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">CoinDesk: Bitcoin, Ethereum, XRP, Crypto News and Price Data</span><span class="link-card-description">Leader in cryptocurrency, Bitcoin, Ethereum, XRP, blockchain, DeFi, digital finance and Web 3.0 news with analysis, video and live price updates.</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-04-favicon.ico" alt=""><span class="link-card-domain">www.coindeskjapan.com</span></span></span><img class="link-card-image" src="./linkcard-04-image.webp" alt=""></a></div>

### 秘密鍵や署名処理は絶対に安全に扱わなければいけない

Flutterアプリ内に秘密鍵をハードコーディングするのはもちろん絶対にいけません。

基本的にはWalletConnectや外部ウォレットを使って、ユーザーが自分の鍵を保持したまま署名できる設計にする必要があります。

### ネットワーク遅延とUX

ブロックチェーンのトランザクションは即時確定ではありませんので、「送信中」「承認待ち」などのUIを明示した方が良さそうです。

### テストネットを活用する

Mainnetではガス代が発生してしまうので、開発時はGoerliやSepoliaなどのテストネットを使い、無料のテストETHで動作確認しましょう。

※Goerliは停止中みたいです。

<div class="link-card-wrap"><a class="link-card" href="https://bitbank.cc/knowledge/breaking/article/sdo0w86_k" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">Ethereum Foundation、Goerliテストネットの停止予定を発表 | ビットバンクプラス</span><span class="link-card-description">暗号資産やブロックチェーンに関することなら 「ビットバンクプラス」日本最大級暗号資産取引所・販売所「ビットバンク」が運営！</span><span class="link-card-meta"><span class="link-card-domain">bitbank.cc</span></span></span><img class="link-card-image" src="./linkcard-05-image.webp" alt=""></a></div>

## まとめ

Flutterでもパッケージを使うことで、ウォレット接続・残高取得・NFT表示・スマートコントラクト呼び出しは可能でした。

ただし、パッケージ選定、鍵管理やセキュリティ、UXには特に注意が必要です。

まだまだ浅い知識ですが、日常的にweb3に触れていって知見を広げられればと思います。

また実際に「ウォレット残高を取得する簡易的なアプリ」をFlutterで作ってみようと思います。

以下参考になりそうです。

<div class="link-card-wrap"><a class="link-card" href="https://qiita.com/hhatto/items/169523665daeaf95516a" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">FlutterでDApp開発 その1（導入とETH残高表示） - Qiita</span><span class="link-card-description">はじめに Flutter開発したいしたいと思いつつ年末まで来てしまいました。 ひとりアドベントカレンダーでFlutter開発にチャレンジしてみます。 環境 MacOSX 11.6 (Intel Mac) Flutter 2.8.1 web3dart 2.3.3 導入 ...</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-06-favicon.ico" alt=""><span class="link-card-domain">qiita.com</span></span></span><img class="link-card-image" src="./linkcard-06-image.webp" alt=""></a></div>

<div class="link-card-wrap"><a class="link-card" href="https://qiita.com/oggata/items/ecb21d4262e947da191b" target="_blank" rel="noopener noreferrer"><span class="link-card-body"><span class="link-card-title">Flutter + Web3dart で dAppの作成 - Qiita</span><span class="link-card-description">はじめに SmartContractをアプリから制御するために、iOSはWeb3.swift、Androidなら、web3jが用意されており、これらを用いることで、Walletの作成やContractのメソッドをcallすることができる。 今回は、iOSとAndroid両...</span><span class="link-card-meta"><img class="link-card-favicon" src="./linkcard-07-favicon.ico" alt=""><span class="link-card-domain">qiita.com</span></span></span><img class="link-card-image" src="./linkcard-07-image.webp" alt=""></a></div>
