Mastodonアップデート用シェルスクリプト

標準

アクティブユーザー数が増え、極力ダウンタイムを減らしたいので自動化するために作成したシェルスクリプトを備忘で公開します。
システムによってパスとか全然違うので、ご利用の際はご自身の環境に合わせてからお使いください。
何か不備などありましたら、コメントお願いします。

#!/bin/sh

echo "########## Removing old backup data ##########"
rm -rf /mstdn_backup/old/postgresql
rm -rf /mstdn_backup/old/redis
mv -v /mstdn_backup/postgresql /mstdn_backup/old/postgresql
mv -v /mstdn_backup/redis /mstdn_backup/old/redis
rm -rf /mstdn_backup/postgresql
rm -rf /mstdn_backup/redis

echo "########## Refreshing the git data of mastodon ##########"
git fetch
git status
git stash save
git checkout v2.0.0
git stash pop

echo "########## Saving new backup ##########"
docker cp mastodon_db_1:/var/lib/postgresql /mstdn_backup/postgresql
docker cp mastodon_redis_1:/data /mstdn_backup/redis

echo "########## Building ##########"
docker-compose pull
docker-compose build
docker-compose run --rm web rails db:migrate
docker-compose run --rm web rails assets:precompile

echo "########## Stopping Mastodon ##########"
touch /var/tmp/503
docker-compose stop

echo "########## Starting Mastodon ##########"
docker-compose up -d

echo -n "########## If you are in ready, press ANY KEY! ##########"
read okpress

echo "########## Deleting tempolary files ##########"
rm -f /var/tmp/503
docker system prune -f

echo "########## Finish! Check yourself whether updating was succeed. ##########"

ファイル作成後は

chmod +x update.sh

すると、それからは

./update.sh

だけで起動できるようになります。

Mastodonのカスタム絵文字追加のお知らせ

標準

Mastodonでカスタム絵文字が追加できるようになったらしいとの話を聞いて、早速最新のコミットまでアップデートしてみました。正式なバージョンではないので、若干バグは目立ちます。カスタム絵文字が追加できるようになったおかげで、個々のインスタンスの特色を色濃く反映することが出来るようになりました。私のインスタンスでも早速アイデンティティーを確立(?)するために、幾つかのカスタム絵文字を追加してみました。以下がその一覧です。

絵文字 ショートコード 備考
:haruhi:
:yui:
:azusa:
:chika:
:konata:
:kagami:
:yuki:
:chan_yuki: 『「涼宮ハルヒちゃんの憂鬱」の有希』の略
:50: 各文字の間に1スペース必要
:00:
:cho:
:yen:
:ho:
:shi:
:i_:


取り敢えず、素材を持っていたキャラクターだけ試しに追加してみました。何か他に追加してほしい要望等有りましたら、教えてください。

Mastodon軽量化に係る犠牲一覧

標準

Mastodonが栄えるにつれて、サーバーのスペックがMastodon側の要求に応えることが出来ていない、という状況が頻繁に見られるようになりました。Mastodonの長所の一つに、好みのインスタンスに次々と繋がることが出来ると言うものが挙げられますが、今はこれが裏目に出てしまっているようです。だからといって利用していただいているユーザーさんには極力迷惑を及ぼすのは避けたいですし、かと言って繋がりも絶ちたくない。うーんどうすれば良いんだろうか…悩みに悩んだ挙句に私は「ユーザーさんの居心地」を選びました。一身上の都合により、サーバーのスケールアップはまだ半年はできそうにありません。なので、適宜ドメインブロックを行って部分的な鎖国をすることにしたのです。日々、なるべく軽く動くように働きかけていたのですが、今回はドメインブロックが大規模に行われることを避けることは出来ませんでした。申し訳ないです。ご要望等ありましたらお気軽にご相談ください。

(ロースペックサーバーでも長期的に動くように何かPuSHの輪を広げる規則の制限がつけられれば苦労しないんですが…例えばRTが連合TLに流れただけならばPuSH購読しない、みたいな。)

更新(2017/08/13):最新の情報に差し替えました。
更新(2017/09/03):最新の情報に差し替えました。

ドメイン
7144.party mayodon.club
a.weirder.earth md.ggtea.org
admins.mstdn.social md.regastream.com
animalliberation.social mdn.hinaloe.net
anitwitter.moe mellified.men
anti.energy memetastic.space
august-don.site metal.odon.space
babymetal.party mevo.xyz
bcn-users.degica.com minami.shinshyu.life
betterletter.io msdn.yourrhythm.jp
blackice.online msdnaart.net
blessedgeeks.jp mstd.tokyo
bonn.social mstdn-d.info
bookdon.jp mstdn-scc.jp
bookwitty.social mstdn-tech.jp
boys.computer mstdn-workers.com
catdon.jp mstdn.791127.net
catdon.life mstdn.b-shock.org
chitose.moe mstdn.binfish.jp
claristdon.net mstdn.boxertwin.info
cmpwn.com mstdn.co33k.org
co-mastdn.ga mstdn.creatorsnight.com
cybre.space mstdn.dasoran.net
dhtls.net mstdn.ernix.jp
don.archae.me mstdn.fetus.jp
ecodigital.social mstdn.gifu.jp
ekimemo.info mstdn.haoyayoi.net
elephant.bluecore.net mstdn.harusamex.com
emojidon.global mstdn.ho-chi-minh.info
equestria.social mstdn.ht164.jp
f-rabbit.com mstdn.i-red.info
fern.surgeplay.com mstdn.it-infra.jp
ffxiv-mastodon.com mstdn.itmedia.co.jp
fnya.ggtea.org mstdn.klamath.jp
foodon.jp mstdn.kwmr.info
forumanalogue.fr mstdn.kwmr.me
framapiaf.org mstdn.mini4wd-engineer.com
friends.nico mstdn.mk39.xyz
from.komic.eu mstdn.mochiwasa.xyz
gam.m.to mstdn.morendo.daemon.asia
gbtdn.tokyo mstdn.niigata.jp
gl.phil-ia.net mstdn.plus
gnusocial.no mstdn.poyo.me
golfdn.com mstdn.ropo.jp
grimoire.kanzakiranko.jp mstdn.serv-ops.com
gundam.masto.host mstdn.soysoftware.net
gunmastodon.com mstdn.techdrive.top
gyudn.com mstdnsrv.moe.hm
hackers.town mustodon.xyz
hatabowyou.club nfg.zone
herds.eu niigata.minnna.xyz
hfukuchi.masto.host nikki.m.to
hige.alterna-cloud.com nomlishdon.racing-lagoon.info
home.aqraf.tokyo o.kagucho.net
hydroxyquinol.net obitsudon.midyuki.net
ika.moe ofuton.io
ika.queloud.net omochi.xyz
inari.opencocon.org open2.ch
infosec.exchange ostatus.ikeji.ma
iomstdn.tokyo ostatus.shnoulle.net
k0ta.net ostatus.taiyolab.com
kaisendon.asmodeus.red otajodon.com
kakudon.com p2px.me
kirapower.ichigo-hoshimiya.com pao.moe
kiwaitsu.hostdon.jp photog.social
koyuston.tk pleasehug.me
kurage.cc pouet.april.org
kurosawa-ruby.xyz pouet.couchet.org
linuxinthenight.com psodon.com
linuxjobs.social queer.party
linuxrocks.online queer.town
lou.lt quitter.cat
m.loovto.net quitter.es
m.moriya.faith quitter.im
m.pref.yokohama rainyman.jp
m.sl-network.fr rich.gop
m.uncate.org ro-mastodon.puyo.jp
m6n.jp sandbox.skoji.jp
malfunctioning.technology scuba.masdon.life
mammouth.inframed.net sdfn-01.ninjawedding.org
mammut.fsck.jp sealion.club
mamot.fr shelter.moe
manx.social shimaidon.net
mastd.racing shkval.net
mastdn.lovesaemi.daemon.asia sitedethib.com
mastdon.amazedkoumei.com sns.gdgd.jp.net
mastdon.jp social.48bin.net
masto.cloud social.atypique.net
masto.raildecake.fr social.ballpointcarrot.net
masto.themimitoof.fr social.cloudfrancois.fr
mastodon-omoshiro.com social.devloprog.org
mastodon.ar.al social.diskseven.com
mastodon.burnworks.com social.freedombone.net
mastodon.cgx.me social.guimik.fr
mastodon.cloud social.heldscal.la
mastodon.crazynewworld.net social.hyuki.net
mastodon.eliotberriot.com social.imirhil.fr
mastodon.gracie-tech.tokyo social.logilab.org
mastodon.hekki.info social.mecanis.me
mastodon.huma-num.fr social.nah.re
mastodon.indie.host social.nasqueron.org
mastodon.infra.de social.newspeak.house
mastodon.jtwp470.net social.sakamoto.gq
mastodon.kirimi.net social.taker.fr
mastodon.lertsenem.com status.fsf.org
mastodon.matcha-soft.com status.pointless.one
mastodon.matrix.org sunshinegardens.org
mastodon.mit.edu taruntarun.net
mastodon.ohgro.net tgp.jp
mastodon.org.uk the.resize.club
mastodon.p2pquake.net tk2-234-26965.vs.sakura.ne.jp
mastodon.papey.fr toot-lab.reclaim.technology
mastodon.partecipa.digital toot.matereal.eu
mastodon.partipirate.org toot.mst-dn.me
mastodon.potager.org toot.oekaki.st
mastodon.potproject.net toot.place
mastodon.robotstart.info toot.redmine.jp
mastodon.sdf.org toot.yukimochi.jp
mastodon.snowandtweet.jp toukae.com
mastodon.social tulip.blue
mastodon.sportsfans.social tusk.social
mastodon.survival-machines.fr vapedon.club
mastodon.swordlogic.com vastodon.com
mastodon.wakin.site vocalodon.net
mastodon.xyz waraiotoko.net
mastodon.ynu.zone witches.town
mastodon.zombocloud.com www.blueblueblue.blue
mastodon.zunda.ninja www.mofgao.space
mastodonar.club www.techdon.info
mastodonte.me xn--zck4azd638n.com
mastodonti.co xserver.mstdn.hosting
mastodonturkiye.club xserver.work
mastodos.com yaskey.tokyo
mastonon.net youthdon.com
mastoton.fi yso.pet
masutabedon.com 以上 271ドメイン

Mastodonの色々なインスタンス情報の統計

標準

暇つぶしに色々なインスタンスのユーザー数だとかトゥート数だとかを統計するっていうことをしてみました。一応記録として書き記しておきます。

インスタンス情報をcsvでかき集める

TacosTea / versionbattle
上記のリポジトリを活用させていただきました。これを使うことでシェルを叩くだけでinstances.social (jsonとしてはこちら) に登録されている全てのインスタンスの遅延(ms)、バージョン、ユーザー数、トゥート数、接続数をcsvとして出力させることが出来ます。凄い!

jsonを取得し直す場合、jsonからキーを抜き出すjqコマンドっていうのがあるんですけど、一部環境(私の場合はそうでした)ではインストールされていないこともあるので yum install -y jq などでさっとインストールしてしまってください。

最終的に2つのファイルに分けてcsvが出力されるので、これをExcelとかに専用の機能を使って貼り付けて色々とノイズを除去したりソートしたりすると以下のようになります。最終的に調査数は1,336になりました。

散布図にまとめてみる

今回のデータは少人数のような1桁の数からmstdn.jpやpawoo.netのような8桁の数までを扱わなければならないので、いずれの軸も対数目盛にしてみました。しかし、これに伴ってお一人様インスタンスなどのデータを示す際、大変なことになってしまうので、これまたいずれの軸も原点を10に設定しました。

というわけで散布図にまとめてみると以下のようになりました。

なんとなくないい感じに比例になりました。良かったです。(これ以上の成果は無い)
今回は以上です。これからもちょくちょくどうでもいい小ネタを投稿していくので、よろしくお願いいたします。

Mastodonクライアントのまとめ(iOS版)

標準

Mastodonが日本で流行り始めてから早いもので3ヶ月が経とうとしています。この3ヶ月弱でスマートフォン向けのクライアントが多いに増えました。特にiOS版の最初はAmaroqの一つだけでしたね。しかし、今は十数のクライアントがAppStoreに登録されています。ので、それに伴って「どれが便利なんだろう」「わざわざインストールして試すのが面倒」といった声が散見されるようになったので、それぞれのアプリの長所や短所、特徴などを簡単にまとめていきます。クライアント乗り換えの際の一助となれば幸いです。ちなみに、私の中では内蔵ブラウザで表示させているだけのアプリはクライアントとは認めていませんのでご承知おきください。紹介順序は使いやすさの順序ではないですよ。あと、私のiOSは英語に設定してあるので、スクショでは英語でも実際は日本語で使えるものもあります。つまり、スクショは参考までに

最終更新:2017/07/04

評価基準

  • LTL … ローカルタイムラインを見れるか
  • FTL … 連合タイムラインを見れるか
  • 通知 … 通知がちゃんとリアルタイムで通知されるか
  • 安定動作 … いきなりクラッシュしたりしないか、良くわからないエラーを吐かないか
  • デザイン … 見やすさ
  • 複数アカウント … 複数のアカウントでログインできるか
  • iPad … iPad版がAppStoreで配信されているか

Amaroq

ダウンロード
Mastodonクライアントとしては老舗っていう感じなくらい、初期から存在するアプリです。安定動作はしますが、機能の豊富さとしては少し劣る点を感じます。是もなく非もなくと言った感じですが、ローカルタイムラインが見れないっていうのは個人的には大きいですねローカルタイムライン見れました。しかしながら、はじめの一歩としてのアプリならとても使い勝手が良いと思います。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
×


Tootdon

ダウンロード
個人的に一番気に入っているアプリです。デザイン、動作が共に良くて通知もリアルタイムで届いてくれるので便利です。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Mustor

ダウンロード
長らくお世話になったアプリです。機能やデザインに特に不満はありませんが、通知が時々届かなかったり、いきなりアプリが終了してしまったり、内部的なバグがまだまだあるのかなと思う感じです。リリース当初から見守っているので、今後の展望も楽しみです。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Pawoo

ダウンロード
Pixivが運営しているアプリです。大企業が運営、開発しているため、安定性、使いやすさはピカイチだと思います。pawoo.net以外のインスタンスで利用すると、不便はしない程度の機能制限がかかるらしいです。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
△?


GON

ダウンロード
触った感じ他のアプリに比べて軽いような気がしますが、安定性に欠ける点があります。リロードする度にフォントサイズが変わったり。ただ、最低限までUIを絞っているわりには他のアプリと同程度の機能を有しているので、その点では捨てられません。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Friends.nico

ダウンロード
ニコニコ動画を運営しているドワンゴが開発しているクライアントです。Pawooに比べると若干マイナーな感じはしますが、それでも使用感はPawooに劣らない感じです。さすが大企業の力…けど若干カクつく感じはします。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
△? ×


Tootle

ダウンロード
最近リリースされた遅生まれのクライアントです。タイムラインにフィルターをかけられたりなどの独自の機能が見られますが、安定性ではまだ欠ける点がありそうです。今後の展望に期待。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad


Mameleon

ダウンロード
遅生まれのアプリです。しかしながらサッパリとしたUIを基調としており、とても使いやすくなるように考えられています。しかし、時々謎のエラーを吐いたりと不安定な部分も見られます。開発者さんには今後も頑張っていただきたい。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
△? ×


11t

ダウンロード
こちらも遅生まれのアプリです。他のアプリに比べると機能が少なかったりなど不便な点が多く見受けられます。あとちょっと動作もレスポンスが無かったりと改良すべき点も多いです。

LTL FTL 通知 安定動作 デザイン 使いやすさ 複数アカウント iPad
× × × × ×


Mastodonをメンテナンス状態に切り替える方法

標準

Mastodonのインスタンスをメンテナンス状態に切り替えずに停止していたりすると、404(Not Found)だとか502(Bad Gateway)だとかが周りのインスタンスに返してしまうことになり、結果としてPuSH購読を切られてしまう事になります。そうすると一時的にでも(PuSHの更新が7日周期なので最長7日)連合タイムラインが寂しいことになったりと、インスタンス利用者にも迷惑をかけてしまう事になりかねません。

というわけで今後の為にもしっかりと503(Service Unavailable)を返すように設定しながら、メンテナンスが安心して出来るようにNGINXを設定しましょう。

NGINXの設定ファイル

NGINXの設定ファイル(*.conf)は基本的に /etc/nginx/conf.d に全部入っています。この中に拡張子.confのファイルを入れていくことで色々と設定できます。ココらへんの詳しい仕様は適当にググってみるとよく分かると思います。

私のインスタンスでは、公式ドキュメントにもある設定例を基本的に引用してNGINXの設定をしました。今回は、この公式ドキュメント通りの設定でNGINXを動かしていることを前提に説明していきます。

以下のようにMastodonの設定ファイルを書き換えます。

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name haruhi-mstdn.club; #ドメイン名
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name haruhi-mstdn.club; #ドメイン名

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  #必要なファイルが存在するパスを指定
  ssl_certificate     /etc/letsencrypt/live/haruhi-mstdn.club/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/haruhi-mstdn.club/privkey.pem;
  ssl_dhparam         /etc/ssl/certs/dhparam.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 0;

  #パスを指定
  root /root/mastodon/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(assets|system/media_attachments/files|system/accounts/avatars) {
    add_header Cache-Control "public, max-age=31536000, immutable";
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_intercept_errors on;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://localhost:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 504 /50x.html; #500,501,502,504はそのまま
  error_page 503 @maintenance; #503は新たに定義する
  location @maintenance {
    root /var/www/error_pages; #表示させたいhtmlファイルが存在するパスを指定
    rewrite ^(.*)$ /custom_503.html break; #表示させたいhtmlファイルにリダイレクト
    internal; #表面上はリダイレクトしたように見せない
  }

  #ここからメンテナンス状態するかどうかの判定
  set $maintenance false;

  #/var/tmp/503というファイルが存在すればメンテナンスモードに切り替え
  if (-e /var/tmp/503) {
    set $maintenance true;
  }

  #自分はいつも通りにアクセスできるように
  if ($remote_addr = "***.***.***.***") {
  set $maintenance false;
  }

  #メンテナンスモードになっているなら503を返す
  if ($maintenance = true) {
    return 503;
  }
  #ここまで判定
}

一部カスタムが必要な部分がありますが、基本的にはこの通りに書けばちゃんと動くと思います。書き換えた後には nginx -t を実行し、反映させる時は systemctl restart nginx をお忘れなきよう。

表示させるHTMLファイル

デフォルトの503ページでも機能を果たしていれば別に問題は無いのですが、やはりアクセスしてくれた利用者には「いつまで続くのか」「何をしているのか」を明示したいものです。というわけで、専用の503ページを作っていきます。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <title>メンテナンス中</title>
    <meta charset="UTF-8" />
    <style>
      article#main {
      width:80%;
      margin:0 auto;
    }
    </style>
  </head>
  <body>
    <article id="main">
      <h1>メンテナンス中</h1>
      <h2>503 - Service Unavailable</h2>
      現在、Mastodonのアップデートに伴う臨時メンテナンスを行っております。ご不便をおかけしますが、ご理解とご協力の程をよろしくお願いいたします。
      <ul>
        <li>期間:XX時XX分~XX時XX分(予定)</li>
        <li>内容:Mastodon 1.x.x -> 1.x.xへのアップデート</li>
      </ul>
    </article>
  </body>
</html>

これを先程のNGINXで設定したディレクトリに入れます。ファイル自身やディレクトリに対してchmodを使ってパーミッションを変更することを絶対に忘れないで下さいね。そうしないと、せっかくファイルを作っても外部からアクセスすることが出来ません。

メンテナンスモードに切り替え

いよいよ実際にメンテナンスモードに切り替えていきます。今回の設定では /var/tmp/503 が存在するか否かで判定をしていますので、touch /var/tmp/503 を実行するだけで切り替えられます。超便利!逆にメンテナンスモードを解除する時は rm -f /var/tmp/503 を実行するだけです。


tor(外部IP)で確認してみると、しっかりと専用503ページが表示されていることが分かります。しかもURLもそのまま。

この切替さえ忘れなければPuSH購読を切られること無く安心してメンテナンスを行うことが出来るので、是非活用してみてください。

何か不具合などが有りましたらお気軽にコメント下さい。よろしくお願いします。

Mastodonのカスタム方法

標準

Mastodonのインスタンスを構築する方法は検索すれば山ほどヒットするので、その分資料が少ないインスタンスのカスタム方法について今日は説明します。インスタンスの構築する方法についての記事はや「Mastodon(マストドン)のインスタンスをCentOS7で立ててみる」、「CentOS7でmastodonを建てる」辺りを見れば完璧ではないかなと思います。

追記:以下のサイトもとても参考になります。

ちなみに私が運営するmastodonのインスタンスは haruhi-mstdn.club ですので、よろしくお願いします。

表示される言葉のカスタム

config/locales に入っている大量の言語ファイルをカスタムしていくことで新たな言語(語録集)や表示される文言を簡単に変えることが出来ます。

---
ja:
  about:
    about_mastodon: Mastodon は&lt;em&gt;自由でオープンソース&lt;/em&gt;なソーシャルネットワークです。商用プラットフォームの代替となる&lt;em&gt;分散型&lt;/em&gt;を採用し、あなたのやりとりが一つの会社によって独占されるのを防ぎます。信頼できるインスタンスを選択してください &amp;mdash; どのインスタンスを選んでも、誰とでもやりとりすることができます。 だれでも自分の Mastodon インスタンスを作ることができ、シームレスに&lt;em&gt;ソーシャルネットワーク&lt;/em&gt;に参加できます。
    about_this: ご利用前にお読みください
    apps: アプリ
    business_email: 'メールアドレス:'
    closed_registrations: 現在このインスタンスでの新規登録は受け付けていません。
    contact: 連絡先
    description_headline: "%{domain} とは?"
    domain_count_after: 個のインスタンス
    domain_count_before: 接続中
    features:
      api: アプリやその他サービスにAPIを公開
      blocks: 豊富なブロックやミュート機能
      characters: 1つの投稿は500文字まで利用可能
      chronology: 時系列順のタイムライン
      ethics: 広告もトラッキングもありません
      gifv: GIFVや短い動画にも対応
      privacy: 投稿ごとに公開範囲を細かく設定可能
      public: 公開タイムライン
    features_headline: Mastodon の特徴
    get_started: 参加する
    links: リンク
    other_instances: 他のインスタンス
    source_code: ソースコード
    status_count_after: トゥート
    status_count_before: トゥート数
    terms: プライバシーポリシー
    user_count_after: 人
    user_count_before: ユーザー数
(以下略)

画像のカスタム

うちのインスタンスはアニメ愛好家向けだからゾウさんなんか表示しないで自分の推しキャラを出したい!という方におすすめです。Mastodonで使われる画像は app/assets/images app/javascript/images に格納されています。ここに代わりの画像を置いてあげることで任意の画像を背景やトップページのゾウさんの代わりに表示させることが出来ます。最終的には以下のような感じになれば正解です。

CSSとJavaScriptのカスタム

これも同じように app/assets/stylesheets app/javascript/stylesapp/assets/javascripts app/javascript/mastodon に格納されている.scssファイルと.jsファイルをを編集することで変更することが出来ます。私の場合、背景が左揃いになっているのが気に食わなかったので、中央揃い(background-position:50% 50%;)にするなどのカスタムをしました。

最後に反映させよう

画像、CSS、JavaScriptファイルは動的なサイトにするため(?)に圧縮されています。この圧縮過程を飛ばしてしまうと反映はいつまで経ってもされないので忘れないようにします。
まずは実際にMastodonで使えるようにメディアファイル集assetsを作成します。コマンドラインに以下のように打ち込みます。

//assetsフォルダを全消去したい場合。全てをやり直したい人向け。
# docker-compose run --rm web rails assets:clobber

//assetsフォルダにある昔のものを消去したい場合。普段はこっちで十分かな。
# docker-compose run --rm web rails assets:clean

//上の2つのコマンドのうちどちらかを実行したら、メディアファイル群を事前コンパイルする。
# docker-compose run --rm web rails assets:precompile

//mastodon全体を再ビルド
# docker-compose build

//mastodonを再起動
# docker-compose restart

追記(2017/07/06):Mastodonをスタートアップスクリプトで立ち上げた場合はdockerを使わないのでこちらのご指摘の通りやってみてください。

これで色々とカスタムの幅が広がったので、自分だけのインスタンスを発展させていってください。それでは。

追記(2017/04/28):当ブログの記事を見て、「出来なかった!」「困った!」といった問題があればコメントをお願いします。

追記(2017/06/18):Mastodon 1.4.1からディレクトリ構造に色々と変更が加わった、という旨のご報告をいただきましたので最新の情報に更新しました。ご報告ありがとうございました。

Mastodonをはじめよう

標準

1週間ほど前から日本国内でアツくなり始めたMastodon(マストドン)。このページでは始め方や仕組み、各プラットフォーム(iOS, Android, Windows, Linux, MacOS…)でのクライアントなどを紹介、説明していきます。

Mastodonとは?

Mastodonは他のSNSでは見られない「分散型」という仕組みを採用しています。個人でも企業でも誰でも簡単にそれぞれの拠点となる「インスタンス」を立ち上げることが出来て、それぞれのインスタンスがそれぞれのサービスとして機能します。それぞれが独立して機能していますので、それぞれのインスタンスが各管理者の意向で動きます。意向というのは例えば運営方針や、メンテナンスのタイミング、話題などです。

と言っても、各インスタンスが独立しているからと言ってそれぞれのインスタンス同士でコミュニケーションがとれないというわけではありません。多くのインスタンスは数百ものインスタンスと「連合」を組んでおり、その連合を組んでいるインスタンス同士であれば普段からフォローをしていなくても「トゥート」をお互いに見ることも可能ですし、連合を組んでいないインスタンス同士でも、「リモートフォロー」をすることで新たにそのインスタンス同士で連合を組むことが出来ます。

このようにオープンソースであることを最大限まで活用して運営されているMastodon。これからも目が離せない新サービスになりそうです。

インスタンスを選ぶ

次は自分が登録するインスタンスを選びましょう。単純にSNSとしてのMastodonを楽しみたいのであれば日本人の多いインスタンスの方がきっと楽しいでしょうし、専門の分野について話したいのであればそれに適したインスタンスを選ぶと良いでしょう。そんな感じにインスタンスを決めるためにインスタンス一覧がいくつか用意されています。ぜひ活用してください。

日本だけでも結構ジャンル別のインスタンスに別れてるんですね。私は「mstdn.jp」と「x0r.be」と「pawoo.net」の3つのインスタンスに登録しています。なお、現段階ではアカウント削除については対応していないので、くれぐれも注意してください。また、無名の海外のインスタンスに登録したりすると凄くアウェー感あふれることになるかもしれない点も注意が必要です。

クライアントを使おう

いざMastodonを頻繁に使おうとしても、いちいちブラウザからインスタンスにアクセスしているようでは通信容量も多くなりますし、なにより面倒です。そこで使うのが専用クライアント。これを使うことでより一層便利にMastodonを使うことが出来ますので、ぜひ利用してみては。

対応 クライアント名 備考
Android Tusky Androidでは見た感じ最もポピュラーなクライアント。
11t
TootyFruity リリース前なので不安定。
iOS Amaroq 現在はこれしかiOSはありません。
Windows Capella 開発途上なので私の環境では結構不安定でした。
Mastodon UWP app UWP版です。他に比べるとまだほとんど機能はありません。
Windows/Linux/Mac Web-based Desktop Client デスクトップで単独アプリとして楽しめます。結構安定しています。

ブラウザ拡張でより賢く

この章はChromeユーザー対象の文になってしまいますが、ご容赦ください。Chromeには拡張機能が用意されていて、それを使うことでMastodonをより便利に、賢く使うことが出来ます。

とりあえずTooterです。この拡張機能は普段Twitterを使っている方は簡単にTwitterとMastodonの両方に同じ内容を投稿することが出来ます。いちいち画面を切り替えて投稿していて、煩わしい思いをしている方には嬉しい機能です。公式ページ(twitter.comの一部)でのツイート、tweetdeckの両方で使うことが出来ます。



最後に

Mastodonの成長は1週間でmstdn.jpのユーザー数が7万人を超えるほど、めまぐるしい成長を遂げました。これからも暫くはその成長は衰えることは無いでしょう。初期の方はあまりの急成長さで新規会員の登録を中止したり、サーバーを急遽補強したり色々と大変でした。今では7万人を越すユーザー数を獲得している過去にも、途中で全ユーザーのデータが吹っ飛んで0からのスタートを2回していますが、これだけユーザー数が集まるってのは相当ですよね。それだけの魅力があるのだから、これから先もサービスも含めて更に成長していくことを心から願っています。