IPFSを使ってみた
分散型のファイルストレージである、IPFSを使ってみたのでその流れについてメモしておく。
IPFSの特徴などはここで確認!!
やったことは、
- ファイルをIPFSに保存する
- Gatawayサーバーを通じて、ブラウザにファイルの内容を表示する
の2つ。
では、スタート。
IPFSのインストール
このサイトに書いてある通りに行った。
まずはここからOSに合ったものをダウンロードする
次に、解凍しgo-ipfs
のフォルダに入り、install.sh
を実行する。
$ tar xvfz go-ipfs.tar.gz
$ cd go-ipfs
$ ./install.sh
以上のコマンドを順に実行した後に、
$ ipfs help
を実行し、helpが表示されると、無事にipfsが利用できるようになっている。ここでIPFSを初期化するために
$ ipfs init
を実行する。
ファイルをIPFSに保存する
ここでは、IPFSに保存したいファイルからIPFSオブジェクトを作成し、IPFS上に保存する。
今回保存するのは、test.txt
という名前のファイルで中身はhello
とだけ書いてあるもの。
まずは、
ipfs add test.txt
出力結果
added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN test.txt
6 B / 6 B [============================================================================] 100.00%
ここで表示されたハッシュ値のようなものが、ファイルの識別子となる。
HTTPがロケーション指向型と呼ばれるのに対して、IPFSはコンテンツ指向型と呼ばれるのは、「どこのどのファイル」としてコンテンツを探すのではなく、この識別子だけを頼りに探すため。
出力されるハッシュ値はファイルにより異なるため、以下の作業は自身のファイルのハッシュ値を利用してください。
次に以下を実行
$ ipfs name publish QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
出力結果
Published to QmUymJjNPcPny11LaonPjUSLvm73BQUpvxGFFmFP3MjXfE: /ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
次に、IPFSのネットワークに参加し、自身のファイルを周りのノードに保存してもらう。
ipfs daemon
出力結果
Initializing daemon...
go-ipfs version: 0.4.22-
Repo version: 7
System version: amd64/darwin
Golang version: go1.12.7
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.11.2/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/192.168.11.2/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
以上のようになるとOK
このターミナルは閉じずにそのままにしておき、以下の作業は別の画面で行う。
IPFSのネットワークに接続できているか確認するためには、以下のコマンドを実行する
$ ipfs swarm peers | head
出力結果
/ip4/129.204.135.89/tcp/4001/ipfs/QmaeVNMY5ru6uHEFiyDRbV4LWMMmdu7uS9vU7dLYUofkgy
/ip4/138.201.67.219/tcp/4001/ipfs/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA
/ip4/147.75.195.153/tcp/4001/ipfs/QmW9m57aiBDHAkKj9nmFSEn7ZqrcF1fZS4bipsTCHburei
/ip4/147.75.45.187/tcp/4001/ipfs/QmSPz3WfZ1xCq6PCFQj3xFHAPBRUudbogcDPSMtwkQzxGC
/ip4/147.75.70.221/tcp/4001/ipfs/Qme8g49gm3q4Acp7xWBKg3nAa9fxZ1YmyDJdyGgoG6LsXh
/ip4/147.75.80.110/tcp/4001/ipfs/QmbFgm5zan8P6eWWmeyfncR5feYEMPbht5b1FW1C37aQ7y
/ip4/147.75.90.11/tcp/4001/ipfs/QmVLb8bi8oAmLwrTdjGurtVGN7FaJvhXP5UM3s56uyqfxL
/ip4/147.75.94.95/tcp/4001/ipfs/QmXygeCqKjpcbT9E7jgSbAvcDnPaJp9gQDzEVFZ6zzjVc2
/ip4/147.75.96.47/tcp/4001/ipfs/QmVjLyXj8NtBUt1XoEWLmwwb9NPZJrRUsjppi8a3uw29CZ
/ip4/207.148.19.196/tcp/20074/ipfs/12D3KooWGXBbSZ3ko3UvoekdnnSrdmuFic3XHuNKvGcZyrH1mVxr
次に以下のコマンドで先ほどIPFSのネットワークに伝達したファイルを保持してくれてるノードの一覧を取得することができる
$ ipfs dht findprovs QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
出力結果
QmUymJjNPcPny11LaonPjUSLvm73BQUpvxGFFmFP3MjXfE
QmQzustKyCbyy3BbpetySYk88D8mtS9No8xEJP7B5tV324
Qma8hyz3B3BWgSLyXBdDn6v4hCQv347XgMjszZoQZb1kss
QmYR4jxcGUTQZ7mH5DkfBSxpdJW5Y4CsfgHFfARLAV3goA
IPFSのファイルをブラウザから確認する
IPFS上のファイルをブラウザから確認するためには、IPFSのゲートウェイサーバーを利用する。
以下のURLでアクセスする。
https://ipfs-gateway.decentralized-web.jp/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN
そうすると、先ほどのtest.txt
の内容であるhello
と表示される。
今回利用したGateWay以外にも、https://ipfs.io/ipfs/ハッシュ値
で利用できるものもある。
また、個人でGatewayを立てることもできる。
HTMLファイルを保存すれば、Webサーバーの代わりに利用することができる。
まとめ
IPFS???みたいな状態から初めて使ってみた。具体的なシステムの中身はこれから勉強します。