# IPFSよさそう

By [windymelt](https://paragraph.com/@windymelt) · 2022-10-23

---

Web3の話題はせっかくだしこっちで書くことにする。

いちおうWeb3技術に入っているIPFSを触ってみている。Desktop Clientが存在するのでこれを使うとそのままIPFS上のファイルを開いたり、逆にIPFS上にファイルをアップロードしたりできる。

[https://docs.ipfs.tech/install/ipfs-desktop/](https://docs.ipfs.tech/install/ipfs-desktop/)

簡単なDesktop Clientがあることで、うお〜俺はWeb3.0にコミットメントするぞという意気込みがなくても利用可能なのが良い。ファイルのアップロードも簡単にできる。ちょうど、Docker Desktopによく似ている。

IPFS上のファイルを指し示すためのURIは`ipfs://`から始まっていて、BraveといったIPFSに対応したブラウザで開くことができるし、Chrome系ブラウザやFireFoxではIPFSに対応させるための拡張機能をインストールしても開くことができる。自分は以下の拡張機能を使っている:

[https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch/related](https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch/related)

また、AndroidやiOSにもIPFSのURIを開けるアプリがあるっぽい。自分はNothing Phoneを使っているので、Android用のIPFS Liteというアプリを使っている:

[https://play.google.com/store/apps/details?id=threads.server&hl=ja&gl=US](https://play.google.com/store/apps/details?id=threads.server&hl=ja&gl=US)

今思い付いた用法だけれど、IPFSにブログをパブリッシュすれば、サーバレスな感じでブログを運営できそうだなと思った。可能なのかはわからないが、Braveでやったら普通に動くのではないかと思う。

また、もちろんIPFSノードを自宅サーバとかで動作させるという使い方もできる。

技術的要旨
-----

IPFSは分散型のファイルシステムであり、通信路はエンドツーエンドで暗号化される。ただルーティングの秘匿化は行われていないようなので、今季アニメとかを勝手にアップロードすると普通に足が付いて捕まると思う。

だいぶ前のコンテンツだが、こういう記事を読むと様子が分かると思う:

[https://qiita.com/kikuchi\_kentaro/items/1cfcb865b97cd2b309aa](https://qiita.com/kikuchi_kentaro/items/1cfcb865b97cd2b309aa)

IPFSについて調べると、とにかく新しいからすごいんだ！とか、NFTで大儲けだ！みたいな記事がたくさんヒットするし、そういうのを広めたい人がいるのはわかるのだが、エンジニアとしては技術的に面白いから使いたいのであって、ちゃんとした技術記事が増えてほしい。いかに分散していて偉いんだみたいな思想の話が多すぎると思う。革新性を説かれてもそんなに興味が無くて、自分は単に分散型システムが好きなのだなと思う。

アップロード・ダウンロード
-------------

前述のDesktop Clientを使うか、直接`ipfs`コマンドを使うことで、IPFSにアップロードできる。一度アップロードしたファイルは全世界に公開され、誰からでも見られるようになることに注意。自分はとりあえずDesktop Clientで遊んでいる。

アップロードするとファイルごとにCIDというのが発行され、このCIDに`ipfs://`がつくことでIPFSのURIになる。

    ipfs://${CID}
    

ただ、当分HTTPとの共存を行わなければならない都合上、Public Gatewayを使った

    https://ipfs.io/ipfs/${CID}?filename=windymelt.png
    

の形式になることも多い。ここにアクセスすることで、まず`ipfs.io`がHTTPリクエストをIPFSリクエストに変換してユーザの代わりにIPFSネットワークからファイルを拾ってきてくれる。ただし、プライバシー等の都合により、キャッシュはすぐ飛んでしまうのでファイルを取ってくる時間は遅い。IPFSを効果的に使うにはDesktop Clientを使うべき。というのも、Desktop ClientはLocal Gatewayとして`localhost:8080`にHTTPサーバを立てておいてくれるからだ。

アップロードしたファイルを削除すると、手元からは削除されるが、全てのIPFSノードから削除されるとは限らないので、基本的に削除できないものとみなしておいたほうが良さそう。見られたくないファイルをプライベートで共有したいときなどは、PGP等で暗号化を挟めば問題無いと思う。PGPとIPFSを組み合わせるのはいかにも分散化されているという感じでワクワクがある。いちおう、URLを公開しなければ安全だとは思う。

とはいえ、アクセスせずにノードをダウンさせたままにしておくと、たぶんそのうちファイルは消えてしまうと思う。pinするという概念があって、他のサーバにファイルを持っておいてもらうという挙動ができるっぽい。

### 比較: Bittorrent

BitTorrentでは、ぜんぜん使われていないファイルは伝播しないのでファイルの転送が低速になるという問題があったが、IPFSでは直接ファイルを取りに行くような仕組みになっているようなので、速度はかなり速い印象がある。

### コンテンツベースURIの良いところ

IPFSにおけるURIのCIDは、コンテンツを暗号学的ハッシュ関数にかけた結果から生成されるので、同じファイルからは同じCIDしか生成されないという特徴がある。このため、同じファイルを何度アップロードしても全体としてIPFSのストレージは1つ分しか消費されない。

また、URIがハッシュ関数にかけた結果から生成されるということは、データの同一性が自動的に保証されるのが面白い。内容が違っていたら違うURIになってしまうので、同じURIを見ている限りは同じ内容を見ていることが保証できる。

文化
--

Transifexで翻訳プロジェクトがオープンになっているのが良い。自分はこのプロジェクトは面白いと思ったので日本語の翻訳で参加してみようと思う。

[https://explore.transifex.com/ipfs/](https://explore.transifex.com/ipfs/)

なんか応用できそうな事
-----------

冒頭で書いたように、ブログ記事のHTMLを直接IPFSにパブリッシュすることでブログ記事をサーバレスで公開できて面白いと思う。他には、例えばMaven Centralやnpmみたいなライブラリをホストする機能をIPFS上に置いてみるといった試みができるかもしれない。

すくなくとも、WebゲートウェイのおかげでHTTPでできることはIPFSでもできるようになっているはずである。

Yet Another HTTPという感じで面白い技術だなと思ったので、これからも見ていきたい。

[Subscribe](null)

---

*Originally published on [windymelt](https://paragraph.com/@windymelt/ipfs)*
