Skip to content

IPNS — IPFS のミュータブルネーム

IPNS (InterPlanetary Name System) は、時間とともに異なるコンテンツを指すように更新できる安定した共有可能なアドレスを提供します。IPFS の CID はコンテンツが変わるたびに変化しますが、IPNS 名前は変わりません — 指す先を更新するだけです。

Bodhi(3 名前、月 100 回発行)および Nirvana(10 名前、月 1,000 回発行)プランで利用可能です。

IPNS について詳しく

IPNS がプロトコルレベルでどのように動作するかの詳細は、IPFS 公式ドキュメントの IPNS を参照してください。

IPNS Names management page

なぜ IPNS を使うのか?

問題: IPFS にファイルの新バージョンをアップロードするたびに、異なる CID が得られます。古い CID をユーザーと共有していた場合、彼らは古いコンテンツを見続けます。毎回新しいリンクを共有する必要があります。

解決策: IPNS 名前を一度作成して共有し、コンテンツが変更されるたびに指す先を更新します。IPNS アドレスを持つ人は常に最新バージョンを取得します。

一般的なユースケース

  • IPFS 上のウェブサイト — サイトをデプロイし、CID を取得し、IPNS 名前に発行。再デプロイ → 新しい CID → IPNS 名前を更新。URL は変わりません。
  • 進化する NFT メタデータ — NFT の tokenURI を IPNS アドレスに向ける。スマートコントラクトを変更せずにメタデータを更新(例:ゲームアイテムのレベルアップ)。
  • 設定ファイル — アプリが IPNS アドレスから設定を読み取る。アプリを再デプロイせずに設定を更新。
  • データフィード — 安定した IPNS アドレスの下で日次データセットや価格フィードを発行。
  • DNSLink — ドメインを IPNS に接続し、https://yourdomain.com が常に最新の IPFS コンテンツを配信するようにする。

ダッシュボードの使用

1. IPNS 名前の作成

  1. サイドバーの「ホスティング」の下の IPNS に移動。
  2. 名前を作成 をクリック。
  3. ラベル(例:"my-website")を入力し、作成 をクリック。
  4. IPNS アドレス(k51... で始まる)をコピー — これが永続的で共有可能なアドレスです。
IPNS page with created keys

2. IPNS 名前に CID を発行

  1. リストで IPNS 名前を見つけ、発行 をクリック。
  2. 指したい CID(例:QmXk7VRz... または bafybei...)を入力。
  3. 発行 をクリック。IPFS ネットワークに伝播し、最大 60 秒かかることがあります。
  4. 発行後、コンテンツは以下からアクセスできます:
    • IPFS ゲートウェイ: https://ipfs.ninja/ipns/{your-ipns-name}
    • 任意のパブリックゲートウェイ: https://dweb.link/ipns/{your-ipns-name}
    • IPFS ネイティブ: ipns://{your-ipns-name}
IPNS page with published CID

3. コンテンツの更新

コンテンツが変更されたとき:

  1. 新バージョンを IPFS にアップロード(ダッシュボードまたは API 経由)→ 新しい CID を取得。
  2. IPNS に戻り、同じ名前で 発行 をクリック、新しい CID を入力。
  3. IPNS アドレスは同じまま — それを使う人は自動的に新しいコンテンツを取得します。

4. IPNS 名前の解決

ページ下部の解決セクションで、任意の IPNS 名前の現在の CID を検索 — 自分のでも他人のでも。

5. IPNS 名前の削除

任意の名前の横にある削除ボタンをクリック。IPNS レコードは 48 時間以内にネットワークから期限切れになります。

DNSLink を使用して、独自のドメイン名を IPNS アドレスに向けることができます。これにより、ユーザーは https://yourdomain.com のような通常の URL で IPFS コンテンツにアクセスできます。

  1. IPNS 名前を作成し、コンテンツ CID を発行(上記の手順)。

  2. ドメインの DNS プロバイダーで DNS TXT レコードを追加

    _dnslink.yourdomain.com  TXT  "dnslink=/ipns/{your-ipns-name}"

    例: IPNS 名前が k51qzi5uqu5djcpbukxs... の場合:

    _dnslink.myapp.com  TXT  "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."
  3. dig または nslookup でレコードを確認

    bash
    dig +short TXT _dnslink.myapp.com
    # Should return: "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."
  4. DNSLink をサポートする IPFS ゲートウェイ経由でアクセス

    https://ipfs.ninja/ipns/myapp.com

    または IPFS 対応ブラウザ(Brave など)経由:

    ipns://myapp.com

DNS 伝播

DNS の変更はグローバルに伝播するまで最大 24 時間かかることがあります。TXT レコードを追加した後、テスト前に数時間お待ちください。

TIP

DNSLink の設定は一度だけです。IPNS 名前に新しい CID を発行すると、ドメインは自動的に新しいコンテンツを解決します — DNS の変更は不要です。

Cloudflare を使用している場合:

  1. DNSRecords に移動。
  2. 新しいレコードを追加:Type: TXT, Name: _dnslink, Content: dnslink=/ipns/k51...
  3. プロキシステータスを DNS only(グレーの雲)に設定。
  1. Route 53 のホストゾーンに移動。
  2. レコードを作成:Name: _dnslink.yourdomain.com, Type: TXT, Value: "dnslink=/ipns/k51..."

使用例

例 1:静的ウェブサイトのデプロイ

bash
# 1. Build your site
npm run build

# 2. Upload the build output to IPFS
CID=$(curl -s -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"content\": $(cat dist/index.html | base64 -w0 | jq -Rs .), \"description\": \"Website v2.1\"}" \
  | jq -r '.cid')

echo "Uploaded: $CID"

# 3. Update your IPNS name to point to the new build
curl -X POST https://api.ipfs.ninja/ipns/publish \
  -H "X-Api-Key: bws_your_api_key" \
  -H "Content-Type: application/json" \
  -d "{\"ipnsName\": \"k51qzi5uqu5dlvj2bv6...\", \"cid\": \"$CID\"}"

# Your site at ipns://k51... now serves the new version

例 2:ミュータブル NFT メタデータ

javascript
// Smart contract points tokenURI to IPNS address:
// tokenURI = "ipns://k51qzi5uqu5dlvj2bv6..."

// When the NFT evolves (e.g., game item levels up):
const newMetadata = {
  name: "Dragon Sword",
  description: "A legendary weapon — Level 5",
  image: "ipfs://QmNewImageCID...",
  attributes: [
    { trait_type: "Level", value: 5 },
    { trait_type: "Damage", value: 150 }
  ]
};

// Upload new metadata
const uploadRes = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "bws_your_api_key"
  },
  body: JSON.stringify({ content: newMetadata, description: "Dragon Sword v5" })
});
const { cid } = await uploadRes.json();

// Update the IPNS pointer — tokenURI stays the same!
await fetch("https://api.ipfs.ninja/ipns/publish", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": "bws_your_api_key"
  },
  body: JSON.stringify({ ipnsName: "k51qzi5uqu5dlvj2bv6...", cid })
});

例 3:CI/CD 統合

yaml
# GitHub Actions: auto-publish to IPNS on every push
- name: Upload to IPFS and publish IPNS
  run: |
    CID=$(curl -s -X POST https://api.ipfs.ninja/upload/new \
      -H "X-Api-Key: ${{ secrets.IPFS_NINJA_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{"content": '"$(cat build/output.json)"', "description": "Deploy ${{ github.sha }}"}' \
      | jq -r '.cid')

    curl -X POST https://api.ipfs.ninja/ipns/publish \
      -H "X-Api-Key: ${{ secrets.IPFS_NINJA_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{"ipnsName": "${{ vars.IPNS_NAME }}", "cid": "'"$CID"'"}'

API リファレンス

すべての API 例は X-Api-Key ヘッダーを使用しています。API キーページから API キーを取得してください。

IPNS キーの一覧

bash
curl https://api.ipfs.ninja/ipns/keys \
  -H "X-Api-Key: bws_your_api_key_here"

レスポンス:

json
[
  {
    "ipnsName": "k51qzi5uqu5dlvj2bv6...",
    "keyName": "my-website",
    "currentCid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
    "lastPublishedAt": 1711123200000,
    "publishCountMonth": 12,
    "status": "active",
    "createdAt": 1711036800000
  }
]

IPNS キーの作成

bash
curl -X POST https://api.ipfs.ninja/ipns/keys \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-website"}'

レスポンス 201

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "keyName": "my-website",
  "createdAt": 1711036800000
}

IPNS への発行

発行により IPNS 名前が新しい CID を指すように更新されます。IPFS DHT に伝播し、最大 60 秒かかることがあります。

bash
curl -X POST https://api.ipfs.ninja/ipns/publish \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"ipnsName": "k51qzi5uqu5dlvj2bv6...", "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}'

レスポンス:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
  "published": true
}

IPNS 名前の解決

任意の IPNS 名前の現在の CID を検索します。

bash
curl https://api.ipfs.ninja/ipns/resolve/k51qzi5uqu5dlvj2bv6... \
  -H "X-Api-Key: bws_your_api_key_here"

レスポンス:

json
{
  "ipnsName": "k51qzi5uqu5dlvj2bv6...",
  "cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
}

IPNS キーの削除

bash
curl -X DELETE https://api.ipfs.ninja/ipns/keys/k51qzi5uqu5dlvj2bv6... \
  -H "X-Api-Key: bws_your_api_key_here"

レスポンス:

json
{ "success": true }

IPNS の仕組み

  1. キー生成: IPNS 名前を作成すると、暗号キーペア(Ed25519)が生成されます。公開キーのハッシュが IPNS アドレス(k51...)になります。
  2. 発行: 発行時、「この名前は CID X を指す」というレコードに署名し、IPFS DHT(分散ハッシュテーブル)にブロードキャストします。
  3. 解決: 誰かが IPNS 名前を検索すると、IPFS ノードは DHT に最新の署名レコードを問い合わせ、CID をたどります。
  4. 再発行: IPNS レコードは 48 時間後に期限切れになります。IPFS Ninja は 12 時間ごとに自動的にレコードを再発行して有効に保ちます。
  5. セキュリティ: 秘密鍵の保持者(あなた)だけが IPNS 名前の指す先を更新できます。他の誰も名前を乗っ取ることはできません。

プランの制限

プランIPNS 名前数月間発行回数
Dharma(無料)利用不可
Bodhi($5/月)3100
Nirvana($29/月)101,000
  • レコードは 12 時間ごとに自動的に再発行され、IPFS ネットワーク上で有効に保たれます。
  • 90 日間発行されなかった名前は非アクティブとしてマークされ、再発行が停止します。
  • 非アクティブな名前は新しい CID を発行することで再アクティブ化できます。

関連リソース