SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

開発者のためのブロックチェーン活用ガイド

ブロックチェーンを採用する前に考慮すべきポイント~NFTを例にしたブロックチェーンのサービス構成

開発者のためのブロックチェーン活用ガイド 第5回

NFTを利用したさまざまなサービス

 NFTを利用したサービスはマーケットプレイスだけではなくさまざま考えられます。NFTはそれを利用するサービス側で意味付けできます。例えば、ゲームならNFTはゲーム中のアイテムという意味です。ゲームがナンバリングタイトルを計画するのであれば、ユーザー側としてはNFTアイテムがナンバリング間で引き継げる仕様だったらうれしいはずで、ゲーム側としてもそのようなユーザー体験は魅力的だろうと考えてNFTにそのような意味を持たせるかもしれません。

 この考え方は、同一ゲームのナンバリングタイトルに閉じた世界ではなく、他のゲームやメタバースなどに広げて、あるひとつのNFTに複数サービスが相互乗り入れをしてもよいわけです。ブロックチェーンは、ネットワークに参加するメンバーを不特定多数とするか許可制とするかの違いはあるにせよ、それら多数のメンバーに対し公開される形となるものです。メンバーなら、実質的にだれでも自由にブロックチェーンネットワークにデプロイされているNFTのスマートコントラクトにアクセスできます。このため、開発元ではない組織が、サードパーティーとしてそのスマートコントラクトを使って何かをすることも可能です(もちろん、スマートコントラクトのロジックが都合よく利用できるようになっている前提ですが、そのロジックをどう組むかは開発者次第です)。

 また、技術的な面では、前述の通りNFTのスマートコントラクトには大きなデータを格納できないため、NFTの付帯情報であるメタデータとコンテンツ本体はオフチェーンに置き、それぞれを何らかの形でリンクします。リンクの手段としては例えばURLを用い、参照先データのURLを参照元のデータに埋め込みます(図2)。

図2 NFT(ERC721)の一般的なデータ構造と配置
図2 NFT(ERC721)の一般的なデータ構造と配置

 このようなオフチェーンのストレージは、従来おなじみの中央集権型Webサーバー+データベース(RDBやNoSQL)で構成してもかまいませんが、オフチェーンの中央集権に対してオンチェーンの非中央集権という異なるモデル間の連携は、オフチェーン側の管理者次第で破綻する可能性がどうしてもあります(例えば、サービスを一方的にやめてしまいリンク切れとなる)。そこで、オフチェーン側も非中央集権としたい場合の選択肢として登場するのが、前述の分散ファイルシステムです。例えば、分散ファイルシステムのプロダクトであるIPFSにメタデータとコンテンツを格納しておけば、NFTと同じ非中央集権型管理モデルでそれらを保存しておくことができます。

IPFSの特徴について

 IPFSは分散ファイルシステムで、ブロックチェーンと同じようにP2Pで接続された多数のコンピューター(ノードといいます)のネットワークで構成されます(なお、IPFSは正確には通信プロトコルなので、ノードの実装は複数あります)。IPFSは、以下に示すように非中央集権的な特徴を持つため、同じ特徴を持つブロックチェーンと非常に相性が良いと考えられ、Web3と呼ばれる非中央集権型Webのアイディアの文脈においても言及されることの多いプロダクトです。

 IPFSにファイルを格納すると、その内容(コンテンツ)から計算されるハッシュ値で索引付され、さらに内容が断片に分割されてネットワーク内のノードに分散配置されます。ファイルを取得する際は、索引のハッシュ値を使ってどのノードからでも当該ファイルを取得することができます(これをコンテンツアドレッシングといいます)。ちなみに、ハッシュ値はデータの中身が変われば異なる値になるので、ハッシュによる索引は実質的に改ざんされていないオリジナルのコンテンツを指し示します。

 一方、従来の中央集権的なファイルサーバーでは、ファイルの索引はファイルの置き場所(ロケーション)であるサーバーのアドレス+ディレクトリパスです(これをロケーションアドレッシングといいます)。ロケーションアドレッシングでよくある課題は、サーバーやディレクトリが移動されたり、そもそもサーバーの故障や運用停止等でアクセスできなかったりすると、索引が機能しなくなることです。つまり、ロケーションアドレッシング方式と前述のコンテンツアドレッシング方式を比較すると特定のコンピューターへの依存の要否という差異があり、これをファイル取得の点で中央集権的か非中央集権的かの差異ととらえることができます。

 IPFSを使う際にもう一つ知っておくべきことは、データの永続化に対する考え方です。一般に、ファイル内容は複数の断片に分割されて多数のノードに散らばります。ファイルの取得に際して、ユーザーはファイルのハッシュ値を任意のノードに渡すだけで、あとはシステムがファイル断片を持っているノードを探し出し、すべての断片をかき集めて自動的に復元してくれます。このため、IPFSネットワークのノード上、すべての断片につき少なくとも1つ利用できる状態である限りファイルは実質的に消失しません。ここまではよいのですが、各ノードでの断片の保持は一時的なキャッシュでしかなく、キャッシュはいずれ破棄されます。キャッシュの破棄を抑止し、ファイルをIPFSネットワークで永続化するための操作がノードへの固定化です(Pinningといいます)。永続化には誰かがノードのストレージを提供しなければならず、当然それにはコストがかかります。永続化は自分のノードで行えばよいのですが、例えば、Filecoinといった非中央集権型サービスとして展開する取り組みもあります。

まとめ

 ブロックチェーンは非中央集権、データの共有、ゼロダウンタイム、耐改ざん性という4つの特徴をもつ分散型システムですが、分散型システムと中央集権型システムと比べると、分散型システムは構造が複雑で、ノード間の合意形成といったオーバーヘッドがある分、非効率なシステムです。そのため、ブロックチェーンを採用するかどうかは、4つの特徴の要否を念頭に検討した方がよいと考えられます。例えば、システムに耐改ざん性の特徴だけを求めているなら、より効率的なシステムである中央集権型の代替プロダクトも存在します。

 ブロックチェーンを用いたサービスの世界は、スマートコントラクトをはじめとする自律的な複数の要素の組み合わせで構成されます。各要素間の関係は階層構造というよりは、要素が相互に関わりあうネットワーク構造のように考えられます。NFTというサービスの場合、構成要素は、ベースとなるNFTのスマートコントラクト、UI/UXとなるWebサービスのマーケットプレイスや個人のデバイス上のWalletアプリ、NFTのコンテンツを格納するオフチェーンストレージ、NFTに意味を与える各種サービス(ゲームやメタバースであれば、NFTはその世界内のアイテム)などです。

 ブロックチェーンはひとつの組織や個人が単独で使うシステムというよりは、やはり多数の組織や個人をつなぐネットワークとして使うシステムです。また、ネットワークに参加する各々が主体的にシステムの維持に必要な役割を果たしていくことで、ブロックチェーンはシステム全体として上手く機能し続けます。この連載の中にひとつでも興味を引くトピックがあったなら、それを足掛かりにブロックチェーンの可能性について仲間と一緒に話し合ってみたり、考えてみたりしてはいかがでしょうか。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
開発者のためのブロックチェーン活用ガイド連載記事一覧

もっと読む

この記事の著者

木下 学(NTTデータ先端技術株式会社)(キノシタ マナブ)

 ソフトウェアソリューション事業本部 デジタルソリューション事業部 データエンジニアリング担当 2014年入社。2017年からブロックチェーンを担当。 現在、NTTデータグループにおける全世界横断のブロックチェーンチームの一員として、ブロックチェーンを用いたシステム開発や技術検証を中心に、教育プログ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/16321 2022/08/18 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー