IPFSにファイルをアップロードしてみた!

前回の記事で、IPFSのインストール方法についてご紹介しました。
今回は実際にIPFSに対してファイルをアップロードしてみたいと思います。

前回までの操作で、ipfsコマンドがどのユーザー・どのディレクトリからでも叩ける状態になっているはずです。
今回は、自分が撮影した画像で、IPFSに上げても問題なさそうなものを使用してみました。
IPFSに一度アップロードしたファイルは基本的に二度と削除することは出来ませんので、アップロードする際は十分注意してください。

まず、IPFSにアップロードしたいファイル(形式はなんでも大丈夫ですが、あまり大きくない方がよさそうです。)をipfsコマンドを動かす環境上に用意します。

ファイルを準備したら、実際にアップロードを行ってみます。

ipfs add ファイル名

するとファイルに紐づく一意のID(ハッシュ値)が生成されます。

$ ipfs add hoge.txt

added Qm678e851755589c2ed8905b10e0e8302a694af7e40ee86abacfa4bddfba859bb1 hoge.txt

IPFSでは、このハッシュ値こそがHTTPでいうURLのような、絶対的なパスとなります。

なぜハッシュ値が使われるのかというと、もしIPFS上に全く同じファイルが存在した場合、重複したファイルを同じファイルとして扱うことができる(IPFS上では単に目的のファイルを閲覧できればいいので、何処で上げたか、誰が上げたかは区別されない)上、内容が少しでも異なっていれば違うハッシュ値になるという特性からコンテンツの内容とハッシュ値が1:1で対応するからです。

ipfsではアップロードしただけではファイルの永続性が保証されないので、ipfsコマンドで”pin”をしてファイルを永続化させます。

ipfs pin add コンテンツのハッシュ値

あとは
https://gateway.ipfs.io/ipfs/コンテンツのハッシュ値
のようにIPFSゲートウェイから参照すると、自分が先程アップロードしたコンテンツの内容がブラウザ上で表示されるはずです。

なお、実際にIPFSでWebサイトなどを公開しようとした場合を考えた時、コンテンツの更新時に毎回異なるハッシュ値が生成されることになるので、毎回リンク先が変わってしまうことになります。

これでは不便なので、IPFSには”IPNS”という仕組みが備えられています。
IPNSはIPFS上にアップロードしたコンテンツに対してランダムな名前(エイリアス)を付けることができる仕組みです。

IPNSを利用することで、元のコンテンツを更新しても、IPNS名を使えば同じ名前で更新後のコンテンツへアクセスすることができるようになります。

コンテンツをIPNSと紐づけるには

ipfs name publish コンテンツのハッシュ値

のようにコマンドを実行します。

紐づけたコンテンツは

https://gateway.ipfs.io/ipns/上のコマンドで出力されたipns名

のように各IPFSゲートウェイから参照できます。

実際にIPFSを触ってみた感想として、IPFSのアイデアはとても面白いと感じました。

特に、一度IPFS上にアップロードしてしまえば、どのIPFSゲートウェイノードからでも同じコンテンツが参照できてしまうのはなかなか面白い仕組みだと思います。

一方で、IPFS自体にはまだ認証システムが備わっておらず、アップロードしたファイルはハッシュ値さえ知られてしまえばだれでも閲覧可能であったり、
IPFS上にアップロードしたファイルはアップロードした本人ですら削除できないため、誤って重要なファイルをIPFSにアップロードしても取り消せなかったり、また使用されなくなったファイルがゴミとしてIPFS上に残り続けてしまう、などといった弱点も見えてきました。

完全に一般公開するようなコンテンツであれば現状でも問題ありませんが、HTTPをIPFSで置き換える為には、やはり認証の問題は避けては通れないと思います。

この辺りがもう少し解決されれば、いよいよ実用的に利用できる段階になっていくのではないかな、と思いました。

是非今後の展開に注目したいですね。

参考:

IPFSを触ってみた

IPFSを使って無料で静的サイトをホスティング(公開)してみる

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG