前回はIPFSの特徴や全体アーキテクチャの説明しました。
今回は実戦形式で手を動かすということを主眼において解説していきます。
IPFSのインストール
下記を参考にしてテスト、学習目的でサクッと使える状態にします。
コンテンツの操作
コンテンツの追加
コンテンツをIPFSネットワークに登録します。登録することでコンテンツが分割されIPFSネットワークで閲覧できるようになります。
つまりブラウザから ipfs://xxxxx
でアクセスできるようになったり、IPFSとHTTPのゲートウェイを通して http://xxxx
でアクセスできるようになります。
ipfs add
コマンドで追加します。
コマンド実行後に QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
という文字列が生成されています。これはコンテンツID(CID)です。このコンテンツにアクセスするときに、このコンテンツIDを使います。
## ファイルをIPFSに登録
$ ipfs add ipfs-text.txt
added QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ ipfs-text.txt
12 B / 12 B [===========================================================================================================] 100.00%ubuntu@ip-10-0-0-248:~/ipfs-file$
コンテンツの閲覧
コンテンツを見るにはコンテンツIDが必要です。
$ ipfs cat QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
hello, ipfs
コンテンツの取得
IPFSネットワークにあるコンテンツを取得(保存)します。
$ ipfs get QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
Saving file(s) to QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
12 B / 12 B [========================================================================================================] 100.00% 0s
ubuntu@ip-10-0-0-248:~/ipfs-file$ ll
total 20
drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 19 03:12 ./
drwxr-x--- 7 ubuntu ubuntu 4096 Apr 19 03:07 ../
-rw------- 1 ubuntu ubuntu 12 Apr 19 03:12 QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
-rw-rw-r-- 1 ubuntu ubuntu 12 Apr 19 03:05 ipfs-text.txt
-rw-rw-r-- 1 ubuntu ubuntu 12 Apr 19 03:07 test-file.md
ubuntu@ip-10-0-0-248:~/ipfs-file$ cat QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
hello, ipfs
コンテンツの内容を変更する
IPFSネットワークに登録したコンテンツを変更することもできます。しかし、これを行うとコンテンツIDが変わってしまいます。
## ファイルの中身を見る
$ ipfs cat QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ
hello, ipfs
## ファイルをIPFSに登録
$ ipfs add test.txt
added QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ test.txt
12 B / 12 B [===========================================================================================================] 100.00%
## ファイルを編集
$ vi test.txt
hello, ipfs modify
## ファイルをIPFSに再登録
$ ipfs add test.txt
added QmYMX7T6fa6edsZtvz7uaEKUzjrsUS9n9gYcdQbR1cimmc test.txt
19 B / 19 B [===========================================================================================================] 100.00%
ファイルの中身が同じでファイル名が違うという条件だとCIDは同じになります。
それを確認してみましょう
$ cat ipfs-text.txt
hello, ipfs
$ cat test-file.md
hello, ipfs
## ファイルをIPFSに登録
$ ipfs add ipfs-text.txt
added QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ ipfs-text.txt
12 B / 12 B [===========================================================================================================] 100.00%ubuntu@ip-10-0-0-248:~/ipfs-file$
## ファイルをIPFSに登録
$ ipfs add test-file.md
added QmWCrE2Cb6DS6i8UJCx3yuZJz7o7a7bUzKMshADHkiMZNJ test-file.md
12 B / 12 B [===========================================================================================================] 100.00%ubuntu@ip-10-0-0-248:~/ipfs-file$
IPNS
ファイルを編集するとCIDが変わってしまい、アクセスするときの名前も変わってしまいます。
これは運用上大変なため、IPNSという仕組みを使って同じ名前でアクセスできるようにします。
## ディレクトリ配下のファイルを追加する
$ ipfs add -r test-page/
added QmcC9oDaHU74QgXGxdVcfa3UZVu4cWbGk8JQQRATHNHmRF test-page/index.html
added QmXi2mj3KbP6HREi9Vj5keYwTmE1VUrnVxchVyqRWBz3wL test-page
## IPNFS二登録する
$ ipfs name publish QmcC9oDaHU74QgXGxdVcfa3UZVu4cWbGk8JQQRATHNHmRF
Published to k51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn: /ipfs/QmcC9oDaHU74QgXGxdVcfa3UZVu4cWbGk8JQQRATHNHmRF
ゲートウェイ経由でアクセス
前回、k51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn
が生成されました。これを使ってアクセスします。
$ curl http://127.0.0.1:8080/ipns/k51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn
<html>
<head><title>test-page</title></head>
<body><center>
<h1>It's a Nice Day!!</h1>
</center></body>
</html>
ブラウザでアクセスする
ファイルを編集した後に同じことを繰り返します。
$ ipfs add -r test-page/
added Qmait5a9gaeFcxV4da7F4kny2NsdCfH1Gjs7YrthizZk23 test-page/index.html
added QmZpEhNpd7MCrFrMLKHnvwXSxcjMDYwcGJgkfjg9Z7yy42 test-page
142 B / ? [-------------------------------------------------------------------------------------------=------------------------]
$ ipfs name publish Qmait5a9gaeFcxV4da7F4kny2NsdCfH1Gjs7YrthizZk23
Published to k51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn: /ipfs/Qmait5a9gaeFcxV4da7F4kny2NsdCfH1Gjs7YrthizZk23
生成されたk51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn
は先ほどと変わりません。
紐付いているコンテンツIDを確認する
$ ipfs name resolve k51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn
/ipfs/Qmait5a9gaeFcxV4da7F4kny2NsdCfH1Gjs7YrthizZk23
ゲートウェイ経由でアクセス
<h1>Let's go out!!</h1>
が追加されています。
$ curl http://127.0.0.1:8080/ipns/k51qzi5uqu5dgdbdg16gbu0t26l8lrjs6q30pi48209xy56aybx59gyaohcwcn
<html>
<head><title>test-page</title></head>
<body><center>
<h1>It's a Nice Day!!</h1>
<br/>
<h1>Let's go out!!</h1>
</center></body>
</html>
今回はコマンドレベルでIPFSを見てみました。