アイマストドンの7ヶ月半をgithubのPRベースで振り返る

お久しぶりです、と書く必要があるほどここの存在を知っている方がいるかはわかりませんが、フサギコです。 前の記事から10ヶ月ぶりと考えると、僕が筆不精であることがよくわかります。

この記事は「Mastodon Advent Calendar 2017」 2日目の記事です。
また、私のマストドンのアカウントは fusagiko@imastodon.net です。

と書きつつ、Advent Calendarの序盤なので念のため、マストドン自体について短めに説明しますと、

というものです。

上記の「独自のテーマや管理方針で運営できる」という特徴から、日本では

mstdn.jp
nullkalさんが個人で作った、日本で最初に有名になったインスタンスです。
pawoo
大手イラスト投稿サイト「Pixiv」の公式インスタンスです。
friends.nico
大手動画投稿サイト「ニコニコ動画」の公式インスタンスです。
らを始めとした様々なテーマのインスタンス(サーバ)が公開されており、私はその中で「アイドルマスターに興味がある人」を対象層としたアイマストドン(imastodon.net)を個人で運営しています。

アイマストドンは、マストドン(以降"本家"と呼ぶことにします)の公開されているソースコードに独自の改造を加えて運営を行っているのですが、この記事ではアイマスドトンにどのような改造が入っているのかをgithubにおいてマージしたPull Request単位で振り返ってみようと思います。


独自ロケール「日本語(im@s)」 #1

記念すべき(?)初改造。 実は改造を始めたのは僕ではありませんでした。 内容としてはロケール(多言語対応)ファイルを独自に追加し、そこはかとなくアイマスっぽい感じがするような用語に変えるというもので、これ以降の本家バージョンアップ追従による用語の増減にもしっかり対応しています。

画像類の変更  #2, #3, #4, #46, #52, #98, #102

インスタンスの個性を出すならまずは見た目、ということでアイマストドンそれ自体の独自のロゴをデザインしていただいたり、随所で表示される様々な画像を絵が描ける皆さんに描いていただき、本家の画像と差し替えました。 どれも気に入っているのですが、その中でもロゴ、特にゾウ目であるマストドンアイマスで象徴的な記号である@が重ね合わせてデザインされている部分が気に入っています。 imastodon_logo

初めましての方へ #5, #6, #14, #17, #106

デッドスペースだった投稿欄の下に「初めましての方へ」と題した折り畳み可能な歓迎メッセージを設置しました。 投稿欄下はそれなりに多くのインスタンスで告知欄などとして活用されていますが、僕が勉強不足(今も足りているなどとは全く言い難いですが)だった初期の実装であったこともあり、アイマストドンの実装では動的に変更できるようにはなっていません。 これを後述する管理人からのお知らせ機能と合わせ「動的に変更できる投稿欄下の告知欄」となるように現在改修を行っています。

管理人からのお知らせ機能 #8, #11, #15, #36, #43, #67

メンテナンス等の事前告知がしたい、ということで目につきやすい投稿欄の上に動的に変更できる告知欄を設置し、運用していました。 こちらは動的に変更可能でHTMLタグが使える代わりに畳めない(details要素を用いれば一応可能)という問題がありました。 前述した通り現在改修を行っており、将来的にはそちらに統合される予定です。

未収載タグ付き投稿の表示 #32, #107

本家マストドンのタグTLでは、ハッシュタグが付与された投稿であったとしても公開範囲がpublicであるものしか表示されない仕様となっています。 これをアイマストドンにおいてはunlistedであるものも合わせて表示するようにした、という変更です。 これは後述のお気に入りタグ機能と合わせて使う事を意図するもので、これを導入するに至った経緯についてはEntyの記事に詳しく書いてあります。 未収載タグ投稿後のコピー

お気に入りタグ機能 #28, #35, #37, #40, #48, #59, #60, #64, #65, #69, #70, #75, #94, #95, #100, #101

元はfriends.nicoの機能なのですがこれを輸入し、前述の「未収載タグ付き投稿の表示」と合わせて使うために公開範囲も連動して設定できるよう更なる改造を加えています。

お気に入りタグロックのコピー

トレンドタグ #109, #115, #118, #119

「未収載タグ付き投稿の表示」および「お気に入りタグ機能」を導入したことにより、「未収載タグ付きで実況を行っていることが主に新しく来た方に伝わらない」という良く考えてみれば当然の現象が発生しており、それに対する解決策として現在実装を試みているものです。

sidekiqのスケジューラーを用いて毎時n*10+5分(nは0~5の整数)に過去10分間のハッシュタグの使用回数を集計し、需要予測に用いる二重指数平滑法という式を用いて各タグの人気度を計算し、その人気度をAPIを通じて提供するという動作をしています。

これの結果の表示をマストドンのUIに埋め込むべきなのか、ローカルTLに定期的に流すbotとして運用していくべきなのかはどちらも一長一短であり、少し迷っています。

png→jpg変換 #23, #30, #31, #33, #55, #78

アイマストドンではPCやスマートフォン端末の画面スクリーンショット、特にデレステやミリシタを始めとしたアイドルマスターのゲームのそれが多くアップロードされる利用傾向にあり、それらはpng画像として保存・アップロードされるため、画像ストレージの容量を多く消費、ならびに表示するためのダウンロード時間が長く待たされるという問題がありました。

これの対策として、透過部分を持たないpng画像について、jpgで保存したほうが容量が小さくなる場合にはjpgで保存するようにした、というものです。  実装とその効果についてはこちらのスライドに少しだけ詳しく書いてあります。

画像サイズ上限の変更 #79

上記「png→jpg変換」を実装したことにより画像ストレージの消費ペースに余裕が生まれ、また最大画像サイズが長辺1280pxは近年のスマートフォンの画面解像度の向上に比べて考えると少し小さいと感じていたため、長辺1920pxへ制限を緩和しました。 それでも依然として長辺1280px上限だったころのpng画像の4分の1から3分の1程度のファイル容量で収まっています。

新規登録時のカラムの並び順を変更 #58

本家において新規登録直後のログイン時に表示されているカラムはホームTLおよび通知のみとなっています。 そのため新規登録ユーザがとりあえず投稿してみた、という状況の際にローカルTLを見ていたユーザからいきなり投稿をお気に入りされどこから見られているのかわからず混乱したり、またローカルTLの存在にそもそも気付くことができていなさそうという事象が幾度か観測されていました。 そこでローカルTLが最初化から視界に入っているように、デフォルトでローカルTL、通知、ホームTLという順番にデフォルトの並び順を変更しました。

チュートリアル機能 #97, #117

これもまた元々はfriends.nicoの機能ですが、このチュートリアルが非常によく出来ていたため、輸入してアイマストドン向けに内容を変更しました。 その際にバグが発覚したためバグ修正の輸出もしていたりします。

チュートリアル1チュートリアル2

未収載以下の公開範囲の投稿に対して投稿範囲アイコンを表示 #88

「未収載タグ付き投稿の表示」等により公開範囲の使い分けを推奨しているアイマストドンですが、公開範囲について見た目からの判別が困難であるとの問題があり、これへの対応として、未収載以下の投稿範囲の場合には投稿の右下にアイコンを付けるようにしました。

094b31ff2a57e0c4

カラム設定アイコンの変更 #47

本家においてカラム設定を開くボタンのアイコンとして使用されているイコライザ的なアイコンは正直わかりづらいと思ったので、日本人に馴染みのある歯車アイコンに変更しています。

通知欄のカラム設定にフォロー/フォロー外からの通知のブロック設定への誘導を追加  #104, #114

通知に関する設定のうち、フォロー/フォロー外からの通知のブロック設定のみrails側の設定画面に存在し、その場所がわかりづらかったため、通知欄のカラム設定から誘導するリンクを追加しました。

アイマストドンFAQへのリンクの追加 #81

アイマストドンは本家に独自の機能を加えて運営しているインスタンスですが、インスタンスのテーマがアイマスだからか、新規登録するユーザはマストドン自体初めてであることが少なくありません。

しかしながらマストドンそれ自体について、また更にアイマストドンの独自機能についてを必要に応じて都度、教えることは正直難しくなってきています。 そのため本記事中でも既に引用していますがFAQをgithubリポジトリ上で編集し、アイマスドトンFAQとして提供しています。

本家バージョンアップへの追従 #10, #16, #18, #21, #34, #77, #80, #99

アイマストドンの本家追従は基本的にバージョンタグ単位で行っています。 …追従のPRのレビューをしている間に次のバージョンがリリースされてしまい飛んだりしたこともありましたが。

デザインの変更、リファクタリング #24, #84, #91, #110, #120

README.mdへアイマストドンについての情報を追加 #112

ウェブアプリ化する際に参照されるmanifest.jsonの変更 #12

ソースコード公開リポジトリ表示の差し替え #53, #54

本家の変更の先取り(cherry-pick) #26, #49, #83, #108


こうやって振り返ると、大小ありますが全部で80個ほどのPRをマージしていて結構改造しているんだなぁ、と改めて実感します。個人運営でトップクラスの改造を施している、という点では最近神崎丼に追いつかれるか追い抜かされているか、という感もありますが。

アイマストドンはアイマスに興味がある皆さんを広くお待ちしています。
また本体のコードにcontributeしてくださる方、FAQの項目を書いてくださる方もお待ちしています。

アイマスの話をしたりたまに脱線したり、だいたいアイマスアイマストドン、きっと楽しいですよ。

明日「Mastodon Advent Calendar 2017」 3日目は、冒頭にも挙げた"日本で最初に有名になったインスタンス"ことmstdn.jpを構築し、現在も24h運用以外のほぼ全てを行っているぬるかるさんです。