#thebossblog

ハッシュタグを使って、“他インスタンスからでも書き込めるローカル TL”を作る方法

February 03, 2018

追記: この記事は古い情報です。 更新版 を参照してください。

こんにちは、 theboss.tech という Mastodon インスタンスを運営している @the_boss です。

当インスタンスは最近の機能追加で、ローカル TL に他インスタンスからでも書き込めるようになりました。

実験的な機能ですが、サーバに縛られないローカル TL はなかなか面白く、分散の仕組みとも相性が良いと感じています。ただし、既存の機能を流用してできる範囲で実現しているため、後述するように制約もあります。

欠点もあるものの、この機能はテーマインスタンス (特定の話題に特化したインスタンス) では有用かもしれません。この記事では機能の仕組みと取り込み方を紹介いたします。

仕組みと制約

ローカル TL をタグ TL に置き換える

仕組みは単純で、当インスタンスのローカル TL は #theboss_tech というハッシュタグの TL になっています。

連合している他インスタンスのユーザがこのタグを付けてトゥートすることで、ローカル TL にトゥートが表示されます。

普通のタグ TL と変わらないため、連合に流れない (=インスタンスの誰もフォローしていない) ユーザがタグを付けて発言しても、表示されないという欠点があります。

当インスタンスのユーザのトゥートに、自動でデフォルトタグを付ける

当インスタンスのユーザが公開範囲を public でトゥートした際に、自動でデフォルトタグ #theboss_tech を付与します。

ローカルに出さずに特定のハッシュタグに投稿したい時は (例えば実況トゥート) 、「ローカルに出さずにトゥート」ボタンでトゥートします。

デフォルトタグはサーバサイドで処理しますが、スマホアプリ等では以下の制約があります。

  • 他のタグも付けてローカルに出したい場合は、デフォルトタグを手動で付ける必要がある
  • ローカルに出さずにトゥートしたい場合は、他のタグを付けるか、「未収載」にする必要がある

compose form

インスタンスに取り込む手順

以下のブランチを取り込みます。なお、取り込む際は、変更の内容を確認し、想定外の影響がないことを確認してください。

theboss/mastodon at feature-federated-local-timeline

取り込みは、以下のコマンドで行うことができます。

# 他インスタンスのリポジトリを remote-tracking branch として追加
git remote add theboss git@github.com:theboss/mastodon.git

# add だけだとローカルに取得されないので fetch
git fetch theboss

# 取り込みたいコミットを cherry-pick する。競合がなければコミットがそのまま現在のブランチに追加される
# 競合した場合は、手動マージ後に git add, commit を行う
git cherry-pick a23152e63cef4cb2791849d9d61be5b3da6dd3e1

取り込んだ後、 .env.production ファイルに、以下の行を追記してください (theboss_tech はハッシュタグ名ですので、任意のものに変更してください) 。

DEFAULT_HASHTAG=theboss_tech

以降は、通常のアップデートと同様の手順で再起動などを行ってください。なお、アップデートの際は以下の点にご注意ください。

  • package.json に新たな依存ライブラリが追加されます。 yarn install --pure-lockfile の実行は必須です。
  • DB スキーマの変更はありません。 db:migrate の実行は必須ではありません。
  • webstreaming の再起動が必須です。

そのほかの注意事項

  • デフォルトタグは、既に使われているものである必要があります。

    • status_tags テーブルに tag id があり、アプリ起動時にこのテーブルから id を取得するため (config/initializers/default_hashtag.rb で行っている)
    • テーブルにレコードが存在しないと rake コマンド実行時にエラーとなる
  • ハッシュタグにドットやハイフンは使えないので注意してください。前述の問題もあるので、事前にハッシュタグのトゥート投稿を行い、確認しておくことをおすすめします。
  • 今後、フォーク元の Mastodon におけるアップデートを取り込む際に、コンフリクトが発生する可能性があります。

仕様

  • Web

    • public 投稿、かつ他のタグを持たないトゥートに自動的にデフォルトタグを付与
  • Streaming

    • ローカル TL をデフォルトタグ TL に変更
  • Web UI

    • 「トゥート」ボタン押下時に public の場合は自動的にデフォルトタグを付与
    • 「ローカルに出さずにトゥート」ボタン押下時に
    • public かつ他のタグが無い場合 unlisted に変更

インスタンスのユーザ向けの説明

特殊な機能であるため、インスタンスのユーザに混乱を与えるかもしれません。当インスタンスでは以下のような説明を /about に記載しています。


「ローカル TL をデフォルトタグ TL に置き換える」機能を試験的に導入しています。

  • ローカル TL は #theboss_tech タグの TL です。
  • タグを付けずに「公開」投稿を行うと、デフォルトタグ #theboss_tech が付きます。
  • ブラウザをお使いの場合は、「ローカルに出さずにトゥート」ボタンで、ホーム TL のみに投稿できます。 (Ctrl + Shift + Enter または Command + Shift + Enter でも可)

    • 他のタグを付けてこのボタンを押すと、そのタグの TL に投稿できます。
  • スマホアプリなどでもデフォルトタグが付きますが、他のタグを付けて投稿した場合、ローカル TL に出ません。

    • 他のタグも付けてローカルにも出したい場合、手動で #theboss_tech を付けて投稿してください。

おわりに

ローカル TL をハッシュタグ TL で置き換える発想は、以前から何名もの方により提案されていたものです。また、以下の議論でも、それに近い機能が示唆されていました。

Mastodon に慣れたユーザにとって、ローカル TL に連合が流れうる状況は新鮮で面白い体験です。

theboss.tech はユーザがいるとはいえあくまで個人インスタンスですが、テーマインスタンスにおいては新たな可能性があるのではないかと感じています。登録ユーザが増えずとも、ローカル TL が賑やかになるかもしれません。

また、この機能のあるインスタンスのユーザに対しては、いわゆる「ローカル TL 空リプ」のような発言をタグ TL で追うことがしやすくなるため、連合における文脈の解読を容易にする可能性もありそうです。

この記事が、ローカル TL と分散 SNS について、新たな可能性を考えるきっかけになれば幸いです。


THE BOSS

THE BOSS
Mastodon で活動しています。