Ipfs logo 1024 ice text

ズバリ次世代のHTTPです。

まずHTTPってなに?って人から

私たちはブラウザからWEBにアクセスするときに 毎回、欲しいコンテンツをサーバに問い合わせているわけです。

その手順をHTTPと言います。


自分:「Facebook上の俺のページちょうだい。」(リクエスト)

Facebook:「了解。探してみたらあったのでブラウザに返すね。」(レスポンス)

HTTPとは、要求して(リクエスト)、返す(レスポンス)という、この超シンプルな手順のことです。

URL(http://なんちゃら〜)というのはコンテンツの在りかがわかる住所です。もう本当シンプル。

一方でIPFSってなんでしょうね?

ちょっと遊んでみたのでざっくりメモ。

みなさんも、ぜひお試しあれ。


IPFSってなに?

スクリーンショット 2017 11 05 20 12 01

一言で言うと、コンテンツをP2Pで分散化管理できるファイルシステム。

httpは直接サーバーにコンテンツを問い合わせるのに対して、ipfsはネットワーク中に散らばっている全ノードにコンテンツのハッシュを要求します。

ハッシュってのは、コンテンツを暗号化した文字列だと思ってください。

例だとイメージしやすいかもしれません。


httpは「Facebookサーバーにあるesディレクトリ以下の猫の画像をちょうだい。」

http://facebook.com/es/猫の画像.jpg


ipfsは「誰かこのQmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXse(猫の画像のハッシュ)も持っている人いる?いたら誰でもいいのでちょうだい。」

http://localhost:8080/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXse

HTTPというのは、「何があるか」より「どこにあるか」なのです。IPFSは逆で、「どこ」はあまり重要でなく、「何(コンテンツ)」を直接問い合わせるイメージです。


IPFSを使うと何がいいの?

ぶっちゃけ、HTTPでも問題ないのですけどねw

シンプルだし、そのシンプルさ故ここまでインターネットが発達しわけです。

それでもHsTTPには弱点があります。

  • サーバーがシャットダウンされるとコンテツが見れない。
  • リンク切れを起こす。
  • ハックされても同じ、コンテンツやサービスが使えなくなる。
  • サーバーを増設するとコストがかかり、中央集権化したサービスに頼りざるを得ない
  • 故、HTTPは中央集権化したサービスを生み出す。
  • HTTPは無駄が多い。(無駄な帯域を使う。無駄に遠くまで問い合わせる。)

歴史を振り返ると、焚書というのがあったと思います。政権や権力者の思想に合わない本を燃やすアレですね。

同じことをネット上のコンテンツにもできるわけです。 気に入らないサイトを削除したり、サーバーをシャットダウンするだけでいいので簡単です。独裁者が、自分に都合の悪いコンテンツを、バシバシ消していったらどうでしょう?

これまでの人類の叡智が失われるだけでなく、情報統制なんて簡単にできてしまいます。それはなんでできるかって IPアドレスで場所が簡単に特定できるからです。

一方でIPFSは、THE Permanent Webと説明されています。永続的なWEBです。

サーバーで管理せず、ビットコインみたいに全世界のノードで分散管理します。

  • P2Pで分散管理するので、特定のサーバーに依存しない。
  • HTTPがIPアドレスを問い合わせるのに対して、IPFSはコンテンツ(ハッシュ)そのものを問い合わせる。
  • リンク切れを起こさない。
  • 自分に一番近いノードに問い合わせるので早い。
  • コンテンツはGitみたいにヴァージョン管理できる。

IPFSってのは、そもそもそのインターネットの思想に近いわけです。みんなでコンテンツを共有しあって、権力者からも情報統制されない世界。

どうですか?人類の叡智が永続化する世界ですよ。


IPFSの立ち上げ方

ここからダウンロード

※わたしは:Mac OS X


tarで解凍してipfsフォルダを/usr/local/bin/以下に移動。 (実際のファイル名はもっと長いです。)

tar xvfz go-ipfs.tar.gz
mv go-ipfs/ipfs /usr/local/bin/ipfs

ipfs helpってコマンド叩いて、以下が表示されたらおめでとう! 必ず最初にipfsってコマンドがつきます。

> ipfs help
USAGE:
ipfs - Global p2p merkle-dag filesystem. ...

実際の立ち上げ手順はこちら。

Gitに似てますね。 initするとRSA公開鍵ができますね。これで自分のPeerのIDができます。

> ipfs init
initializing ipfs node at /Users/jbenet/.go-ipfs generating 2048-bit RSA keypair...done peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z to get started, enter:
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

catコマンドでreadmeファイルが読めますね。

ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

以下が表示されるはず。


Hello and Welcome to IPFS!
〜以下省略

早速オンラインにつなげてみましょう。

別ターミナルを開いて、daemonを起動してください。

これで自分がPeerとなり、外部と接続可能になりました。

> ipfs daemon
Initializing daemon... API server listening on /ip4/127.0.0.1/tcp/5001 Gateway server listening on /ip4/127.0.0.1/tcp/8080

本ターミナルに戻って、ipfs swarm peersと入れてみましょう。実際に接続された外部のノードが表示されます。

> ipfs swarm peers /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ /ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx /ip4/134.121.64.93/tcp/1035/ipfs/QmWHyrPWQnsz1wxHR219ooJDYTvxJPyZuDUPSDpdsAovN5 /ip4/178.62.8.190/tcp/4002/ipfs/QmdXzZ25cyzSF99csCQmmPZ1NTbWTe8qtKFaZKpZQPdTFB

ブラウザ経由のWebコンソールで見るとつながっているのがわかりますね。画像だと565台と繋がってます。 (今回はChromeで開きました。Safariは何故かダメでした・・・)

http://localhost:5001/webui

スクリーンショット 2017 11 05 20 37 58

ある程度他のノードと接続されたのを確認できたら、コンテツにアクセスしてみましょう。以下はquick-startにあった動画です。

ipfs cat /ipfs/自分のハッシュ/./quick-start


↓動画 http://localhost:8080/ipfs/QmVc6zuAneKJzicnJpfrqCH9gSy6bz54JhcypfJYhGUFQu/play#/ipfs/QmTKZgRNwDNZwHtJSjCp6r5FYefzpULfy37JvMt9DwvXse

ブラウザで立ち上げると、水鳥が魚群を襲う動画が出てくると思います。サクサク動いてました。接続されるノード数が多いのと関係あるのか?

スクリーンショット 2017 11 05 20 46 23

ポイントは、これはサーバーから配信されているわけでなはないです。 近い人のノードから寄せ集めたのですね。

コンテンツはサーバーに預けず、IPを問い合わせるのではなく、コンテンツはハッシュにして、全世界のノードから集めるってことですよ。


コンテンツを追加するのは簡単

追加はaddコマンド+ファイル名です。アクセスする方法も簡単。ハッシュになったURLをブラウザに入力すればOK。httpじゃなくてipfs.ioになっているのを注目です。

> ipfs add cat.jpg

added Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u


これでアクセス。

ipfs.io/ipfs/Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u


まとめ

とまあ、今回はコマンドラインからやりましたけど。こんなのが当たり前にスマホからできるようになったら、サクサクとコンテツをやり取りできるようになりますね。

実はこれ、ブロックチェーンと親和性が高いです。なぜなら、ブロックには容量がでかいコンテンツそのものでなく、文字列だけのハッシュだけ格納すればいいわけです。大事なコンテンツがコピーやハックされることなく、より安全に管理されますね。


参考:HTTP is obsolete. It's time for the distributed, permanent web