GNU social (GS) はv2.0.0beta0でActivityPubに対応しており、これによりMastodon v3やPleromaなどと通信できます。しかし、Misskeyとは相互にフォローできないという問題があります。
このMisskeyとの通信問題について、わかっている情報を整理して、今後の対応時の参考資料として役立てます。
前提
GNU socialのバグトラッカーに登録されているMisskey関係の課題は以下となります。
- #226 Can’t communicate with misskey.de – NotABug.org: Free code hosting
- #279 Correct bugs preventing GNU Social from following accounts on Misskey – NotABug.org: Free code hosting
#226はGNU social v2.0.0beta0以前の課題ですので、現在は関係ないと思われます。
2個目の#279は不具合に対するPull Requestとなっており、マージ待ちとなっています。前提として、このPRがMisskeyとの通信で必須です。以下のコマンドで適用できます。
patch -Np 1 <<-'EOT'
--- a/plugins/LRDD/LRDDPlugin.php
+++ b/plugins/LRDD/LRDDPlugin.php
@@ -82,7 +82,7 @@ class LRDDPlugin extends Plugin
$all_ids = array_merge([$xrd->subject], $xrd->aliases);
if (!in_array($uri, $all_ids)) {
- $this->log(LOG_INFO, 'The original URI was not listed itself when doing discovery on it!');
+ common_log(LOG_INFO, 'The original URI was not listed itself when doing discovery on it!');
return null;
}
--- a/plugins/LRDD/lib/lrddmethod/webfinger.php
+++ b/plugins/LRDD/lib/lrddmethod/webfinger.php
@@ -31,15 +31,24 @@ class LRDDMethod_WebFinger extends LRDDMethod
*/
public function discover($uri)
{
- $parts = explode('@', parse_url($uri, PHP_URL_PATH), 2);
+ $scheme = mb_strtolower(parse_url($uri, PHP_URL_SCHEME));
+ switch ($scheme) {
+ case 'acct':
+ // We can't use parse_url data for this, since the 'host'
+ // entry is only set if the scheme has '://' after it.
+ $parts = explode('@', parse_url($uri, PHP_URL_PATH), 2);
- if (!Discovery::isAcct($uri) || count($parts) != 2) {
- throw new Exception('Bad resource URI: ' . $uri);
- }
- [, $domain] = $parts;
- if (!filter_var($domain, FILTER_VALIDATE_IP)
- && !filter_var(gethostbyname($domain), FILTER_VALIDATE_IP)) {
- throw new Exception('Bad resource host.');
+ if (!Discovery::isAcct($uri) || count($parts) != 2) {
+ throw new Exception('Bad resource URI: ' . $uri);
+ }
+ [, $domain] = $parts;
+ break;
+ case 'http':
+ case 'https':
+ $domain = mb_strtolower(parse_url($uri, PHP_URL_HOST));
+ break;
+ default:
+ throw new Exception('Unable to discover resource descriptor endpoint.');
}
EOT
上記パッチを見ればわかりますが、GNU social v2.0.0beta0では通信処理の部分に単純な関数名間違いがあり、Misskeyの投稿の検索、フォローなどMisskeyとの通信が伴う操作をすると共通で以下のエラーが発生します。画面上やログに表示されます。
Internal Server Error Using $this when not in object context
これは上記パッチを適用すると解決します。ひとまず上記パッチは必須と思ってよさそうです。なぜマージされずに放置されているかは不明です。MIsskeyからGSをフォローできないなどの問題が残っているため、保留にしているのかもしれません。どこかのタイミングで、GSの開発チャットに乗り込んで催促したほうがよいかもしれません。
動作
上記パッチは適用済みとして、GSとMisskeyとの動作について整理します。
この状態だと、以下は問題なくできます。なお、パッチを適用していない場合、3の検索はMisskey側でのGSの投稿URL検索のみ問題なくできます。
逆に以下の処理は問題があります。
問題の内容をみると、MisskeyからGSへの通信に何か問題があるようです。GS側でデバッグを有効にして、サーバーログを確認しましたが、特にGS側でエラーは出ていないようでした。そのため、Misskey側で何か問題がある可能性が高いように思います。
特に、GSからMisskeyはフォローできるのに、MisskeyからGSをフォローできないというのが気になります。Mastodon v3やPleromaからGSをフォローできますので、基本動作は問題ないと思われるからです。
misskey.ioのアカウントからgnusocialjp@gnusocial.jpのフォローを試みると、以下の画像のように [処理中] となったままログイン・ログアウトしても解除されません。いくらなんでも時間がかかりすぎています。
Misskeyは日本製のソフトウェアのため、日本人同士で解決するのが円滑でしょう。この課題を自分で登録しようと思ったところ、ありがたいことにMisskeyのGitHubに該当内容の登録が既にありました (GNU socialをフォローできない · Issue #9019 · misskey-dev/misskey)。後ほど中の人が情報を補足します。
なお、gnusocial.jpには上記パッチを本日から適用しており、アカウント作成に抵抗があれば、テストアカウントも用意していますので、特にMisskey開発者の方は自由にお試しください。
結論
GNU socialとMisskeyとの通信の問題について情報を整理しました。整理したところ、Misskey側で何か問題がある可能性が高いように感じました。
Misskeyは日本産ということもあり、外人がMIsskeyの修正や課題のやりとりをするのはハードルが高いと感じます。ひとまず、gnusocial.jpには当分パッチを適用しておいて、検証環境とわかっている情報を提供して、Misskey開発者の対応を仰ぎたいと思います。Misskey側で問題がなく、GNU social側の問題だと確定すれば、それはそれで収穫です。
なお、話が変わります、Misskeyとの通信問題について、以前Twitterで投稿したことがありました。
2021年7月のv2.0.0beta0からActivityPubに対応しました。https://t.co/7ya44zaIPn などもv2でAP対応しています。日本だと私が運営する https://t.co/TPyRatjpuK が対応しています。
— GNU social JP (@gnusocialjp) July 23, 2022
まだいくつかバグがあってMisskeyと通信できないなどはありますが…
misskey.devの管理人から反応がありました。MIsskey陣営は同じ日本人同士というのもありますが、対応の温かみを感じました。
ひとまず、通信に一部問題はあるもののgnusocial.jpではMisskeyをフォローできるようになったので、片っ端からMisskey管理人をフォローしていきたいと思います。
2022-08-15 Monに該当PRが無事にマージされました。これにより、GNU socialのmasterを使えば手動パッチは不要です。
詳細プロフィール。SNS: Twitter/GS=gnusocialjp@gnusocial.jp/WP=gnusocialjp@web.gnusocial.jp。2022-07-17からgnusocial.jpとweb.gnusocial.jpのサイトを運営しています。WordPressで分散SNSに参加しています。このアカウントの投稿に返信すると、サイトのコメント欄にも反映されます。
コメント
[…] 先日「GNU social v2でのMisskeyとの通信問題 | GNU social JP」で、GNU social v2とMisskeyと通信する際に、Misskey側からのアクションがとれないということを記しました。 […]
[…] 以前投稿した「GNU social v2でのMisskeyとの通信問題 | GNU social JP」で、Misskeyとの通信問題を取り扱いました。この問題はマージされて解決したのですが、これとは別に、GNU social (GS) からMissk […]