IPFS入門

🏝️
令和3年 2年ゼミ用「IPFS解説講座」

IPFSとは

・InterPlanetary File System: 直訳で「惑星間ファイルシステム」

・一言で言うと「ファイルを分散保存するプロトコル」

・P2Pでファイルを保存する

・現在主流プロトコルであるHTTPを補完または置換するものとして位置付け

・ロケーション指向型であるHTTPに対し、IPFSはコンテンツ指向型

・ロケーション指向は「このサーバーのここにあるファイルならなんでも」

 サーバー管理が必要になる

・コンテンツ指向は「どこでもいいからこのファイル

 コンテンツがどこにあろうと関係ない

・ファイルに対しコンテンツID (CID) を発行しそれで管理

・ファイルに少しでも変更が加えられれば全く異なるCIDが発行

・CIDによりファイルを指定、取得する

・ファイルの本体は各ノードが持ってたり持ってなかったり

・隣接ノードが持ってればそこから、持ってなかったら持ってるノードを検索する

・取得用に「ゲートウェイ」が存在

・公式の提供もあれば個人によるものもある

 公式はここ

 ゼミ室でも一つ運用中。IPは157.13.61.41

・ファイルの取得時にはノード内でキャッシュが生成される

・それにより分散性が生まれる

 つまりどこからも取得リクエストがなければアップロードしたノード内でのみ完結してしまい、本質的に分散しない

インストール

公式がデスクトップクライアントアプリを提供しているのでそれを使うのが楽。

手順はここ

デスクトップアプリの他にも

ブラウザ拡張機能
コマンドラインツール

使い方

デスクトップアプリでインストールした人はアプリを開いたまま(タスクバーやステータスバーに常駐してくれる)作業をしてください。

チュートリアル的に作業を進めます。まずはGUIでの操作編です。

IPFSデスクトップを立ち上げている前提で進めます。

1. ファイルをアップロードしてみる

適当なテキストファイルを作成してください。内容はなんでも大丈夫。

人と被らない方がわかりやすいかも。ただし機密情報の取り扱いは厳禁です。

Image in a image block

ファイルが用意できたらアプリのFILESタブを開いて右上のImportボタンからファイルをアップロードします。

Image in a image block

2. ゲートウェイから探索してみる

ゼミ室のゲートウェイからファイルを探索してみましょう。

まず先ほどアップロードしたファイルのCIDを取得します。

ファイルの右端「…」をクリックして「COPY CID」を選択。クリップボードにCIDがコピーされます。

Image in a image block

次にゼミ室のゲートウェイからこのファイルを探索してみます。以下のリンクへアクセスしてみましょう。

http://157.13.61.41

ゲートウェイのトップページが表示されます。

したらブラウザの検索窓にて、URLに以下を追加し移動します。

/ipfs/<CID>

<CID> には先ほどコピーしたCIDを入力します。

例えばこんな感じ

http://157.13.61.41/ipfs/QmWNybJJsNWj63uXJoaw2r19f2EZRddos1eyCQ3np8FkTV

移動すると探索が始まります。

...が、おそらくタイムアウトしてしまいます。

Image in a image block

これは
「ゲートウェイのIPFSノードが探索を始めたが、Nginxのタイムアウト制限に間に合わなかった」
ことが原因です。

今回、皆さんのPC上のノードからファイルをアップロードしたのでそのファイルは皆さんのPC上のノードにしか存在しません。ゲートウェイのノードから世界中のノードを介し、うまくPC上のノードにアクセスできれば表示されますが、時間内にアクセスできないとこのように失敗してしまいます。

ということでPC上のノードとゲートウェイのノードを直接繋げてみましょう。

IPFS Desktopを開き、PEERSタブに移動します。

右上の「Add conneection」から以下を入力し「Add」で接続します。

/ip4/157.13.61.41/tcp/4001/p2p/12D3KooWMcscw5cmgUyD5GTL91YaCgugzJRSw5ZJEPV8FNpmmYMJ
Image in a image block

接続が完了したら再度ゲートウェイでファイルを探索してみましょう。きっとうまくいくはずです。

3. ファイルをピンする

IPFSでは使用頻度の低いファイルはガベージコレクションで破棄されてしまいます。それを防ぐための機能が「ピン」です。

ノード内で任意のファイルを「ピン留め」しておくとファイルが消えてしまうことを防げます。

ピンはFILESタブでファイルを選択、「Set Pinning」することで簡単に実行できます。

Image in a image block

また、先ほどゲートウェイからファイルを取得したのでゲートウェイ内にもファイルはキャッシュとして保存されますが、一定期間後に廃棄されます。つまり「ゲートウェイからアクセスしたし分散されて安心〜」と思ってうっかりピンを忘れてしまうとファイルはIPFS上から完全に消えます。

CLIを利用する

もっと細かいことをやるためにはCLIツールを利用しましょう。