日本語
日本語
Appearance
日本語
日本語
Appearance
IPNS (InterPlanetary Name System) は、時間とともに異なるコンテンツを指すように更新できる安定した共有可能なアドレスを提供します。IPFS の CID はコンテンツが変わるたびに変化しますが、IPNS 名前は変わりません — 指す先を更新するだけです。
Bodhi(3 名前、月 100 回発行)および Nirvana(10 名前、月 1,000 回発行)プランで利用可能です。
IPNS について詳しく
IPNS がプロトコルレベルでどのように動作するかの詳細は、IPFS 公式ドキュメントの IPNS を参照してください。

問題: IPFS にファイルの新バージョンをアップロードするたびに、異なる CID が得られます。古い CID をユーザーと共有していた場合、彼らは古いコンテンツを見続けます。毎回新しいリンクを共有する必要があります。
解決策: IPNS 名前を一度作成して共有し、コンテンツが変更されるたびに指す先を更新します。IPNS アドレスを持つ人は常に最新バージョンを取得します。
tokenURI を IPNS アドレスに向ける。スマートコントラクトを変更せずにメタデータを更新(例:ゲームアイテムのレベルアップ)。https://yourdomain.com が常に最新の IPFS コンテンツを配信するようにする。k51... で始まる)をコピー — これが永続的で共有可能なアドレスです。
QmXk7VRz... または bafybei...)を入力。https://ipfs.ninja/ipns/{your-ipns-name}https://dweb.link/ipns/{your-ipns-name}ipns://{your-ipns-name}
コンテンツが変更されたとき:
ページ下部の解決セクションで、任意の IPNS 名前の現在の CID を検索 — 自分のでも他人のでも。
任意の名前の横にある削除ボタンをクリック。IPNS レコードは 48 時間以内にネットワークから期限切れになります。
DNSLink を使用して、独自のドメイン名を IPNS アドレスに向けることができます。これにより、ユーザーは https://yourdomain.com のような通常の URL で IPFS コンテンツにアクセスできます。
IPNS 名前を作成し、コンテンツ CID を発行(上記の手順)。
ドメインの DNS プロバイダーで DNS TXT レコードを追加:
_dnslink.yourdomain.com TXT "dnslink=/ipns/{your-ipns-name}"例: IPNS 名前が k51qzi5uqu5djcpbukxs... の場合:
_dnslink.myapp.com TXT "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."dig または nslookup でレコードを確認:
dig +short TXT _dnslink.myapp.com
# Should return: "dnslink=/ipns/k51qzi5uqu5djcpbukxs..."DNSLink をサポートする IPFS ゲートウェイ経由でアクセス:
https://ipfs.ninja/ipns/myapp.comまたは IPFS 対応ブラウザ(Brave など)経由:
ipns://myapp.comDNS 伝播
DNS の変更はグローバルに伝播するまで最大 24 時間かかることがあります。TXT レコードを追加した後、テスト前に数時間お待ちください。
TIP
DNSLink の設定は一度だけです。IPNS 名前に新しい CID を発行すると、ドメインは自動的に新しいコンテンツを解決します — DNS の変更は不要です。
Cloudflare を使用している場合:
_dnslink, Content: dnslink=/ipns/k51..._dnslink.yourdomain.com, Type: TXT, Value: "dnslink=/ipns/k51..."# 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// 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 })
});# 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 例は X-Api-Key ヘッダーを使用しています。API キーページから API キーを取得してください。
curl https://api.ipfs.ninja/ipns/keys \
-H "X-Api-Key: bws_your_api_key_here"レスポンス:
[
{
"ipnsName": "k51qzi5uqu5dlvj2bv6...",
"keyName": "my-website",
"currentCid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
"lastPublishedAt": 1711123200000,
"publishCountMonth": 12,
"status": "active",
"createdAt": 1711036800000
}
]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:
{
"ipnsName": "k51qzi5uqu5dlvj2bv6...",
"keyName": "my-website",
"createdAt": 1711036800000
}発行により IPNS 名前が新しい CID を指すように更新されます。IPFS DHT に伝播し、最大 60 秒かかることがあります。
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"}'レスポンス:
{
"ipnsName": "k51qzi5uqu5dlvj2bv6...",
"cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
"published": true
}任意の IPNS 名前の現在の CID を検索します。
curl https://api.ipfs.ninja/ipns/resolve/k51qzi5uqu5dlvj2bv6... \
-H "X-Api-Key: bws_your_api_key_here"レスポンス:
{
"ipnsName": "k51qzi5uqu5dlvj2bv6...",
"cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"
}curl -X DELETE https://api.ipfs.ninja/ipns/keys/k51qzi5uqu5dlvj2bv6... \
-H "X-Api-Key: bws_your_api_key_here"レスポンス:
{ "success": true }k51...)になります。| プラン | IPNS 名前数 | 月間発行回数 |
|---|---|---|
| Dharma(無料) | 利用不可 | — |
| Bodhi($5/月) | 3 | 100 |
| Nirvana($29/月) | 10 | 1,000 |