mcpField
I
ipfs

ipfs

github.com/alphaonedevクラウド・DevOps45 回インストール
リポジトリ

ipfs について

ipfs は、IPFS を使って分散ネットワーク上でファイルを保存・共有する開発者向けのスキルです。コンテンツアドレス指定、ピア検出、ピン留め、CLI と HTTP API の操作を扱います。

主な機能

  1. 01コンテンツハッシュによるファイル指定
  2. 02DHT によるピア検出
  3. 03IPLD によるデータ構成
  4. 04ファイルのピン留め
  5. 05CLI と HTTP API の利用

活用シーン

  1. 01ブロックチェーンデータのアーカイブ
  2. 02P2P ネットワークでのファイル共有
  3. 03NFT メタデータの保存
  4. 04CID によるファイル取得と検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill ipfs

インストール後、Claude Code で/ipfsを入力して読み込まれたか確認します。

詳細

ipfs

目的

IPFS(InterPlanetary File System)は、分散型ネットワークでファイルを保存、共有するためのピアツーピアプロトコルです。中央サーバーを介さずにデータの永続性を確保します。

使用する場面

ブロックチェーンデータのアーカイブ、ピアツーピアのファイル共有、不安定なネットワークでのコンテンツ配信など、耐障害性を確保する分散ストレージが必要なアプリケーションを構築する場合にIPFSを使用します。NFTメタデータの保存や分散型アプリなど、大容量ファイルや検閲耐性のあるデータを扱う用途にも適しています。

主な機能

  • 分散ストレージ:ファイルはコンテンツハッシュ(Qm...abcのようなCID)で識別され、任意のノードからグローバルにアクセスできます。
  • ピア探索:DHTを使用してピアに自動的に接続します。ipfs config Addresses.Swarm --json '["/ip4/0.0.0.0/tcp/4001"]'で設定します。
  • バージョン管理:IPLDを使用したデータ構造のリンクに対応しています。ipfs dag putでDAGノードを追加します。
  • 暗号化:外部ツールを使ってファイルを暗号化できます。ファイルを追加する前に、libsodiumを使った対称暗号化を組み込みます。
  • ピン留め:ipfs pin add <CID>を使ってファイルをローカルストレージに手動でピン留めし、ガベージコレクションによる削除を防ぎます。

使用パターン

ファイルを追加するには、CLIからipfs add path/to/file.txtを実行し、その後CIDで参照します。コードではGo IPFSライブラリを使い、"github.com/ipfs/go-ipfs-api"をインポートして、sh := shell.NewShell("localhost:5001"); cid, err := sh.Add(strings.NewReader("data"))を呼び出します。スクリプトでは、エラーに備えてコマンドをtry-catchで囲みます。たとえば、最初にipfs daemonでデーモンが実行中か確認します。API呼び出しには、マルチパートフォームデータを使うPOST /api/v0/addなどのHTTPエンドポイントを使用します。

一般的なコマンド/API

  • ファイルを追加:ipfs add -r /path/to/dir(ディレクトリ用の再帰フラグ)。API:ファイルを含む本文を指定してPOST /api/v0/add。
  • ファイルを取得:ipfs cat <CID>で標準出力に出力します。API:GET /api/v0/cat?arg=。
  • ピンの一覧表示:ipfs pin ls --type=recursive。JSON形式で出力するには--enc=jsonを指定します。
  • 設定の構成:ipfs config --json Datastore.StorageMax "10GB"でストレージの上限を設定します。設定ファイルは~/.ipfs/configにあるJSONファイルです。
  • デーモンの起動:pubsub機能を使うにはipfs daemon --enable-pubsubを実行します。APIキーが必要な場合(例:エンタープライズゲートウェイ)、export IPFS_API_KEY=$SERVICE_API_KEYのように環境変数を設定し、ヘッダーに含めます。 curlで追加するコードスニペット:
    curl -X POST -F [email protected] http://localhost:5001/api/v0/add Goのコードスニペット:
    cid, err := sh.AddFile("/path/to/file.txt")

統合に関する注意

デーモンをローカルで実行するか、パブリックゲートウェイ(例:https://ipfs.io/ipfs/)を使用して、IPFSを他のツールと統合します。ブロックチェーンでは、コントラクトのメタデータを保存するためにIPFSをEthereumと連携させ、web3.jsでCIDを取得します。コードでは$IPFS_GATEWAYを環境変数として、エンドポイントをshell.NewShell("http://$IPFS_GATEWAY:5001")に設定します。認証には、プライベートAPIを使用する場合、Authorization: Bearer $IPFS_API_KEYのようなヘッダーを追加します。複数のネットワークを設定するには、configでswarmアドレスを指定します。たとえば、カスタムピアにはipfs bootstrap add /ip4/1.2.3.4/tcp/4001/ipfs/Qm...を追加します。

エラー処理

まずipfs idを実行して、"daemon not running"などの一般的なエラーがないか確認します。失敗した場合は、ipfs daemonで起動します。ネットワークの問題が発生した場合は、ipfs swarm connect /ip4/host/tcp/portでピアに手動接続します。APIエラーを解析します。レスポンスには、{"Message": "file not found"}のように"Message"フィールドを含むJSONが返されます。コードでは、sh.Add()の後に次のように処理します:
if err != nil { log.Fatal(err) }。権限エラーが発生した場合は、$IPFS_API_KEYが設定され、有効であることを確認します。一時的な障害には指数バックオフで再試行します。操作の前にipfs validate <CID>でCIDを検証します。

具体的な使用例

  1. ブロックチェーンストレージへのファイルのアップロード:まず、IPFS デーモンが実行中であることを確認します。ファイルを追加します:ipfs add contract.json を実行すると、Qmabcd のような CID が出力されます。この CID をスマートコントラクトに保存します。Node.js では次のようにします:
    const ipfsApi = require('ipfs-api'); const ipfs = ipfsApi('localhost', '5001', {protocol: 'http'}); ipfs.add(Buffer.from('contract data')).then(response => console.log(response[0].hash));
  2. ファイルの取得と検証:CID でファイルを取得します:ipfs get Qmabcd -o output.txt。スクリプトで整合性を検証するには、ipfs cat Qmabcd | sha256sum を実行し、元のハッシュと一致することを確認します。分散型アプリでは、ループ内で使用します。複数の CID を取得し、見つからないものは try-catch で処理します。

グラフの関係

  • 関連項目:ブロックチェーン(クラスター)。IPFS はブロックチェーンデータに分散型ストレージを提供します。
  • タグによる関連:p2p(ほかの P2P プロトコルへのリンク)、decentralized-storage(分散型データベースとの関連)、distributed-filesystem(ファイル共有スキルとの重複)。

コメント