更新情報 v0.1.8

SWING の新しいバージョンが出たよ。今回は v0.1.7 と v0.1.8 の 2 つをまとめて見ていくね。
10/14 に v0.1.7 と v0.1.8 が出ました。v0.1.7 では、作者がサイトの公開をやめても、ミラーしている人がサイトを見つけてもらえるようにイベントを再送するようになりました。v0.1.8 では、自分のノードにインターネットから直接つながるかがダッシュボードで分かるようになり、参加者同士でつながりやすくなる機能が増えました。この記事では、2 つのバージョンで変わったところをまとめます。
ミラーしている人がサイトイベントを再送する機能を追加(v0.1.7)
SWING のサイトは、作者が Nostr のリレーに出す「サイトイベント」で見つけてもらいます。これまでは、作者が swing publish をやめてリレーからサイトイベントが消えると、まだ他にサイトを持ち続けている人がいても、新しく参加した人はそのサイトをミラーする手段がありませんでした。
v0.1.7 からは、ミラーしている人が、保存しているサイトのサイトイベントを作者の署名のまま手元に持っておきます。そして 1 時間に 1 回ほど、リレーごとにそのサイトイベントが残っているかを確かめ、無くなっているリレーに再送します。署名は作者のものなので、再送する人が勝手に中身を書き換えることはできません。
また、swing sites・swing replicas・swing webring とダッシュボードの一覧は、リレーから消えたサイトでも、手元に持っているサイトイベントで補って表示するようになりました。

作者さんがお休みしていても、ミラーしている人がサイトを覚えていてくれるんだね。
サイトを取り下げたいときの方法を明記(v0.1.7)
ほかの人が再送してくれるので、swing publish をやめても SWING からサイトが消えるとは限りません。明示的に取り下げたいときは、次のどちらかを行ってください。
- 新しいバージョンで置き換える: 確実な方法です。取り下げたことを伝えるページだけのサイトなどを
swing publishで公開します。新しいバージョンは古いバージョンより優先されるので、古いバージョンのサイトイベントが再送されても上書きされません。 - Nostr の削除要求(NIP-09 の kind 5)を出す: Nostr のクライアントからサイトイベントの削除要求を出すと、それを見つけたミラーはそのサイトのイベントを再送しなくなります。ただし、削除要求に従うかはリレーごとに違うので、確実に取り下げたいときは置き換えと組み合わせてください。
どちらの方法でも、すでにミラーされた内容が、ほかの人の手元からすぐに消えるわけではありません。くわしくは 公開の手引き を見てください。
外から直接つながるかを確認できるように(v0.1.8)
ほかの参加者があなたのサイトをミラーできるかどうかは、インターネットから自分のノードに直接つながるかで大きく変わります。v0.1.8 では、ダッシュボードの設定画面に「ネットワーク」パネルが増えました。SWING が使っている IPFS ノードの Kubo が調べた結果を、「外から直接アクセスできる」「外から直接アクセスできない」「判定中」「オフライン」のどれかで表示します。

家のネットワークの多くは、ルーターの内側にあるので、外から直接はつながりません。そうしたノードどうしは、双方から同時に接続して通り抜ける「ホールパンチ」がうまくいかないと、データをやりとりできません。
外から届かない状態のときは、ルーターで 4001/tcp と 4001/udp を SWING を動かしているパソコンに転送すると、届くようになることがあります。プロバイダー側にもう 1 段ルーター(CGNAT)があるようなら、その注記も出ます。そのときは自分のルーターの転送だけでは届かないので、IPv6 が使えるかなどを確かめてみてください。くわしい直し方は、パネルのリンクから開ける 運用の手引き にまとめています。
判定には Kubo の起動から数分かかります。コマンドでは swing status の先頭の Reachability: の行に同じ結果が出ます。

わたしのパソコンは外から届かないって出ちゃった……。ルーターの設定画面、ちょっとのぞいてみるね。
外から届くノードを「アンカー」として使う機能を追加(v0.1.8)
外から届かないノードどうしでもサイトを渡せるように、v0.1.8 では外から届くノードをさがして「アンカー」として使うようになりました。
- 一定時間外から届く状態が続いたノードは、自分がアンカーだということを Nostr で知らせます(このお知らせを広告といいます)。届かなくなると、その広告を取り下げます。
- 各ノードは、自分がミラーしている人たちのアンカーから最大 4 つを選び、そこへの接続を張り続けます。相互にミラーしている人のアンカーを先に選び、残りは自分がミラーしているサイトを多くミラーしているアンカーから選びます。
外から届かないノードでも、自分から張った接続なら相手から使ってもらえます。アンカーはその接続を通して、届かないノードのサイトをミラーできます。つまり、外から届く人が 1 人いれば、その人を中心にサイトをミラーしてもらえるようになります。
どれも自動で行われるので、設定を変えなくても使えます。選んだアンカーと、自分が広告しているかどうかは、上の「ネットワーク」パネルで確かめられます。
ただし、広告にはノードの ID(PeerID)が載り、あなたの Nostr の公開鍵とそのノードが結びつきます。IP アドレスは載せません。広告したくないときは、設定画面の [anchor] の advertise を false にしてください。張り続ける接続の数は max_peers(0〜16、既定 4)で変えられます。

届く人がアンカーになって、届かない人どうしをつないでくれるんだね。わたしも届くようになったら、アンカーになってみようかな。
デスクトップ画面で外からの接続状況を表示(v0.1.8)
デスクトップ画面のタスクバーの右下にある、ネットワークのアイコンが外からの接続状況を表すようになりました。左から、外から直接つながる・つながらない・判定中・オフラインです。マウスを乗せると、ツールチップでも状態を読むことができます。

また、デスクトップ画面のツールチップの内容が、ダッシュボードの表示言語で出るようになりました。英語で使っている人も、アイコンだけのボタンの意味をツールチップで読めます。画面に表示される言語は、これまでどおり日本語のままです。
そのほかの変更
- Linux で
install.sh --serviceを使って更新したとき、別の場所にあるswingを起動するサービスを、新しいswingに登録し直してしまう不具合を直しました。今は警告を出して、そのサービスには触りません(v0.1.7)。 - サイトのタイトルやメッセージを短く切って表示するとき、絵文字や国旗、濁点などを途中で切らないようにしました(v0.1.8)。
- タイトルに、見えない書式文字(絵文字をつなぐゼロ幅接合子など)が入っていて公開できなかったとき、その理由をエラーに書くようにしました。
👨👩👧のようにいくつかの絵文字をつないだ絵文字は、今はまだタイトルに使えません(v0.1.8)。 - 設定の編集で、
[policy]のnip05などに使えない値を入れたとき、どの設定がおかしいかをエラーに出すようにしました(v0.1.8)。 - プロトコルの説明(
docs/protocol.md)を組み直し、サイトイベントの再送に関する規則を足しました(v0.1.7)。アンカーの広告の仕様を足しました(v0.1.8)。タイトルに見えない書式文字を入れてもよい(受け取る側は無視してもよい)ことにしました(v0.1.8)。
更新のしかた
更新のしかたは、インストール方法によって違います。インストーラーやスクリプトはもう一度実行すれば上書きされ、Homebrew なら brew upgrade の後に swing service install で新しいバージョンに切り替わります。Docker Compose では、git pull の後に docker compose up -d --build で作り直してください。くわしくは 導入の手引き を見てください。
AI エージェント向けのスキルを使うときは、更新したあとに swing skill install を実行してください。