「Solidityを学び、スマートコントラクトを書けるようになった。テストネットへのデプロイも経験し、簡単なDAppなら構築できる。」
Web3エンジニアを目指すうえで、ここまで身につけていれば大きな一歩です。ただ、本番開発を任せられるエンジニアになるには、Solidityを書けるだけでは足りません。
スマートコントラクト固有の脆弱性に加え、RPCやIndexerなどの周辺システム、秘密鍵や権限の管理、デプロイ後の監視、インシデント対応まで含めて考える必要があります。
求められるのは、コードそのものだけでなく、そのコードが動く環境や運用まで含めてシステム全体を見る力です。
本記事では、「Solidityを書ける」状態から「本番開発を任せられる」状態へ進むために、どのような知識と経験が必要なのかを整理します。
Solidityが書けても「本番を任せられる」とは限らない
PoCレベルの開発と本番開発では、求められる視点が根本的に異なります。その違いと、Web3で本番運用がさらに重くなる理由を整理します。
PoC・個人開発と本番開発で求められる視点の違い
PoCや個人開発では、まず「想定した機能が正しく動くか」を確かめることが中心になります。
たとえば、Depositした資産が正しく記録され、Withdrawで指定した金額が過不足なく引き出せ、NFTのMint時に所有情報が正しく更新されるか。
こうした基本的な動作を確認することが、開発の出発点です。
一方、本番開発ではそれだけでは足りません。実際の利用環境では、想定どおりに使われるとは限らないからです。
- 予期しない値が入力されても安全に処理できるか
- Functionが想定外の順序で呼ばれても状態が破綻しないか
- 外部Contractが期待とは異なる挙動をしても影響を抑えられるか
- 管理権限の侵害や、経済的な利益を狙う攻撃者に仕様・設計の隙を突かれないか
本番を任せられるエンジニアには、機能を「正しく動かす」視点だけでなく、想定外の使われ方や攻撃を受けても安全性を保てるかまで考える力が求められます。
Web2にもある「本番運用」が、Web3ではさらに重くなる理由
テスト、監視、障害対応、アクセス制御はWeb3固有のものではありません。Web2でも、本番サービスを安定して動かすには同じ視点が必要です。
違いは、その上にWeb3特有の条件が加わることです。
| 観点 | Web2と共通すること | Web3で加わる主な論点 |
| テスト | 正常系・異常系の検証 | Contractの状態遷移、Fuzz・Invariant Test |
| 権限 | 認証・認可 | 秘密鍵、Multisig、オンチェーン権限 |
| 本番変更 | 修正・再デプロイ | Contractによって変更に制約がある |
| 資産 | DBや決済システムで管理 | Contractが資産を直接制御する場合がある |
| 監視 | エラー・障害監視 | 資産移動や特権操作などのオンチェーン監視 |
つまり、Web3は従来のソフトウェア開発と断絶した世界ではありません。
「従来の本番運用力」に「Web3固有の制約」が加わると捉えるほうが実態に近いでしょう。
スマートコントラクト固有の脆弱性とセキュアコーディング
本番を見据えるなら、まずスマートコントラクト特有の攻撃パターンを知り、それを防ぐための開発プラクティスを押さえる必要があります。
代表的な脆弱性パターンを理解する
スマートコントラクトのセキュリティを考えるうえでは、代表的な脆弱性や攻撃パターンを理解しておく必要があります。
Webアプリケーションセキュリティで知られるOWASP(Open Worldwide Application Security Project)は、スマートコントラクト向けにも「Smart Contract Top 10」を公開しており、代表的なリスクは次のとおりです。

出典:OWASP Smart Contract Top 10 2026
| リスク | 概要 |
| Access Controlの不備 | 本来は管理者に限定すべき操作を第三者が実行できてしまう |
| Reentrancy | 外部Contractから処理へ再入され、意図しない状態変更や資産移動につながる |
| Price Oracle Manipulation | 価格情報を操作し、担保評価や交換レートなどを歪める |
| Flash Loanを利用した攻撃 | 一時的な大規模資金を利用し、価格計算やBusiness Logicの弱点を突く |
| Proxy・Upgradeabilityの脆弱性 | Upgrade権限や初期化、Storage設計などの不備を悪用される |
中でもReentrancyは、外部Contractの呼び出し時に処理へ再入され、状態更新のタイミング次第で意図しない処理が実行される、スマートコントラクト固有の代表的なリスクです。
対策の一つとして、Solidity公式ドキュメントもChecks-Effects-Interactionsパターンを紹介しています(出典:Solidity Docs)。
重要なのは脆弱性の名前を暗記することではなく、「この設計は何を信頼しているのか。その前提が崩れたらどうなるのか」を考えることです。
脆弱性を防ぐための設計・開発プラクティス
本番を意識するなら、一つのセキュリティ対策だけに依存するのではなく、複数の層でリスクを減らします。
- 既知の安全な設計パターンや、OpenZeppelinなど実績のあるライブラリを活用する
- Unit Testに加えてFuzz TestやInvariant Testを行う
- Slitherなどで静的解析を行う
- 重要度に応じて第三者AuditやFormal Verificationを検討する
Slitherなど静的解析ツール(出典:GitHub – crytic/slither)やAuditは「最後の安全確認」ではなく、設計・実装・テスト・解析・レビューを重ねながらリスクを減らす手段の一つと捉えることが重要です。
スマートコントラクトの外まで見て、本番システムを設計する
セキュアなContractを書いても、それだけでは本番サービスは成立しません。周辺システム、鍵管理、デプロイ後の監視まで含めた設計が求められます。
Web3サービスはSolidityだけでは動かない

実際のWeb3サービスは、スマートコントラクト単体では成立しません。
代表的には、次のような要素が組み合わさります。
- ユーザーが操作するフロントエンド
- Blockchainへ接続するRPC
- オンチェーンデータを整理するIndexer
- ユーザーが署名するWallet
- BackendやCloud Infrastructure
- Monitoring基盤
Contract自体が安全でも、フロントエンドが改ざんされれば、ユーザーを不正なTransactionへ誘導される可能性があります。RPCが停止すれば、Contractが正常でもサービスは利用できません。
本番では、オンチェーンとオフチェーンを分離して考えるのではなく、システム全体の依存関係を見る必要があります。
Web3では「秘密鍵=権限」になる
特に重要なのが秘密鍵です。
onlyOwnerで重要Functionを管理者限定にしても、そのOwner権限を握る秘密鍵が一つの個人Walletに集中していれば、運用上のリスクは残ります。
OpenZeppelinは、単一Owner向けのOwnableに加え、複数Roleを扱えるAccessControlや複数Contractを横断管理するAccessManagerを提供しています。
公式ドキュメントでも、単純なOwnershipは小規模な仕組みに向く一方、本番用途ではより高度な権限管理が必要になり得ると説明されています(出典:OpenZeppelin Docs)。
本番では、たとえば次のような設計を検討します。
- Multisigによって重要操作に複数人の承認を要求する
- Roleごとに必要最小限の権限を割り当てる
- Timelockで重要変更の実行まで猶予時間を設ける
- 鍵の紛失や漏えい、担当者変更を想定した運用ルールを作る
コード上のアクセス制御と、現実の組織における権限管理は地続きです。
デプロイ後の監視とインシデント対応までが開発
デプロイは開発の終点ではなく、異常な資産移動やContract残高の急変、Admin権限による操作など、サービスに応じたMonitoringが欠かせません。
同時に、「問題が起きた後」の設計も欠かせません。誰がインシデントと判断し、誰がContractを止め、Multisigの署名者にどう連絡し、ユーザーへの告知や復旧を誰が判断するのかを、あらかじめ決めておきます。
技術的に停止機能があっても、緊急時に使える体制がなければ十分ではありません。本番運用力には、事故を防ぐ能力だけでなく、発生時の被害を限定する能力も含まれます。
Web2・AI・組込みの経験は、Web3でどう生きるのか

Web3に転向する際、これまでのキャリアをリセットする必要はありません。それぞれの領域で培った経験がどう活きるかを見ていきます。
Web2経験――運用・インフラ・セキュリティはそのまま土台になる
Web3へ転身するからといって、これまでの経験をリセットする必要はありません。
Web2で培ったAPI設計、CI/CD、Cloud Infrastructure、認証・認可、Monitoring、Incident ResponseなどはWeb3でも重要です。
特に本番運用を経験したエンジニアが持つ、「外部依存先は停止する」「人間は手順を間違える」「正常系だけを信用しない」といった感覚は、そのままWeb3でも生きます。
たとえば「外部APIが落ちても致命傷にならない設計にする」「秘密情報や鍵はコードに埋め込まず安全に管理する」といった原則は、呼び出す相手がAPIからRPCやOracleに変わっても本質的には変わりません。
AI開発――「システム全体を見る経験」が生きる
AI開発も、モデルを作るだけではサービスになりません。
データパイプライン、API、推論基盤、Monitoringなどを含めてシステム全体を構築します。
Web3も同様に、Contract、RPC、Indexer、Frontend、権限管理、監視を組み合わせて初めて一つのサービスになります。
AI・データ領域で培ったデータ処理の経験は、オンチェーンデータ分析や不正検知、WalletやContractの挙動分析などにも応用できます。
異常なTransactionパターンを検知するモデルを監視の仕組みに組み込むなど、AI領域の知見をWeb3のMonitoring体制に持ち込む動きも広がっています。
組込み開発――制約と異常系を意識する文化がWeb3と相性がいい
組込み開発では、限られたCPUやメモリなどの制約を意識しながら、境界値や異常系を詰めることが求められます。
Web3でもEVM上の処理にはGasコストがかかり、実装によって利用コストが変わります。また、デプロイ後の変更に制約があるContractでは、「問題が出たら後で直す」だけでは済みません。
そのため、低レイヤーの挙動やリソース制約を意識してきた経験はWeb3でも強みになります。
「メモリ確保に失敗しても安全に停止する」よう設計してきた経験は、「Gas切れやCallの失敗にどう備えるか」というWeb3特有の設計判断にもそのまま応用できます。
重要なのは、既存の専門性 × Web3固有の知識という掛け算で考えることです。
Web3エンジニアを目指すなら、何を経験し何を作るべきか
知識をインプットした先に、何を成果物として形にすべきかを考えます。
「ERC-20を作りました」で終わらせない
ERC-20やNFTを作ることは、学習の入口として有効です。
ただし、実務力を示す成果物にするなら、「Contractが動いた」の先まで進みたいところです。
成果物では「本番を想定した設計」を見せる
たとえば一つのDAppで、次の要素まで実装・設計します。
- Contract
- Unit / Fuzz / Invariant Test
- テストネットへのデプロイ
- FrontendとWalletの接続
- 管理者Role・鍵管理
- Monitoring
- Architectureを説明するREADME
- Security Consideration
READMEには、「どんな攻撃を想定したか」「なぜその権限設計にしたか」「本番なら何が不足しているか」まで記載します。
成果物で見せたいのはコード量ではなく、設計判断の過程です。
実際のインシデントやOSSから学ぶ
過去のセキュリティインシデントを分析することも有効です。
単に「Reentrancyだった」「Oracleが操作された」で終わらず、
- 何を安全だと仮定していたのか
- その前提がどう崩れたのか
- どんなTestなら発見できたか
- どんなMonitoringなら被害を早く把握できたか
まで考えます。
具体例として、2023年7月に発生したVyperコンパイラの脆弱性に起因する一連のDeFiプロトコルへの攻撃が挙げられます。原因は、Vyperコンパイラのバージョン0.2.15〜0.3.0に含まれていたバグで、@nonreentrant修飾子が本来キーごとに割り当てるべきストレージ領域を正しく確保できず、Reentrancy対策のロックが機能しない状態になっていました。
この影響で、Curve Financeを含む複数のプロトコルのプールが攻撃を受けました。DeFiハッキングを専門に追う調査報道メディアrekt.newsの集計によると、被害総額は合計で約6,900万ドルに達したとされています。
この事例が示すのは、「対策パターンを使っているから安全」という前提が、コンパイラという見えにくい層で崩れうるということです。
また、OSSのContractを読み、Testを追加したり、Issueで議論に参加したりPull Requestを送ったりすることも実務的な経験になります。
成果物で評価されるのは「何を作ったか」だけではない
採用側が見たいのは、派手なDAppだけではありません。「なぜこの設計にしたのか」「何をリスクと考えたのか」「本番化するなら何を追加するのか」を、自分の言葉で説明できることも重要です。コードそのものが同じでも、設計の背景を語れるかどうかで評価は大きく変わります。面接やポートフォリオレビューの場でこそ、この言語化の力が試されます。
まとめ|Solidityの先にある「本番を任せられる力」を身につけよう
Solidityは、Web3エンジニアとしての重要な出発点です。
ただし本番では、Contractの脆弱性という「コードの中」と、Infrastructure、Key Management、Monitoring、Incident Responseという「コードの外」の両方を見る必要があります。
そして、それらをすべてWeb3でゼロから学ぶ必要はありません。Web2の運用経験、AIのシステム設計、組込みの制約・異常系への感覚は、そのまま土台になります。
目指したいのは「コードが動く」と言える状態から、「なぜこのシステムを本番で安全に動かせると考えたのか」を説明できる状態へのステップアップです。
【記事監修者】
XTELA JAPAN株式会社(https://xtela.jp/)
代表取締役 小幡拓弥