†IPFSを実行しながら学んでいく4 ~リモートのピンニングサービスPinataを使ってみる~ †

2022.07.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

IPFSは、ストレージスペースを効率的に管理するために、使用頻度の低いアイテムに対して定期的なガベージコレクションを行うと学びました。 そして、ガベージコレクションからコンテンツを除外するにはピンニングを用いてコンテンツを固定する必要があります(常に必要なものと認識させる)

IPFSのコマンドラインツールでipfs addを行うと、ローカルのノードでは自動的にピンニングが行われます。 複数のノードを使用しないといけないケースでは、サードパーティのピンニングサービスを使って対処することになります。

サードパーティサービスにはそれぞれ、ファイルをピンニングしてそれらのピンを管理するための独自のインターフェイスがあり、 GUI、API、CLIコマンド、またはその他のツールが含まれる場合がある とのことなのですが、 ベンダーに依存しないIPFS Pinning Service APIをサポートしている場合は コマンドラインを介してIPFS自体でサポートされています。

やってみる

Pinata というサービスがIPFS Pinning Service APIをサポートしているので、今回はこのサービスを使っていきたいと思います。

IPFSのコマンドで扱うには、ipfs pin remoteコマンドを利用します。

$ ipfs pin remote --help
USAGE
  ipfs pin remote - Pin (and unpin) objects to remote pinning service.

SYNOPSIS
  ipfs pin remote

SUBCOMMANDS
  ipfs pin remote add <ipfs-path> - Pin object to remote pinning service.
  ipfs pin remote ls              - List objects pinned to remote pinning service.
  ipfs pin remote rm              - Remove pins from remote pinning service.
  ipfs pin remote service         - Configure remote pinning services.

Pinataに登録してAPI KEYを作成する

登録画面にアクセスして、アカウントを作ります。

ログイン後、API KEYSのページで新規のKeyを作成します。

ローカルのipfsコマンドラインツールからPinning Services APIを使用するので、 Pinning Services APIのところにあるトグルをすべてオンにします。

JWT(Secret access token)が必要になるので、これを控えておきます。

ipfsコマンドでリモートサービスとして登録

新しいピンニングサービスを追加するには、次のコマンドを使用します。

$ ipfs pin remote service add <<nickname>> <<endpoint URL>> <<myAccessKey>>

今回はPinataを使うので、エンドポイントのURLはhttps://api.pinata.cloud/psaです。 <<myAccessKey>>の箇所は、APIKEYを作った時に控えたJWTを利用します。

$ ipfs pin remote service add pinata https://api.pinata.cloud/psa <<myAccessKey>>

で登録しました。

ipfs pin remote service ls を実行して、登録したサービスが表示されればOKです。

$ ipfs pin remote service ls
pinata https://api.pinata.cloud/psa

pinataでピンニングを行う

ipfs pin remote addでピンニングが可能です。

$ ipfs pin remote add --help
USAGE
  ipfs pin remote add <ipfs-path> - Pin object to remote pinning service.

SYNOPSIS
  ipfs pin remote add [--service=<service>] [--name=<name>] [--background] [--] <ipfs-path>

ARGUMENTS

  <ipfs-path> - Path to object(s) to be pinned.

OPTIONS

  --service     string - Name of the remote pinning service to use (mandatory).
  --name        string - An optional name for the pin.
  --background  bool   - Add to the queue on the remote service and return immediately (does not wait for pinned status).
                         Default: false.

serviceオプションには追加したリモートサービスの名前を指定します。

nameオプションには人間が読んで分かりやすい名前をつけるときに指定します。

例) pinata にピンニングする

$ ipfs pin remote add --service=pinata --name=blogs QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz
CID:    QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz
Name:   blogs
Status: pinned

ステータスの確認

リモートでのピンニングの状況を確認するには、ipfs pin remote lsを使います

$ ipfs pin remote ls --service=pinata
QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz  pinned  blogs

pinataのWebコンソールでも確認できました。

ブラウザからコンテンツを表示

pinataのゲートウェイを使ってファイルを表示させることも可能です。

https://gateway.pinata.cloud/ipfs/QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz/

ローカルにあるファイルのバックアップ用途、別の場所からもアクセスしたいファイルがある場合などはこういったサービスを使って永続化すると良いかと思います

参考