IPFSの環境構築の手順と基本的なコマンドを学ぶ

IPFSの環境構築の手順と基本的なコマンドを学ぶ

今回の内容とゴール

IPFSの大まかな仕組みを理解し、実際にいくつかのコマンドを使いながらIPFSへのファイルのアップロード/ダウンロードなどの操作を学びます。

この記事のターゲット、こんな人におすすめ

・IPFSを使い始めるまでの環境構築のやり方を知りたい方
・IPFSへのファイルアップロード、ダウンロードなどの操作を学びたい方
・分散ファイルストレージ、ブロックチェーンを使ったストレージに興味がある方

必要となる前提知識

P2Pネットワーク、ブロックチェーンの基礎的知識が必要となります。

また今回までの記事をご覧になっていない方は、ぜひ下記に目を通しておいてください。

第1回 分散型ファイルストレージの概要

http://block-chain.jp/blockchain_study_salon_dojo/what-is-decentralized-distributed-storage/

第2回:IPFSとSwarmとは何か?

http://block-chain.jp/blockchain_study_salon_dojo/what-is-ipfs-and-swarm/

IPFSの環境構築

IPFSの実装には、JS版のjs-ipfsとGo版のgo-ipfsの2種類が存在しています。どちらもembeddedが可能で各言語(JS、Go)で拡張ができます。

この章ではGo版のgo-ipfsを使い、コマンドラインからの簡単な使い方を説明したいと思います。

go-ipfsをダウンロードする

まず、こちらのURLからgo-ipfsをダウンロードしてください。

(右上のボタンから適切なパッケージを取得できなかった場合は、お使いのOSに対応したバイナリを選択してダウンロードしてください。)

go-ipfsのインストール

macOS, Linuxの場合

まずはダウンロードしたgo-ipfsのファイルを解凍しましょう。
必要であれば、解凍したgo-ipfsのファイルを任意の作業用ディレクトリに移動してください。

次に、go-ipfsディレクトリに移動し、インストール用のスクリプト(install.sh)を走らせます。

$ cd go-ipfs
$ ./install.sh

install.shを実行したら、ipfsが使えるようになっているはずです。
上手くいったかどうか、helpコマンドを使って確かめてみましょう。

$ ipfs help

> USAGE:

        ipfs - Gloval p2p merkle-dag filesystem.
...

“USAGE ipfs – Gloval p2p merkle-dag filesystem.”というメッセージに続き、色々とコマンド一覧が表示されていれば成功です。

Windowsの場合

解凍したgo-ipfsのフォルダ内にある”ipfs.exe”を任意の作業用ディレクトリに移動してください。

helpコマンドを使って

$ ipfs help

> USAGE:

        ipfs - Gloval p2p merkle-dag filesystem.
...

“USAGE ipfs – Gloval p2p merkle-dag filesystem.”というメッセージに続き、色々とコマンド一覧が表示されていれば成功です。

初期化

インストールが完了したら、一番最初に行うことはIPFSを動作させるための初期化です。

このコマンドを実行することで、$HONE/.ipfs(~/.ipfs)にフォルダやconfig、datasotere、keystoreなどのファイルが自動生成されます。

(初期化)

$ ipfs init

daemonの起動

IPFSネットワークにPeerとして参加するためには、daemonコマンドでdaemonを起動させます。

$ ipfs daemon

なお、daemonを停止するコマンドは今のところ無いようなので、control + cで停止させるか、$ kill [pid] などでプロセスIDを指定してkillするなどで対応するようです。

コンテンツの参照

IPFSにアップロードされているコンテンツを参照するには、catコマンドを使います。

IPFSのREAMDMEファイルもIPFSの1つのオブジェクトとしてアップロードされていますので、daemonを通じて確認できます。

なお、下記のreadmeファイルのハッシュ値はこの例のものと異なる場合があります。

アクセスできない場合、initコマンド実行時に表示される”to get started, enter:”というメッセージに続いて記載されているコマンドとアドレスを利用してください。

$ ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/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

readmeの表示内容から、例えば./helpの内容を見るには、次のようにアクセスします。

$ ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/help

コンテンツの登録(アップロード)

IPFSにコンテンツをアップロードするには、addコマンドを使います。

まず、アップロード用のファイルを用意しましょう。ここでは、ローカルPCに以下のようなディレクトリ構造(/demo以下)を用意します。

demo/
├── index.html
└── top/
    └── main.html

demoというディレクトリ配下を再帰的に登録するには、addコマンドに-rオプションをつけます。
(コンテンツ単体であれば、addコマンドだけでアップロードできます)

レスポンスにはハッシュ化されたディレクトリやファイルの値、ハッシュ化前の元の名前が返ります。

(コンテンツの登録)

$ ipfs add -r demo

added QmeBWHaefLwKkn7TgGdzyxgtaTTRkPeM3X4RbUY4xr736c demo/index.html
added QmYdgfWR1wDRyD8E6kdd1R5JPjJ6QCG4ww1Y487GmBLx2y demo/top/main.html
added QmYTgEwKE8MzDJM6YH68WHqPJBFUoZrEpLsidBkuBRRkFi demo/top
added QmWC7RG2EL6UP5Yb4Wy4fkKapPiFMFe2DgP7GLp65xT8QG demo

分かりやすくするために、ハッシュ値をさきほどのディレクトリ構造にあてはめてみます。

demo/・・・・・・・・・・・・・ QmWC7RG2EL6UP5Yb4Wy4fkKapPiFMFe2DgP7GLp65xT8QG
├── index.html・・・・・ QmeBWHaefLwKkn7TgGdzyxgtaTTRkPeM3X4RbUY4xr736c
└── top/・・・・・・・・・・・ QmYTgEwKE8MzDJM6YH68WHqPJBFUoZrEpLsidBkuBRRkFi
    └── main.html・・・ QmYdgfWR1wDRyD8E6kdd1R5JPjJ6QCG4ww1Y487GmBLx2y

demo/index.htmlにブラウザからアクセスしてみます。

ブラウザからのアクセスの場合、ローカルで起動したIPFS daemon経由、IPFS Gateway経由での2通りのアクセスが可能です。
(Gateway経由の場合は、キャッシュ化されるために、時間がかかるかもしれません)

(ローカルdaemon経由でのアクセス)

http://localhost:8080/ipfs/QmeBWHaefLwKkn7TgGdzyxgtaTTRkPeM3X4RbUY4xr736c

(gateway経由でのアクセス)

https://ipfs.io/ipfs/QmeBWHaefLwKkn7TgGdzyxgtaTTRkPeM3X4RbUY4xr736c

コンテンツのダウンロード

コンテンツをダウンロードするには、getコマンドを使います。

ここでは、先ほど作ってaddしておいたdemo/top/main.htmlのコンテンツをダウンロードしてみます。

getコマンドの引数には、目的のコンテンツのハッシュ値を指定します。

(コンテンツのダウンロード)

$  ipfs get QmYdgfWR1wDRyD8E6kdd1R5JPjJ6QCG4ww1Y487GmBLx2y


Saving file(s) to QmYdgfWR1wDRyD8E6kdd1R5JPjJ6QCG4ww1Y487GmBLx2y
 18rmB / 18 B [======================================================] 100.00% 0s

コンテンツが正常にダウンロードされると、ローカルPC上に”QmYdgfWR1wDRyD8E6kdd1R5JPjJ6QCG4ww1Y487GmBLx2y”というファイルが作成されます。

IPfSのネーミングサービス「IPNS」を利用する

IPFSとSwarmの違いの記事で解説した、IPFSのネーミングサービスであるIPNSの使い方について説明します。

IPNSを使うとコンテンツにアクセスするためのエンドポイントのURLを固定することができます。

IPNSなしの場合、コンテンツを更新するたびにハッシュが代わり、エンドポイントのURLも変わってしまう煩雑さがありますが、IPNSを使うことでこの煩雑さから解放されます。


記事の続きはオンラインサロンにて公開中!
     

免責事項

本記事に掲載されている記事の内容につきましては、正しい情報を提供することに務めてはおりますが、提供している記事の内容及び参考資料からいかなる損失や損害などの被害が発生したとしても、弊社では責任を負いかねます。実施される際には、法律事務所にご相談ください。

技術・サービス・実装方法等のレビュー、その他解説・分析・意見につきましてはblock-chani.jp運営者の個人的見解です。正確性・正当性を保証するものではありません。本記事掲載の記事内容のご利用は読者様個人の判断により自己責任でお願いいたします。

     

コンセンサス・ベイス(株)とブロックチェーン事業を行なってみませんか?

当サイトを運営するコンセンサス・ベイス株式会社は、2015年設立の国内で最も古いブロックチェーン専門企業です。これまでに、大手企業の顧客を中心に、日本トップクラスのブロックチェーンの開発・コンサルティング実績があります。

ブロックチェーンに関わるビジネスコンサル・システム開発・教育・講演などご希望でしたら、お気軽にお問い合わせください。

     
     

ブロックチェーン学習に最適の書籍の紹介

図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書

ブロックチェーン イーサリアムへの入り口 第二版 (ブロックチェーン技術書籍)

本書は、ブロックチェーン技術に興味を持ったエンジニアや、その仕組みを学び、自分の仕事に活かしたいビジネスパーソンを対象にして、ブロックチェーンのコア技術とネットワーク維持の仕組みを平易な言葉で解説しています。この本を読んだうえで、実際にコードを書くような専門書、ブロックチェーンビジネスの解説書を読むことで、理解度が飛躍的に高まるでしょう。(はじめにより)

IPFSカテゴリの最新記事