最近話題になっているIPFS。なんやら凄いらしいけどよくわかんないって方も多いのではないでしょうか?
こういった用語ってとても似たような言葉が多かったりしますしね。(笑)
という訳で、今回は自分が学習するついでのメモとして記事作成していきます。
そもそもIPFSって何者なの?
IPFS(InterPlanetary File System)はProtocol Labsにより開発が進めれられているP2P(Peer to Peer)ネットワーク上で動作するハイパーメディアプロトコルとその実装です。
なんだそれ?って感じだと思いますので、さらに詳しく説明していきますね。
普段皆さんがWebサイトを閲覧する際にURLを打ちますが、その際頭に”http(s)://〜”と入力しますよね?それは簡単に言うと、ウェブブラウザ(SafariやChromeなど)に「この送信の約束を使ってサイトにアクセスしてね」といった命令を表しています。
当サイト(https://hirosite.com)に皆さんが接続しようとした際には、「httpsって約束で”hirosite.com”にアクセスしてね」といった意味になります。
これが現在のインターネットで主要なプロトコル(英語で”約束”といった意味)であるHTTP(Hyper Text Transfer Protocol)というものです。
このHTTPは特定のサーバにデータファイル(Webサイトなら文章や画像など)を保存しておき、そのサーバを参照(閲覧)することで情報を表示する仕組みを採っています。このやり方をロケーション指向型といいます。
しかしこのロケーション指向型には複数の弱点があります。
- 24時間365日サーバーを安定稼働させなければならない。
- アクセスの数が増えた場合にも遅延なく応答するためのインフラを準備しないといけない。
- サイトの情報を改ざんされないように、不正アクセスを防ぐための対策を継続しないといけない。
- データをサーバから削除しない、またはファイル名を変更しないようにしないといけない。
裏を返して考えてみるとサイトの管理者はこのような事も出来てしまいます。
- サイトの情報へのアクセスを自由に禁止又は制限できる。
- (上に似てるが、)サイトの情報へのアクセスに自由に課金できる。
- サイトの情報を自由に削除できる。
- サイトの情報を自由に改ざんできる。
これらの内容はSNSやその他オンラインサービスなどでも言える事であり、その管理者がもつ情報が多ければ多いほど問題ともいえます。
GoogleやFacebookが持っているビックデータは度々問題視されますしね。
※あくまでもそれが必ずしも悪では無い事は必ず理解する必要がありますが。
また、国家などの大きな機関が情報統制を行う事も可能ですよね。中国のネット規制やトルコ国内でのWikipediaへのアクセスの遮断等は有名な話です。
じゃあどうすんだ?って時に、今回の記事のメインであるIPFSというものが登場します。これはHTTPを補完または置換する、即ち後継の一種(もしくは上位互換)と捉えて頂ければわかりやすいと思います。
ではどうやって解決したかって話ですよね?
そこで最初の説明に出てきたP2P(Peer to Peer)の説明が必要になります。
この説明はこのページがとてもわかりやすいので、参考にするのをお勧めします。
簡単に要約すると、データを分散して保存する事により先にあげた課題を解決しています。
仕組みは?
ユーザーは対応ブラウザで、ipfs://{content_hash_ID}という形式でURLを入力する事によりIPFSを利用できます。
と言っても表面的な話ですよね。これをご覧になっている方はもう少し詳しく知りたい方がいらっしゃると思うので続けますねw
このIPFSを利用してユーザーが通信しようとした場合、IPFSパブリックゲートウェイを通じてアクセスする方法と、ローカルIPFSノードとしてアクセスする方法があります。
パブリックゲートウェイを通じるパターン
これまで述べきたとおりIPFSネットワークはHTTPプロトコルをベースとした既存のインターネットとは異なる独立したネットワークです。そのためIPFSのネットワークにインターネット(つまり既存のブラウザ)からアクセスするためにはIPFSネットワークへ橋渡してくれる場所を経由してアクセスする必要があります。その橋渡し役を担うのがIPFSゲートウェイであり、その中でも任意のユーザーに常時公開されているものをIPFSパブリックゲートウェイと呼びます。
https://ipfs-book.decentralized-web.jp/building_public_gateway/
ここでは一例として、IPFSでの要求を「http://~」で始まるWebサイトアドレスに変換してくれる機能を行ってくれます。
例えば後ほど紹介するBraveというブラウザを利用して、特に何も設定をせずに「ipfs://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq/wiki/Vincent_van_Gogh.html」にアクセスすると、「https://bafybeiemxf5abjwjbikoz4mc3a3dla6ual3jsgpdr4cjr3oz3evfyavhwq.ipfs.dweb.link/wiki/Vincent_van_Gogh.html」にリダイレクト(移動)されます。この後ろのURLは普通に皆さんが普段使用されているブラウザからアクセスが可能です。
この様にDNSのような役割を行ってくれます。(DNSをここで解説すると長くなってしまうので割愛します)
ローカルIPFSノードとしてアクセスするパターン
これが本来のIPFSになります。簡単にいうと、「自分も1サーバーとして他人からのアクセスを受け入れ、データを配信する立場になる。」と言った具合です。
まず説明をわかりやすくする為に2つの言葉を紹介します。Webサイトを配信する側のコンピューターを”ホスト”、閲覧する側のコンピューターを”クライアント”と言います。
例えば、AさんとBさんは同じ国に住んでいて、ある海外のサイトをIPFSを利用して閲覧するとしましょう。
Aさんはまず海外からそのサイトが保存されているサーバー(ホスト)と通信して、そのサイトを閲覧します。
Aさんはそのサイトを閲覧したので、そのサイトのデータ(写真や画像)を一時的にコンピューター内にダウンロードしてあります。
このままAさんのPCはネットに繋がっている(オンライン状態)と仮定して、Bさんが先程のサイトを閲覧したいとします。
そのBさんは海外のそのサイトが保存されているサーバーよりAさんのコンピューターの方が距離が(物理的に)近いので、Aさんのコンピューターからサーバーのデータをダウンロードします。
これによりBさんがサイトを閲覧出来るといった具合です。
この際AさんはBさんにデータを提供している事になります。
これの話を広げて行きましょう。
同じサイトを見たいCさんがいたとします。しかし、政府の情報統制によってそのサイトとの通信はシャットダウンしてしまいました。
しかし、Aさんが以前見た事によりその国の中にはそのデータが存在しています。なので不思議な事に、それを利用してCさんもこのサイトを見る事が可能なのです。
これらの過程を詳しく文章で表すと、
先程説明したローカルIPFSノードに自分のpcがなると、他のピア(コンピューター)からリクエストがあった場合にホストとしても機能するようになるといった具合です。
現時点でユーザーは使えるの?
はい。
先程少し触れましたが、JavaScriptの生みの親であるBrendan Eich氏によって開発されたBrave(ブレイブ)というWebブラウザが対応を始めました。
これによりこのBraveでは、「http://~」で始まるWebサイト以外に、「ipfs://~」で始まるWebサイトをブラウザ上で表示することが出来る様になります。
先程説明したローカルIPFSノードに自分のpcがなっているかは「brave://ipfs」で確認でき、Braveの設定→拡張機能(brave://settings/extensions)の「IPFSリソースを解決する方法」で「ローカルノード」以外のオプションを選択する事でノードを停止することも可能です。しかし、そのデータを削除するオプションは用意されていない模様です。
まとめ
今回は出来る限りわかりやすく解説してきましたが、いかがだったでしょうか?もしここがわかりにくいとかあれば、コメント欄等でご連絡頂けるとありがたいです。
コメント