水平分業型ミニブログHVDSGMの提案

2017年のマストドンの流行により、分散型ミニブログというアイディアも注目されるようになった。過去記事 分散型ミニブログの水平分業—素朴ディジタル画像インフラストラクチャーの設計と応用 では、ミニブログの機能をソーシャルグラフ層、テキスト層、マルチメディア層の3層に分類し、そのうちテキスト層とマルチメディア層の境界で水平分業するアーキテクチャーを提案した。本稿では、これらの3層がすべて分離した水平分業型ミニブログの仕様を提案する。本稿は概念的な提案のみであり、実装例は存在しない。

HVDSGMはhorizontally and vertically distributed social graph and messagingのアクロニムである。

以下、ミステリーポスト拡張は赤字で表記する。

 ソーシャルグラフ層

ソーシャルグラフ層はユーザー (複数) のレコードを永続化する。ユーザーは以下のフィールドを持つ。

  • ユーザー名 (単数、独自のログイン機構を持つ場合)
  • パスワード (単数、独自のログイン機構を持つ場合)
  • スクリーンネーム (単数、文字列)
  • Bio (単数、文字列)
  • フォローしているユーザーのソーシャルグラフ層のURL (複数)
  • テキスト層のユーザーのURL (単数)

ログインしているユーザーは、パスワード、スクリーンネーム、Bio、テキスト層のユーザーのURLを変更できる。また、フォローしているユーザーのソーシャルグラフ層のURLを追加または削除することができる。

ユーザーには一意なURLが割り当てられる。このURLに対してGETメソッドを要求すると、以下の情報が得られる。

  • スクリーンネーム
  • Bio
  • フォローしているユーザーのソーシャルグラフ層のURL
  • テキスト層のユーザーのURL

テキスト層

テキスト層はユーザー (複数) のレコードを永続化する。ユーザーは以下のフィールドを持つ。

  • ユーザー名 (単数、独自のログイン機構を持つ場合)
  • パスワード (単数、独自のログイン機構を持つ場合)
  • ソーシャルグラフ層のユーザーのURL (単数)
  • イベント (複数)
  • 信頼するマルチメディア層のホスト名 (複数)
  • 信頼するソーシャルグラフ層のホスト名 (複数)
  • 信頼するテキスト層のホスト名 (複数)

イベントは以下のフィールドを持つ。

  • タイムスタンプ (単数、Unixエポックからの秒数)
  • イベントID (単数、機械可読な文字列)

イベントは以下の種類がある。

  • メッセージ
  • いいね
  • 拡散
  • 削除
  • ミステリーポスト
  • ミステリーポストの拡散

メッセージは以下のフィールドを持つ。

  • 内容 (単数、文字列)

いいねは以下のフィールドを持つ。

  • オリジナルのユーザーのソーシャルグラフ層のURL (単数)
  • オリジナルのイベントのイベントID (単数)

拡散は以下のフィールドを持つ。

  • オリジナルのユーザーのソーシャルグラフ層のURL (単数)
  • オリジナルのイベントのイベントID (単数)
  • 内容のコピー (単数、文字列)

削除は以下のフィールドを持つ。

  • 削除されたイベントのイベントID (単数)

ミステリーポストは以下のフィールドを持つ。

  • タイトル (単数、文字列)
  • 内容 (単数、文字列)
  • ミステリーポストのURL (単数)

ミステリーポストの拡散は以下のフィールドを持つ。

  • オリジナルのユーザーのソーシャルグラフ層のURL (単数)
  • オリジナルのイベントのイベントID (単数)
  • タイトルのコピー (単数、文字列)
  • ミステリーポストのURL (単数)

ログインしているユーザーは、パスワードを変更できる。また、イベントを追加することができる。タイムスタンプとイベントIDとミステリーポストのURLはサーバーサイドで生成する。

ユーザーには一意なURLが割り当てられる。このURLに対してGETメソッドを要求すると、以下の情報が得られる。

  • イベント (複数)

ただし、ミステリーポストの内容は除かれる。

このGETメソッドの引数にタイムスタンプを指定すると、そのタイムスタンプよりも新しいイベントのみが得られる。

テキスト層は一定時間ごとにリフレッシュ動作を行う。リフレッシュ動作は以下のように行う。

  1. ソーシャルグラフ層のユーザーのURLに対してGETメソッドを発行し、諸情報を得る。
  2. フォローしているユーザーのソーシャルグラフ層のURLに対してそれぞれGETメソッドを発行し、諸情報を得る。
  3. フォローしているユーザーから新たにフォローされたならば、新しいフォロワーの通知を表示する。
  4. フォローしているユーザーのテキスト層のURLに対してそれぞれGETメソッドを発行し、諸情報を得る。
  5. 削除イベントによって無効化されていないイベントを以下のように表示する。ただし、ミステリーポストの拡散は削除イベントによって無効化されない。
    • いいねまたは拡散のオリジンが自分自身であれば、通知を表示する。
    • メッセージまたは拡散の内容を表示する。このとき、信頼するマルチメディア層のホスト名を持つURLが含まれている場合は、そのURLの内容をダウンロードし、自動再生する。
    • ミステリーポストまたはミステリーポストの拡散のタイトルを表示する。

マルチメディア層

マルチメディア層はファイル (複数) を永続化できる。ファイルは以下のフィールドを持つ。

  • ファイル名 (単数、機械可読な文字列)
  • バイトストリーム (単数)

ユーザーはファイルをアップロードできる。アップロードが完了すると、ファイルのURLが表示される。

ファイルのURLに対してGETメソッドを要求すると、そのファイルが得られる。

ミステリーポスト

テキスト層でミステリーポストを開く操作を行ったとき、以下のような通信が行われる。これらの通信はテキスト層とソーシャルグラフ層にまたがって行われる。

  1. テキスト層のホストAは、ソーシャルグラフ層のユーザーのURLにGETメソッドを要求する。
  2. ソーシャルグラフ層は、テキスト層のユーザーのURLを含む諸情報を返す。
  3. テキスト層のホストAは、ソーシャルグラフ層が申告するテキスト層のユーザーのURLが自分自身に一致するときのみ、以下の処理に進む。そうでなければ、ミステリーポストを開くことが許可されなかったことを表示する。
  4. テキスト層のホストAは、ミステリーポストのURLにGETメソッドを要求する。ミステリーポストのURLのホスト名は、別のテキスト層のホストBである。このとき、引数として、ソーシャルグラフ層のホスト名を渡す。
  5. テキスト層のホストBは、テキスト層のホストAと、ソーシャルグラフ層について、それぞれ信頼できるかどうか調べる。いずれも信頼できるときのみ、以下の処理に進む。そうでなければ、ミステリーポストを開くことを許可しないことをテキスト層のホストAに返信する。
  6. テキスト層のホストBは、ミステリーポストの内容をテキスト層のホストAに返信する。
  7. テキスト層のホストAは、ミステリーポストの拡散イベントを自分自身に追加する。
  8. テキスト層のホストAは、ミステリーポストの内容を表示する。

制限

フォロー、いいね、拡散の通知は、すでにフォローしているユーザーのみから受け取ることができる。未知のユーザーからいきなり通知を送られることはない。

ソーシャルグラフ層またはテキスト層のサーバーが、ミステリーポストの拡散に協力せずに内容のみを盗み見ることを試みた場合、信頼するサーバーのリストからそれらを除かなければならない。

メッセージを削除しても、その拡散は削除されない。同様に、ミステリーポストを削除しても、ミステリーポストの拡散は削除されない。

議論

これ役に立つのか?

タイムラインのUIを提供するのはテキスト層なので、ソーシャルグラフを維持したままUIだけを変えたいときに便利かもしれない。

ミステリーポストの導入はテキスト層の変更のみで実現されている。一般に、何か目新しい機能を導入するときは、ソーシャルグラフ層とマルチメディア層を稼働したまま、テキスト層のみを交換することで対応できることが多い気がする。

分散型ミニブログの水平分業—素朴ディジタル画像インフラストラクチャーの設計と応用

2017年にマストドンが大流行すると、分散型ミニブログというアイディアにも注目が集まるようになった。分散型ミニブログは、複数の運営者がそれぞれサーバーを運用し、それらがリモートフォローによって接続されることでSNSを構成するものである。

本稿では、分散型ミニブログの機能を、ソーシャルグラフ層、テキスト層、マルチメディア層の3層に分類する。そして、従来の分散型ミニブログを垂直統合型としたうえで、水平分業型の分散型ミニブログを提案する。具体例として Yayaka19 を取り上げる。Yayaka19 の本体はソーシャルグラフ層とテキスト層を担当し、マルチメディア層は 素朴ディジタル画像インフラストラクチャー という独立したウェブサイトが担当している。

分散型ミニブログの階層モデル

本稿では、分散型ミニブログの機能を、ソーシャルグラフ層、テキスト層、マルチメディア層の3層に分類することを提案する。

ソーシャルグラフ層は、ユーザーのフォロー・被フォロー関係を保存する層である。この層は最も高度な故障耐性が求められる。ユーザーにとって、自分がフォローしているユーザーのリストや、自分の発言を聞いてくれるフォロワーを失うことは、多大な損失である。そのため、データの喪失には万全の対策が必要である。また、ソーシャルグラフ層が停止すると他の層も機能しなくなるため、一時的な停止も最小限にすべきである。

テキスト層は、あるユーザーが投稿した文字列を、フォロワーに届ける層である。分散型ミニブログにおいて、タイムラインは常に流れていくものであるため、データの喪失はそれほど問題にならない。とはいえ、データの喪失やサービスの停止は、あくまでユーザーが不便に感じない程度にとどめるべきである。また、テキスト層は、マルチメディア層のための識別子 (画像のURLなど) を配信する役割を持つ。

マルチメディア層は、画像、音声、動画などのさまざまなデータを配信する層である。マルチメディア層にとって重要なことは、テキスト層と比較して、データのサイズが大きくなることである。

また、マルチメディア層は、法的問題にさらされやすいという特徴がある。テキスト層においても、ヘイトスピーチや犯行予告など、違法もしくは邪悪な投稿が可能である。マルチメディア層では、それに加えて、著作権法違反や児童ポルノの公衆送信など、よりカジュアルに違法または邪悪な情報の共有が起こり得る。

分散型ミニブログの垂直統合モデル

GNU Socialやマストドンなど、いま主流の分散型ミニブログは、垂直統合モデルである。すなわち、1台のインスタンスが、ソーシャルグラフ層、テキスト層、マルチメディア層のすべての機能を提供している。そのうえで、複数のインスタンスが連合を形成するアーキテクチャーとなっている。

この方式にはいくつかの欠点がある。第1に、インスタンスに必要とされる計算機パワーが大きいことである。分散型ミニブログでは、個人、団体、企業など、さまざまな主体がインスタンスを運営することができる。しかしながら、計算機パワーの問題により、個人が運用するインスタンスでは、処理が遅くなったり、レンタルサーバーの高価なプランに移行する必要が生じるなどの限界があった。

第2に、データの長期的な永続化が必要になるソーシャルグラフ層と、それほど永続化が必要とされないテキスト層およびマルチメディア層が混在していることにより、データベースの管理が不便になっていることがある。もし両者が分離されていれば、ソーシャルグラフ層のデータベースのみを厳重に管理し、他のデータベースは状況に応じて破棄するという運用も可能である。

画像アップローダーの分離

そこで、Yayaka19 では、本体はソーシャルグラフ層とテキスト層のみを担当し、マルチメディア層は 素朴ディジタル画像インフラストラクチャー に委託するというアーキテクチャーを採用した。

Yayaka19での変更はクライアントサイドのみであり、サーバーサイドおよびプロトコルの変更を必要としない。Yayaka19のクライアントは、投稿された文字列に画像のURLが含まれていれば、それを画像のインライン表示 (<img src=”URL“> タグ) に置換する。

ここで、画像のインライン表示を、信頼できる発信源に限定することが必要である。そうでないURLは、インライン表示ではなく、ハイパーリンクにする。なぜなら、インライン表示された画像の提供元は、ユーザーの行動を追跡することができるからである。画像の提供元は、ユーザーのIPアドレスと時刻を記録することができる。これは、単に画像を読み出したことを意味しているだけでなく、その画像が埋め込まれた投稿を読んだことを意味する。もしこれを画像の提供元が悪用すれば、深刻なプライバシーの侵害となり得る。

素朴ディジタル画像インフラストラクチャーの設計

素朴ディジタル画像インフラストラクチャー は、水平分業されたウェブアプリケーションのマルチメディア層として使われることに特化した画像アップローダーである。水平分業に特化するため、以下のような仕様を採用した。

  • 画像のURLを得ることが容易である。
  • 画像一覧の画面を持たない。
  • UIの視覚的な魅力に乏しい。

素朴ディジタル画像インフラストラクチャーは画像のランディングページを持たない。画像を投稿すると、その画像をブラウザで直接表示している状態に遷移する。このときブラウザが開いているURLは、画像そのもののURLであるので、テキスト層にそのままコピーすることができる。

素朴ディジタル画像インフラストラクチャーは画像一覧の画面を持たない。これは、画像を紹介する機能を、他のウェブアプリケーションのテキスト層に依存しているためである。素朴ディジタル画像インフラストラクチャーで画像を表示するには、画像のURLに直接アクセスする必要がある。

また、素朴ディジタル画像インフラストラクチャーは、ソーシャルグラフ層およびテキスト層を持つウェブアプリケーションからの紹介で利用されるため、UIの視覚的な魅力を追求していない。「素朴ディジタル画像インフラストラクチャー」という名前も、意図的に冗長かつ時代遅れに聞こえるように選定されている。

素朴ディジタル画像インフラストラクチャーのソースコードは非常に単純で、以下の3個のファイルで構成されている。

  • index.html (8行)
  • mdii.js (43行)
  • mdii-post.cgi (15行)

これだけ単純なので、動作環境にあわせて改変することも容易である。これまでに SiteMixの無料プランさくらのレンタルサーバーのライトプラン でデプロイされた。

素朴ディジタル画像インフラストラクチャーは、もともとは、2017年にもなって画像アップローダーなどというコモディティを自分で開発したくない、という動機から開発された。そのため、仕様はよく言えば軽量、悪く言えば粗雑である。セキュリティもあまり上等とは言えない。例えば、DoS攻撃に対する耐性がまったく考慮されていないことは特筆に値する。

水平分業型ミニブログにおいては、マルチメディア層に技術的または法的な問題が発生した場合には、マルチメディア層を夜逃げさせて、ソーシャルグラフ層とテキスト層のみを防衛するという運用を想定している。ソーシャルグラフ層とテキスト層は、マルチメディア層が夜逃げする場合にそなえて、あらかじめ複数のウェブサイトをマルチメディア層として利用できるようにしておくなどのリスク管理が必要である。

また、素朴ディジタル画像インフラストラクチャーは、分業型ミニブログであるYayaka19の他に、不買運動ウェブ という情報共有サイトからも利用されている。画像アップローダーというコモディティを自分で開発したくないという動機からすれば、このように複数の異質なウェブアプリケーションから利用されることは、自然な使用法である。

議論

分散型ミニブログの水平分業は、さまざまな信念や政治的主張を持つ個人または団体にとって、計算機資源および人的資源を提供する動機になり得る。例えば、言論の自由を重視する団体はソーシャルグラフ層とテキスト層を、ポルノや二次創作を擁護する団体はマルチメディア層を運営する、といった応用が期待される。

歴史的には、2ちゃんねるが画像アップローダーをともなって運用されていた気がする。画像アップローダーはしょっちゅう夜逃げしてた。

Yayaka19に画像付きミステリーポストを投稿する方法

2017年5月15日から、Yayaka19に画像付きミステリーポストを投稿することができるようになった。本稿では、その操作方法を説明する。

まず yayaka.net または 19.fubaiundo.org にログインする。そして、ミステリーポスト作成画面を開く。この方法はインスタンスによって異なる。

  • yayaka.net では、右上のメニューから「New Mystery Post」を選択する。
  • 19.fubaiundo.org では、ツールバーの爆弾ボタンを押す。

ミステリーポスト作成画面では、タイトルと本文を入力する。タイトルは、通常のミステリーポストと同じように入力すればよい。

ここで、唐突だが、素朴ディジタル画像インフラストラクチャー という別のサイトを開く。そして、「ファイルを選択」ボタンを押して、投稿したい画像を選ぶ。スマートフォンであればカメラで撮影することもできる。続いて「送信」ボタンを押す。すると、画像そのものを表示する画面に遷移するので、画像のURLをコピーする。画像のURLは、例えば https://mdii.sakura.ne.jp/32245.png のような形式になる。

そして、ミステリーポスト作成画面に戻り、本文に画像のURLを貼り付ける。本文には、画像のURLとその他の文章を混在させることもできるし、複数の画像のURLを貼り付けることもできる。

すると、このミステリーポストを開いた人は、先ほどの画像を目にすることになる。

最後に、2017年5月29日の時点で、できることとできないことをまとめる。

分散型ミニブログYayaka19のボットをC++で作る

本稿では分散型ミニブログ Yayaka19 のボットをC++で作る方法を解説する。Yayaka19が何であるかを知るには以下を読んでくれ。

実物は以下の場所にある。

あと、作ったボットの実物は以下。

ボットを作るということは、APIを叩くということだ。APIを叩くには、まずユーザーシークレットを取得する必要がある。ユーザーシークレットは、Yayaka19をブラウザで開き、メニューの「View my SECRET」を選ぶと表示される。表示されないときは「Update secret」を押す。以下、ユーザーシークレットを XXXXXX とする。実際にはもっと長い。

APIを叩く方法を学ぶため、まず curl コマンドで試す。なぜ wget でないかというと、wget は PUT メソッドを叩けないからだ。以下、サーバーは https://19.fubaiundo.org で、ユーザー名は hakabahitoyo とする。

curl \
  -o - \
  -X PUT \
  -d 'secret=XXXXXXXX=' \
  https://19.fubaiundo.org/api/users/hakabahitoyo

すると、以下のようなレスポンスが得られる。

{"user":{"name":"墓場人夜 (19.fubaiundo.org)","id":"hakabahitoyo"},"token":"YYYYYYYY","exp":1497182792}

トークンを YYYYYYYY とする。実際にはもっと長い。このトークンを使って、もう1発リクエストを放つ。

curl \
  -o - \
  -X POST \
  -H 'Authorization: Bearer YYYYYYYY' \
  -d 'text=私で残念でした!' \
  https://19.fubaiundo.org/api/users/hakabahitoyo/post

すると、「私で残念でした!」と投稿される。これはフリップフラッパーズ10話のココミネココナさん (の性欲) である。

あとは、これをC++でやっていく。libcurlpicojson.h を使う。実際にやっていったものが libyayaka にあるので、コードを見てほしい。というか、これからC++でYayaka19のボットを作る人は、libyayaka を結合すれば足りる。

libyayaka を使ってみた実例は yayaka19chu2bot などがある。これは 韜晦する夜の機械 の中身である。注意としては、リンクするとき -lcurl と -lyayaka が必要である。

補足としては、Yayaka19では、1個のアカウントで複数のユーザーを作ることができる。この仕様は、同じ作者の別のSNSである agoraful と同じである。ユーザーシークレットはアカウントごどではなくユーザーごとに作られる。ボットを作るときは、あらかじめ新しくユーザーを作るとよい。

Twitterを超える拡散力を目指して—分散型ミニブログYayaka19の紹介

分散型ミニブログ Yayaka19 を紹介する。ミニブログとは、ツイッター に代表されるような、短文を投稿することを目的とするSNS (ソーシャル・ネットワーキング・サービス) である。分散型とは、特定のサーバーに依存せず、複数のサーバーが相互に通信することでSNSを構成することを意味する。

ツイッターは、しばしば経営不振がささやかれるうえ、不可解な理由によるアカウントの凍結が問題になってきた。しかし、ツイッターはRT (リツイート) によって絶大な拡散力を持っており、すでに多くのフォロワーを抱える「アルファツイッタラー」が、その拡散力を捨ててまで他のSNSに移行することは現実的でない。

そこで、Yayaka19では、「ミステリーポスト」という仕組みを導入し、ツイッターのRTを超える拡散力を得ることを試みた。ミステリーポストは、タイムラインに流れてくるときはタイトルのみが見えており、本文を読もうとすると同時にRTしたことになるというポスト (投稿) である。これにより、ユーザー数ではツイッターに劣るとしても、拡散力でツイッターに対抗することが期待される。

また、Yayaka19では、特定の運営者による検閲あるいは言論統制を避けるため、分散型ミニブログとしての特徴も有している。すでに OStatusプロトコル による分散型ミニブログとして GNU Social やマストドン (Mastodon) が知られており、これから設計されるSNSは分散型の特徴を持つことが当然とみなされるだろう。

背景

ミニブログとは、ツイッター に代表されるような、短文を投稿することを目的とするSNS (ソーシャル・ネットワーキング・サービス) である。ツイッターでは、1回の投稿 (ツイート) が140字に制限されている。そのため、ツイートを気軽に発信することができ、また、大量のツイートを読むことも容易である。ツイッターでは画像をツイートすることもできる。この場合は、140字のテキストと均衡するように、見やすい大きさに縮小して表示される。

ツイッターのユーザーは、好きなユーザー (複数) をフォローすることができる。すると、フォローしているユーザーのツイートが、自分のタイムラインに表示される。

ツイッターの特徴はRT (リツイート) である。あるツイートをRTすると、そのツイートは自分のフォロワーのタイムラインに表示される。それを見たフォロワーがさらにRTすることで、ツイートが指数関数的に拡散することが頻繁に発生する。

現状の課題

しかしながら、ツイッター社はしばしば経営不振を指摘されている。その原因の一つは、ツイッターがいじめやフェイクニュースの温床になっており、それによりイメージの低下を招いていることである。これはリツイートの拡散力と表裏一体である。邪悪な、もしくは判断力の劣るユーザーが拡散力を手にすれば、いじめやフェイクニュースの拡散に加担することになりかねない。

このような悪評を払拭するため、ツイッター社は邪悪なユーザーの追放に血道を上げている。しかし、これは別の問題を発生させている。ツイッターのユーザーは、邪悪であると思われるユーザーを「報告」することができる。ツイッター社は、ある程度の数の報告が集まった場合には、ツイートを削除したり、アカウントを凍結したりといった対策を取る。ここで問題なのは、複数のユーザーが一斉に「通報」することで、特定のアカウントを凍結に追い込むことができることである。

日本では、非実在児童ポルノが広く愛好されていることが知られている。これらは性欲を満たすためだけでなく、「絵師」たちの創作意欲を刺激し、文化的にも価値のあるものである。しかし、ある種の反ポルノ主義者たちは、ツイッターで非実在児童ポルノを公開している絵師を集団で通報し、そのアカウントを凍結に追い込むという運動を行った。ツイッター社は非実在児童ポルノの文化的価値について無理解であり、反ポルノ主義者たちに追随して、絵師の凍結に加担した。これは、非実在児童ポルノを愛好する絵師の立場からすれば、表現の自由の侵害であり、検閲であり、言論弾圧である。

とはいえ、ツイッターのユーザー数の多さとリツイートの拡散力は、アカウント凍結の危険を補ってありあまるほど魅力的である。多くの絵師は、アカウントを凍結されたとしても、より自由な他のSNSに移行するのではなく、ツイッターのアカウントを「転生」することを選んできた。

自由なSNSとしては、OStatusプロトコル を利用した分散型ミニブログである、GNU Socialやマストドン (Mastodon) が知られている。分散型ミニブログは、複数のサーバーが互いに通信することでSNSを構成する。そのため、特定の運営者によって恣意的な運用や言論弾圧が行われることを阻止しやすい。なぜならば、あるサーバーが自由を侵害したならば、ユーザーが別のサーバーに移動することが容易だからである。

特に、pixiv が開設したマストドンインスタンスである Pawoo は、イラストを公開するサイトを母体としているため、絵師たちの楽園となっている。非実在児童ポルノを愛好する絵師たちのうち、ツイッターアカウントの理不尽な凍結を経験した者は、この新しいSNSを熱狂的に迎え入れた。

しかしながら、マストドンの熱狂的なブームを経た今でも、多くのアルファツイッタラーやユーザーはツイッターにとどまっており、自由なSNSの勢力がツイッターを凌駕したとは言い難い。これまで述べてきたツイッターの問題点、特に通報の濫用と恣意的な凍結を解決するには、自由で、なおかつツイッターに比肩する拡散力を持つSNSが必要である。

提案手法

ここで、私たちは、ツイッターのRTの仕組みをさらに改良することで、より強い拡散力を持つSNSを構築することを提案する。私たちは、その仕組みを「ミステリーポスト」と命名した。

ミステリーポストを投稿するには、タイトルと本文を記述する必要がある。ミステリーポストがタイムラインを流れるときは、タイトルのみが表示される。本文を読むためには、明示的にミステリーポストを「開く」操作が必要である。このとき、本文を表示すると同時に、ミステリーポストをRTしたことになる。すなわち、ミステリーポストを開いたユーザーのフォロワーに、ミステリーポストが拡散される。

ユーザーがミステリーポストの本文を読むためには、ミステリーポストの拡散に協力することが必要であるため、従来のRTよりも拡散されやすいことが期待できる。

実験

私たちは、ミステリーポスト機能を用いて、強い拡散力を持つ独自のSNSを構築することを試みた。ryo33 氏による Yayaka19 というSNSを母体に、ミステリーポスト機能を追加することで、拡散力の強化を企図した。

さらに、ryo33氏はYayaka19を分散型ミニブログとする改良を行った。これにより、サーバーの所有者が恣意的な運用や言論弾圧を行うことが困難になった。オリジナルの yayaka.net に加え、第2のサーバーである 19.fubaiundo.org が建設された。これらのサーバー群は、リモートフォローにより、一体のSNSを構成している。

議論

当初、私が提案したのは、タイムラインのツイートがモザイクで隠された状態で表示され、内容を表示した瞬間にリツイートしたことになる、という案である。当時、この機能は「モザイク」と呼ばれていた。ryo33氏はこの案を改良し、タイトルと本文を持つスタイルを提案した。また、機能の名称は「ミステリーポスト」となった。モザイクが自動的な画像処理により生成されるのに対して、タイトルを付ける行為はユーザーが主体的に行うものである。そのため、より多様で遊戯性のある文化が創造されることが期待できる。

ミステリーポストの拡散力は、SPAMなどの邪悪な目的にも利用できる。しかし、タイトルやユーザー名などから、何らかの「怪しさ」を感じ取ることは可能であると思われる。ミステリーポストの仕組みを持つSNSのユーザーは、ミステリーポストを不用意に開かないよう注意すべきである。それは自分自身のためだけでなく、フォロワーを失望させないためにも必要である。

ミステリーポストは、また、拡散に協力したユーザーの法的責任を軽減することが期待できる。ユーザーがミステリーポストを拡散した時点では、ユーザーはまだミステリーポストの本文を読んでいない。そのため、もしミステリーポストの本文に違法な情報が書かれていたとしても、その拡散に協力したことは故意犯ではない。(ただし、ミステリーポストのタイトルは、違法な情報の存在を示唆するものではないと仮定する。) これは、P2Pファイル共有ソフトウェアであるWinnyにおいて、キャッシュに違法なファイルが置かれていたとしても、Winnyの利用者が意図して置いたものではないという特徴に似ている。この場合、キャッシュの提供を通して拡散に加担したとしても、Winnyのユーザーは故意犯にはあたらない。なお、ミステリーポストは、拡散に協力したユーザーの法的責任を軽減する可能性があるものの、最初にミステリーポストを投稿したユーザーや、ミステリーポストの流通に使われたサーバーの運営者の責任を軽減するものではない。

結論

ツイッターに比肩する拡散力を有するSNSを構築するため、リツイートの仕組みをさらに改良した「ミステリーポスト」を提案した。さらに、分散型ミニブログとすることで、サーバー所有者による恣意的な運用を困難にした。オリジナルの yayaka.net に加え、第2のサーバーである 19.fubaiundo.org を運用し、実用に供した。

将来の課題

非常に残念なことに、Yayaka19は画像の投稿を実装していない。もし画像の投稿が実現すれば、非実在児童ポルノを愛好する絵師たちのために、自由で、かつ強力な拡散力を持つSNSを提供することができるだろう。実装した。Yayaka19に画像付きミステリーポストを投稿する方法

別の方法として、既存の分散型ミニブログにミステリーポストの機能を追加することも考えられる。主要な実装 (GNU Social、マストドンなど) に機能を追加する、OStatus Community Group の標準に追加するなどの展開が期待される。

参考文献

  1. マストドンに対抗して分散SNSを作った – ありえんHip-Hop
  2. 本の虫: ここらでもう一度マストドンについて語っておくか
  3. 高木浩光@自宅の日記 – P2Pの価値とは何なのだろうか