IPFSリポジトリ作成
IPFSリポジトリにファイルを追加したり参照したりする。
前回まで
情報源
IPFS基本コマンド
| コマンド | 概要 | 
|---|---|
| ipfs init | リポジトリ作成 | 
| ipfs add <path> | 指定したパスのファイルを追加する | 
| ipfs cat <ref> | 指定したデータを表示する | 
| ipfs get <ref> | 指定したデータをダウンロードする | 
| ipfs ls <ref> | 指定したデータのリンクを一覧する | 
| ipfs refs <ref> | 指定したデータのハッシュを一覧する | 
詳しくはipfs helpコマンド出力を参照。
IPFSリポジトリ作成
ipfs init
ipfs initすると~/.ipfsが作成される。これがリポジトリ。カレントがどこであれホーム直下に固定名で作成されるらしい。
ipfs init
generating ED25519 keypair...done
peer identity: 12D3KooWLA3iyFsMAq27Yo5h7ZH7pfiWGop4YpoLeq6ZhDmo975G
initializing IPFS node at /home/pi/.ipfs
Error: ipfs configuration file already exists!
Reinitializing would overwrite your keys.
ipfs cat
コンテンツを取得する。
ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme
Hello and Welcome to IPFS!
██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║
╚═╝╚═╝     ╚═╝     ╚══════╝
If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!
 -------------------------------------------------------
| Warning:                                              |
|   This is alpha software. Use at your own discretion! |
|   Much is missing or lacking polish. There are bugs.  |
|   Not yet secure. Read the security notes for more.   |
 -------------------------------------------------------
Check out some of the other files in this directory:
  ./about
  ./help
  ./quick-start     <-- usage examples
  ./readme          <-- this file
  ./security-notes
ipfs add
内容が同じならハッシュも同じ
hello worldと入力したtest1.txtファイルを作成する。
echo "hello world" > test1.txt
cat test1.txt
test1.txtファイルの内容を表示して確認する。
hello world
test1.txtファイルをIPFSリポジトリに追加する。
ipfs add test1.txt
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o test1.txt
 12 B / 12 B [================================================================================================================] 100.00%
表示されたQmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5oはtest1.txtの内容をハッシュ化したもの。同時にこれがコンテンツの識別子になる。さっそくcatコマンドで表示してみる。
ipfs cat QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
hello world
たとえファイルパスが違っても、内容が同じであれば同じハッシュになる。
echo "hello world" > test2.txt
cat test2.txt
ipfs add test2.txt
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o test2.txt
 12 B / 12 B [================================================================================================================] 100.00%
パイプで送っても同じハッシュになる。
echo "hello world" | ipfs add
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
 12 B / 12 B [================================================================================================================] 100.00%
ipfs cat QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
hello world
ディレクトリ
mkdir testdir
echo "hello world" > test1.txt
echo "hello world" > test2.txt
mv test*.txt testdir/
ls testdir/
test1.txt  test2.txt
ディレクトリを丸ごとaddする。
ipfs add -r testdir
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o testdir/test1.txt
added QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o testdir/test2.txt
added QmWpxMfLZcDVeMcBJXoZbqpaeXdzXBxoBScYSSb8ctzu8W testdir
 24 B / 24 B [================================================================================================================] 100.00%
1, 2行目のハッシュはこれまで同様hello worldをハッシュ化したもの。
3行目のtestdirディレクトリのハッシュは新しい。ipfs lsコマンドで見てみる。
ipfs ls QmWpxMfLZcDVeMcBJXoZbqpaeXdzXBxoBScYSSb8ctzu8W
QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o 12 test1.txt
QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o 12 test2.txt
ディレクトリ配下のファイルは次のように参照することもできる。
ipfs cat QmWpxMfLZcDVeMcBJXoZbqpaeXdzXBxoBScYSSb8ctzu8W/test1.txt
hello world
もちろん以下でも同じように参照できる。
ipfs cat QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
hello world
IPFSオブジェクト
ipfs addでファイルをIPFSオブジェクトとして追加してきた。その実態はリンクとデータである。それを取得するコマンドが以下。
ディレクトリ。
ipfs object get  QmWpxMfLZcDVeMcBJXoZbqpaeXdzXBxoBScYSSb8ctzu8W
{"Links":[{"Name":"test1.txt","Hash":"QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o","Size":20},{"Name":"test2.txt","Hash":"QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o","Size":20}],"Data":"\u0008\u0001"}
ファイル。
ipfs object get QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
{"Links":[],"Data":"\u0008\u0002\u0012\u000chello world\n\u0018\u000c"}
| ハッシュ | 内容 | 
|---|---|
| QmWpxMfLZcDVeMcBJXoZbqpaeXdzXBxoBScYSSb8ctzu8W | testdirディレクトリ | 
| QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o | hello worldファイル | 
IPFS Companion
IPFS Companionはipfs://ハッシュとすると表示できるブラウザ拡張。
たとえば以下はhello worldのテキストが表示される。
ipfs://QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
このときURLが以下のように変換される。
- https://ipfs.io/ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
以下は猫の画像が表示される。
ipfs://QmZZrDCuCV5A3WsxbbC6UCtrHtNs2eVyfJwF7JcJJoJGwV
このときURLが以下のように変換される。
- https://ipfs.io/ipfs/QmZZrDCuCV5A3WsxbbC6UCtrHtNs2eVyfJwF7JcJJoJGwV