はんドンクラブ 運営ブログ

Mastodonインスタンス「handon.club」の運営ブログです。コラムなど,Mastodonに関する一般的な記事も投稿予定です。

Mastodonのカスタム絵文字について

こちらの記事では, Mastodonのカスタム絵文字について,その使い方をご説明します。後半には,一般的な話だけでなく,handon.clubに特化したガイドライン的な内容も含まれますのでご注意ください。随時更新します。

目次

1. そもそもカスタム絵文字って何?

Mastodonでは,一般的なPCやスマホで最初から利用出来る絵文字(😃💦🍺など)も投稿できますが,インスタンス管理者が個別に用意した絵文字も投稿することができます。このようなインスタンス固有の絵文字のことを「カスタム絵文字」といいます。

Mastodonにおけるカスタム絵文字は,以下のような特徴を持っています。ここで,「インスタンス」というのは「サーバー」のことと同義で,例えば「jp鯖」「Pawoo」や「はんドンクラブ」のことを指しています。

【カスタム絵文字】

  • インスタンス管理者だけが登録可能
  • カスタム絵文字の「投稿」は,所属しているインスタンスに登録されているカスタム絵文字しか使えない
  • カスタム絵文字の「閲覧」は,違うインスタンスからでも可能

つまり,「はんドンクラブ固有のカスタム絵文字を使ったらjp鯖の人には見えない」ということにはならない点がポイントです。所属インスタンスによって制限があるのは「投稿」するときのみで,「閲覧」はどのインスタンスからも可能です。

2. カスタム絵文字の使い方を教えて?

実際にカスタム絵文字を使って投稿してみましょう。なお,カスタム絵文字が使える範囲は,トゥート本文のほか,スクリーンネーム・プロフィールなども含まれます。

2-1. Webからの使い方

f:id:highemerly:20190204224228p:plain
Webのカスタム絵文字投稿画面

投稿欄の右上にある顔文字マークを押すと,上図のように絵文字入力画面に遷移します。この画面にはカスタム絵文字以外も表示されており,「カスタム絵文字」と書かれたセクションのみがカスタム絵文字ですのでご注意ください。

絵文字入力画面では,クリックすると好きな絵文字を入力できます。クリックすると,例えば:donmi:のように, ":" で囲われた文字列が入力されるかと思います。この ":" で囲われた文字列のことをショートコードと呼びますが,Webの投稿欄ではカスタム絵文字が直接表示できないため,代わりにこのショートコードが表示される仕組みになっています。なお,よく使うカスタム絵文字については,このショートコードを覚えて直接投稿欄に入力すれば,絵文字入力画面を表示させずとも投稿可能です。

絵文字の入力にあたっては,以下の点に注意してください。

【カスタム絵文字 入力の注意点】

  • ショートコードの周りにある ":" を削除しない
  • ショートコード+":" の前後には必ず半角スペースを空ける

特に2点目はよく失敗している方を見かけますので注意しましょう。たとえば「 :donmi: 」であれば,以下の【正】のように,前後に半角スペースを入力してください。

【誤】 今日も:donmi:ちゃんがかわいい
【誤】 今日も : donmi : ちゃんがかわいい
【正】 今日も :donmi: ちゃんがかわいい

最後にショートコードについて補足します。冒頭の「そもそもカスタム絵文字って何?」でご紹介したとおり,カスタム絵文字はインスタンスの管理者が登録します。つまり,このショートコードも管理者が指定したものであることになります。よって,他のインスタンスで投稿する場合,全く同じカスタム絵文字のように見えてもショートコードが異なる可能性があります*1ので注意してください。

2-2. クライアントからの使い方

クライアントからの使い方も基本的には同じです。各クライアントの指示に従って入力してください。しかしながら,クライアントを使っている場合,カスタム絵文字の挙動がWebと大きく異なる場合があります。差異はもちろんクライアントによるのですが,一般的には以下の表の様になっています。

【凡例】

  • 赤字: Webに対してクライアントが勝る
  • 青字: Webに対してクライアントが劣る

【表示についての差異】

項目 Web クライアント
トゥートでの表示 画像で表示される ほとんどのクライアントで画像で表示される
スクリーンネームでの表示 画像で表示される 画像で表示されるクライアント(Tootle等)もあるが,表示されずショートコードが文字列として表示されるクライアントもある
プロフィールでの表示 画像で表示される 画像で表示されるクライアント(Tootle等)もあるが,表示されずショートコードが文字列として表示されるクライアントもある
アニメーション絵文字の表示 アニメーションで表示させることも可能 *2 アニメーションで表示されるクライアント(星プテラノ等)もあるが,止まったまま動かないクライアントもある

【入力についての差異】

項目 Web クライアント
入力 可能 ほとんどのクライアントで可能
入力後の投稿欄での表示 ショートコード+":"で表示され,トゥートすると画像になる ショートコード+":"で表示され,トゥートすると画像になるクライアントもあるが,投稿欄の段階から画像として表示できるクライアントもある (Tootdon等)
前後の半角スペースの要否 基本的には必要 基本的には必要だが,不可視のスペースを自動挿入することで不要とできるクライアントもある (Tootle等)
入力時の連打可否 一つ入力すると絵文字入力画面が消えるため不可 不可のものもあるが,可能(一つ入力しても絵文字入力画面が消えないため連打が可能)なクライアントもある(Tootdon,Tootle等多数)
ショートコード直接入力時の補完 可能 不可のクライアントが多い
不可視絵文字の扱い 一覧には表示されないが,ショートコードを直接入力すれば入力可 一覧には表示されないが,ショートコードを直接入力すれば入力可。しかしごく一部のクライアント(Tootdon等)のみ,不可視絵文字も一覧に表示される場合がある

表をみると分かるとおり,「カスタム絵文字対応」と謳っているクライアントであっても,必ずしもすべてのカスタム絵文字関連機能に対応しているわけではない 点に注意ください。特に,私の知る限り,表示に関してはWebと完全に同等の機能が実装されているクライアントは少ないです。しかし一方入力に関しては,便利な機能を搭載しているクライアントが多いようですね。

2-3. handon.clubにおけるカスタム絵文字の使い方

様々なカスタム絵文字をご用意しています。便利なカスタム絵文字の使い方をいくつかご紹介します。

  • 「スペース」について

カスタム絵文字を複数並べて投稿しようと思ったことはありませんか? そのとき,何も考えずに半角スペースや全角スペースを入れて表示位置を調整すると,絵文字が若干"ずれた"経験がある方もいらっしゃるのではないでしょうか。そんなときは:space: をご利用ください。このカスタム絵文字は,他のカスタム絵文字と同じサイズの空白の絵文字です。巨大アートを作る際には是非使ってみてください。

  • 「文字列絵文字」について

はんドンクラブで人気のある絵文字の一つが,4文字程度の文字を絵文字にした「文字列絵文字」です。例えば,:str_otsukare::str_arigato: などが該当します。これらの「文字列絵文字」については,すべてショートコードの頭に str (stringの頭文字)を付与しています。

なお,絵文字入力画面では,カスタム絵文字はアルファベット順に表示されています(ごく一部のクライアントを除く)。そのため,str のつく絵文字は固まって表示されているはずです。ぜひ探してみてください。

  • 不可視絵文字について

一部のユーザから要望のあった絵文字を不可視絵文字(隠し絵文字)として登録している場合があります。この場合,ショートコードは要望を頂いた方にしか教えていませんが,他の人は使えないわけではありません。こちらも探してみてくださいね。

3. カスタム絵文字はどうやったら登録できるの?

Mastodonの仕様上は,以下の制限さえクリアすれば,任意の画像をカスタム絵文字として登録可能です。

  • 形式がpng形式であること
  • 容量が50KB以下であること

しかし,残念ながら,一般ユーザではカスタム絵文字を新たに登録することはできません。インスタンス管理者による操作が必要です。そこで handon.club においては,上記に加えいくつかの要件を満たせば,ユーザからのカスタム絵文字の登録を受け付けています。

【カスタム絵文字登録の条件】

  • ルール
    • インターネットにアップロードしても法に反しない画像であること
    • 公序良俗に反しない画像であること
  • フォーマット
    • アスペクト比(画像サイズの縦横比)が1:1であること
    • 背景が透過されたpng形式画像であること
    • サイズが50KB以下であること

【カスタム絵文字登録依頼の方法】

  • 管理人まで@等で画像を送付すること
    • ショートコードの案もあわせていただけると助かります

なお,上記を満たしていても,管理人がやむを得ないと判断した場合は,不可視絵文字(隠し絵文字)とさせていただく場合,また登録をお断りする場合がありますのでご了承ください。また,フォーマットについては,やむを得ない理由で上記条件を満たせない場合は,管理人で加工することも可能です。しかしながら,登録に時間を要する場合があることはご了承ください。

おわりに

今日はMastodon,特にhandon.clubにおけるカスタム絵文字についてご説明しました。クライアントに関する情報は今後も更新していきたいとおもいます。また,ご不明点などあれば気軽にお問い合わせくださいね。

*1:実際には,インスタンスが違っても,ショートコードが同じ場合は多いです。これは,インスタンス管理者であれば,他のインスタンスから「カスタム絵文字をインポートする」ことができるからです。

*2:ユーザ設定によって,マウスポインタを当てたときだけアニメーションさせる(初期設定),または常にアニメーションさせることが可能。

【バージョンアップ】2.7.1にアップデートしました

handon.club は v2.7.0 → v2.7.1 へアップデートしました🎉

アップデートの概要

Mastodon 2.7について,パッチリリースがありましたので,アップデートを行いました。

  • githubへリリースされてからアップデート完了まで,21時間を要しました
  • アップデートにかかるサービス中断時間は8分44秒でした

前回バージョンからの変更点

前回バージョン(2.7.0)からの主な変更点はバグ修正です。

より詳細な変更点はリリースノートを参照ください。

Release v2.7.1 · tootsuite/mastodon · GitHub

おわりに

2.7.0から導入された新機能である「Explore」(Directoryとも呼ばれます)がオススメです。以下ページの下部に紹介がありますので,是非ご検討ください!

handon.hatenablog.jp

【Prometheus+Grafana】Mastodonサーバの外形監視(HTTPレスポンスタイム等)

こんばんは。

Mastodonインスタンスの1つである「handon.club」では,昨日より外形監視を始めました。構成は,Prometheus+Grafanaのオンプレ構成です。

今日は,今回構築した「handon.club」における外形監視の例を使って,Mastodonサーバの外形監視方法についてご紹介したいと思います。なお,日本語で設定方法を解説している記事が見つからなかったため,具体的な設定の方法についても触れたいと思います。

外形監視

本投稿でいう外形監視とは,「HTTPレスポンス」に関する統計情報(メトリクス)を指します。一般に外形監視とは,サーバのCPU利用率やディスクI/Oといった内部の情報ではなく,サーバの外部から見える範囲での情報を使った監視のことです。よくあるping監視もそのうちの1つと考えますが,今回はHTTPレスポンスに限った話をします。

Mastodonインスタンスのhandon.clubにおける外形監視についてですが,特に2つのフロントエンドサーバについて,以下の観点の監視が必要だと考えています。

そこで,以下に示すような監視システムを構築することで,要件を満たす外形監視を実現しました。

全体の構成

本章では,今回構築した監視システムの全体概要を説明します。

f:id:highemerly:20190128233137p:plain
Prometheus+Grafanaによる監視システム構成

まずはじめに,監視方式として,makarelやdatadogといったクラウドサービスを使うか,それとも自分で監視サーバを構築するかという2択を選択しなくてはなりません。しかし,前者のクラウドサービスを使う場合,当然ながら無料で使える範囲には限りがあります。残念ながら私の要件を満たすためには,有料プランの契約が必要となるようでした。どうせお金を払うならば,ということで,今回は自分で構築する道を選びました。

今回,監視サーバの基幹には,Prometheusというサーバ監視ツールを使いましたGoogleにおけるサーバ監視のノウハウが生かされているとの噂で,最近人気上昇中のOSS監視ツールです。pull型(監視対象に定期的にメトリクスを取得にいく方式)が採用されている点が最大の特徴です。

このPrometheusは,監視サーバそのものに加え,監視対象サーバ側で動作させる「exporter」と呼ばれるプログラムから構成されています。pull型の監視ソリューションであるPrometheusは,監視サーバそのものがこのexporterに対してメトリクスを要求することで,必要な情報を集めるしくみになっています。exporterは非常に多くの種類が用意されており,監視したい項目に応じて自由に選ぶことできます。今回はそのexporterの中でも,外形監視を実現するために用意されている「blackbox-exporter」を使って,外形監視を行いました。

一方Grafanaは,様々な情報をグラフィカルに表示する可視化ツールです。有名なので詳細は割愛します。

事前準備

以下の作業は行われているものとします。

  • Mastodonサーバを構築済みであること
  • Prometheus,Grafanaを構築済みで,それらの連携設定が完了していること

実際にMastodonサーバで外形監視を行おうとしている方で,もし上記の作業を実施していない方がいらっしゃいましたら,他の方の書かれた記事を参照してみてください。ググるとたくさん出てきます。

また,今回のサーバ環境は以下の通りです。

  • Host OS: CentOS 7
  • Prometheus: 2.6.1
  • Grafama: 5.4.3

blackbox-exporterの導入

blackbox-exporterは,ICMPおよびHTTPによる外形監視を実現することのできるPrometheus用exporterです。通常のexporterは監視対象サーバで動作させますが,外形監視の性質から考えて,このexporterは監視サーバ本体で動作させるのが一般的です。動作のイメージを以下に示します。この図では,先ほどの図に比べて,exporter名を正確に記載しています。

f:id:highemerly:20190201003535p:plain
システム概略図(exporter名入り)

では,導入手順を説明します。まずはじめに,以下のようにexporterを適当な場所に配置する必要があります。exporterはバイナリが配布されていますので,導入はとっても簡単ですね。

$ cd /usr/local/src/exporter/
$ sudo wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.13.0/blackbox_exporter-0.13.0.linux-amd64.tar.gz
$ sudo tar -zxvf blackbox_exporter-0.13.0.linux-amd64.tar.gz
$ sudo ln -s blackbox_exporter-0.13.0.linux-amd64.tar.gz/ blackbox_exporter

ただし,バージョン,ディストリビューション,プラットフォームは環境等に合わせて設定してください。

Releases · prometheus/blackbox_exporter · GitHub

さて,一度起動してみましょう。

$ cd /usr/local/src/exporter/blackbox_exporter
$ ./blackbox_exporter

level=info ts=2019-01-28T15:03:15.017239345Z caller=main.go:215 msg="Starting blackbox_exporter" version="(version=0.13.0, branch=HEAD, revision=1cfb7512daa7e100abb32037996c8f805990d813)"
level=info ts=2019-01-28T15:03:15.019513325Z caller=main.go:228 msg="Loaded config file"
level=info ts=2019-01-28T15:03:15.019660332Z caller=main.go:332 msg="Listening on address" address=:9115

正常に起動しているっぽいですね。また,9115ポートで待ち受けていることも分かります。

さて,コマンドで起動することが確認出来たら,Linuxにサービスとして登録し,常時動かせるようにしましょう。

$ sudoedit /usr/lib/systemd/system/prometheus-blackbox-exporter.service 

[Unit]
Description=Prometheus's client - blackbox exporter
Documentation=https://github.com/prometheus/blackbox_exporter

[Service]
Type=simple
ExecStart=/usr/local/src/exporter/blackbox_exporter/blackbox_exporter --config.file=/usr/local/src/exporter/blackbox_exporter/blackbox.yml

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable prometheus-blackbox-exporter
$ sudo systemctl start prometheus-blackbox-exporter
$ sudo systemctl status prometheus-blackbox-exporter -l

● prometheus-blackbox-exporter.service - Prometheus's client - blackbox exporter
   Loaded: loaded (/usr/lib/systemd/system/prometheus-blackbox-exporter.service; disabled; vendor preset: disabled)
   Active: active (running) since 火 2019-01-29 00:03:23 JST; 1min 15s ago
     Docs: https://github.com/prometheus/blackbox_exporter
 Main PID: 31928 (blackbox_export)
   CGroup: /system.slice/prometheus-blackbox-exporter.service
           └─31928 /usr/local/src/exporter/blackbox_exporter/blackbox_exporter --config.file=/usr/local/src/exporter/blackbox_exporter/blackbox.yml

ここで注意点です。.service ファイル中に呪文のように Restart=always と書く方がいらっしゃいます(自分もそうでした)。しかし,このblackbox-exporterについては, Restart=always を設定するとうまく動きません。詳細な原因までは追っていませんが,再起動すると「前回の終了から次の起動までの時間が短すぎる」という旨のエラーメッセージが表示されてうまく起動しないようです。

ちなみに,実行時にblackbox.ymlという設定ファイルを指定してますが,この設定ファイルは私はデフォルトのままいじっていません。

これでblackbox-exporter側の設定は完了です。

Prometheus側の設定変更

実際に外形監視を行うURLなどはPrometheus側の設定にて行います。設定は, blackbox-exporterのドキュメントを参考にしました。具体的には,prometheus.ymlに以下の記述を追加しました。

$ sudoedit /path/to/prometheus.yml

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'blackbox'
    scrape_timeout: 10s
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - https://handon.club/                                          # Web Server
        - https://handon.club/api/v1/timelines/public    # REST API Server
        - https://media.handon.club/xxxxxxx                 # Media Server
        labels:
          group: 'response'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115

targets 配下に監視対象のURLを記載しているところがポイントです。私は以下の3つを監視対象としました。

  1. <Mastodon-host>
  2. <Mastodon-host>/api/v1/timelines/public
  3. <Mastodon-media-host>/<適当な画像のpath>

この監視対象URLをなぜこのように設定したかについて解説したいとおもいます。まず,1つめの2つめの違いについてです。

1つめはWebページそのものを,2つめはAPIをコールしてTLを取得しています。1つめのMastodonのトップページでは,FederationまたはLocalのTLが表示されているため,1つめと2つめの違いは一見,APIを間接的にコールするか直接コールするかの違いしかないように思えます。しかしながら,1つめのトップページについては,HTTPレスポンス上TL表示がすべて完了する前に「200 OK」を返してしまうのです。つまり,HTTPレスポンスを監視するblackbox-exporterでは,1つめのURLだけを監視すると,TL表示に関するレスポンスは監視出来ていないことなります。例えばTLを格納しているpostgresが落ちている場合も正常と判断してしまうのです。これは問題です。そこで今回は,認証も不要でかつTLを取得出来る,public TLのHTTPレスポンスを監視することにしました。

次に3つめについて,なぜルートではなく,適当な画像のpathを指定しているのか説明します。

handon.clubでは,画像サーバのみ別のサブドメイン(media.handon.club)を使っています。しかし,素直にmedia.handon.clubのルートにアクセスすると,「401 Forbidden」が返ってくる仕様となっており,これでは正常に動作しているかどうか分かりません。そこで,適当な画像のURLを監視対象とすることで,HTTPレスポンスが正常である(=サーバがダウンしていない)ことを監視することにしました。

Grafana側の設定

ここまできたら,あとはGrafanaでかっこいい見た目を設定するだけです。

HTTPレスポンス時間

まずはレスポンス時間(レスポンスタイム)を測定します。メトリクスに以下を入力します。

sum(probe_http_duration_seconds) by (instance)

"sum" について補足します。probe_http_duration_secconds には,実際には以下に示すようないくつかの要素があります(このスクリーンショットは,GrafanaではなくPrometheusの画面です)。

f:id:highemerly:20190129002344p:plain

HTTPレスポンス時間といえば大半はProcessingなのですが,Resolveなどの時間もきちんと記録することが可能で,それぞれ個別に計測されています。すごいですね・・・。しかし,ユーザの体感時間をメトリクスとして記録しておきたかったため,今回の監視対象はProcessingだけではなくResolveも含めた合計値とすることにしました。そのため,"sum"が付いています。

実際の表示例はこんな感じです。

f:id:highemerly:20190129002828p:plain

HTTPステータス

HTTPサーバが落ちていないか(200を返しているか)を監視します。たとえば,成功しているサーバの数を表示するには,メトリクスに以下を入力します。

count(probe_success)

これだけだと芸が無いですね。そこで,今回は3つのサーバを監視していることから,以下の様に設定を変え,Availabilityとして%表示するようにしてみました。

(count(probe_success) / 3.0) * 100

その結果,他の監視項目と併せて,以下の様な良い感じのダッシュボードが出来ました。

f:id:highemerly:20190129003312p:plain
Grafanaダッシュボードの例

完全に余談ですが,Mastodon自体はStatsDに対応しているので,MastodoサーバにStatsDのexporterを入れることで監視できる項目が大幅に増えます。例えば,sidekiqのキュー状態についてもPrometheusで取得できるようになりました。これが結構良くて,以下3つを横並びで監視することができるようになりました。

  • node_exporterによるホストのCPU/MEM状態
  • blackbox-exporterによるHTTPレスポンスタイム
  • statsd_exporterによるsidekiqのキュー状態

分かっていないこと

以下は,監視したいのですが,やり方が分かっておらず監視できていないメトリクスです。引き続き調査したいと思いますが,もし経験のある方がいらっしゃれば是非教えてください・・・。

  • Streamingサーバのレスポンス監視
    • StreamingサーバはTCPコネクションが貼りっぱなしとなるので,レスポンスタイムという概念がない? 何をどうやって監視すべきなのか一度考えたい。
  • Conohaのオブジェクトストレージの残量
    • もはや外形監視関係ない。
    • たぶんexporterを自作してconohaのREST APIを叩けばよい。ただし認証周りの実装がよく分からない。。

おわりに

今日は,PrometheusとGrafanaを使って,MastodonサーバのHTTPレスポンス外形監視を実現する方法をご紹介しました。すでに活用していた他のexporterについても,また時間のあるときに解説記事が書ければいいなと思います。

さて,handon.clubについての話です。このダッシュボードは現在,管理者である私しか見ることができません。しかし今回構築したGrafanaでは,REST APIによるデータ公開が可能ですので,将来はユーザ全員にステータス監視ページを公開できるよう準備をはじめています。イメージはTwitterみたいな感じですかね。レスポンスタイムも公開出来ればいいかなと思っています。

api.twitterstat.us

【バージョンアップ】2.7.0にアップデートしました

handon.club は v2.7.0rc1 → v2.7.0へアップデートしました🎉

アップデートの概要

Mastodon 2.7について,RC版(Release Candidate版)から正式版へのアップデートを行い,正常に終了しました。

  • githubへリリースされてからアップデート完了まで,2時間を要しました
  • アップデートにかかるサービス中断時間は11分50秒でした

前回バージョンからの変更点

前回バージョン(2.7.0rc1)からの主な変更点はバグ修正や管理用ツールの改善です。

より詳細な変更点はリリースノートを参照ください。

Release v2.7.0 · tootsuite/mastodon · GitHub

おわりに

2.6.5 → 2.7.0のアップデート情報は以下記事を参照ください。

handon.hatenablog.jp

管理人としては,新機能の「Explore」(Directoryとも呼ばれます)がオススメです。登録方法は上記の記事に記載していますので,是非登録してみてください!

【緊急メンテ】緊急メンテを実施しました/長延化のお詫び

先ほどセキュリティ関連の緊急メンテを実施いたしましたが,当初予告よりメンテ実施時間が長引いてしまいました。以下のとおり詳細をご報告します。申し訳ありませんでした。

  • 発生時刻: 1/15 23:47〜22:54頃
  • 発生事象: 緊急メンテ時間の長延(当初23:50までと告知していたため,4分の長延)
  • 影響範囲: handon.clubのうちWeb表示/APIなどの全サービス断
  • 発生原因: 修正すべきConfigファイルの確認漏れ(※1)

※1: 以前(事実上の)攻撃を受けていた特定インスタンスに対し,比較的特殊な方法でブロックを行っていたことを失念していました。

再発防止策としては,今回は作業途中の切り戻しが不可のメンテであったため,こういったケースではトラブルに備えメンテ告知時間を長めにとるようにします。

なお,緊急メンテ自体は予定通り完了し,目的は達成されました。ご協力ありがとうございました。

2.7.0rc1にアップデートしました

handon.club は v2.6.5 → v2.7.0rc1 へアップデートしました🎉

アップデートの概要

RC版(Release Candidate版)へのアップデートを行い,正常に終了しました。

  • githubへリリースされてからアップデート完了まで,18時間を要しました
  • アップデートにかかるサービス中断時間は12分30秒でした

前回バージョンからの変更点

前回バージョン(2.6.5)からの主な変更点は以下の通りです。

  • 新機能
    • アカウント登録直後のチュートリアルがかわいくなりました。登録済のユーザでも,Webログイン時に一度だけ表示されます。
    • Webページにおける通知欄に,「すべて」「返信」というクイックフィルターが付きました。
    • インスタンス内のユーザを探せる機能が付きました(詳細後述)。
  • その他
    • Rubyのバージョンが2.6.0へアップデートされました。

なお,より詳細な変更点はリリースノートを参照ください。

github.com

新機能の紹介:Explore

インスタンス内のユーザを探せる機能が付きました。この機能は,アカウントを持っていない人でも,このインスタンスにはどういう人が登録しているのかを探すことができる機能です。以下URLからアクセスできます。

handon.club

ただし,ユーザリストに掲載されるためには,皆様の同意(オプトイン)が必要です。同意は,「プロフィールを編集」から行うことができます。

f:id:highemerly:20190109203859p:plain

興味のある方は是非同意してみてくださいね。

全文検索システムを試験運用します

タイムラインの方でも一部予告していましたが,handon.clubに日本語全文検索を導入しました。全文検索にはチューニングが必要なため,当面はテスト期間として運用しながらチューニングをおこなうこととします。以下で詳細をご説明しますが,不明点はお気軽に管理人までお知らせ下さい。

できること

handon.clubのWebページから,日本語キーワードで以下を検索することができます。

  • 自分の投稿
  • 他人の投稿のうち,自分がお気に入りに登録した投稿
  • 他人の投稿のうち,自分がブーストした他人の投稿
  • 他人の投稿のうち,自分に対するリプライ/ダイレクトメッセージ

ローカルタイムライン全体の検索はできません。

なお,これまで通り,以下の検索も可能です(これは,今回の試験運用とは関係ありません。もともと出来ていました)。

参考までに,確実に使われているであろうハッシュタグを検索しても,必ず「0人がトゥート」と表示されると思います。これはバグです。検索結果に出てきたハッシュタグをクリックすることで,期待した結果が得られます。

f:id:highemerly:20190104235321p:plain:w256

検索のやり方

大半のMastodonクライアントからは検索できないと思ってください。Webページから検索機能を使ってください。

なお,Mastodonクライアントに検索機能が付いている場合がありますが,その検索は「handon.clubが提供する検索機能」ではなく,「他のサービスが提供する検索機能」です。そのため,今回追加した検索機能とは関係ありません。「他のサービスが提供する検索機能」では,handon.clubのすべてのトゥートをキャッシュ出来ているわけではありませんので,適切な結果が得られない可能性があります。

では,「handon.clubが提供する検索機能」について,実際の検索のやり方を説明します。細かい方法は,画面幅(PCまたはスマホ)によって異なります。PCのような画面幅が広い環境では,発言欄のうえにある「検索」窓にキーワードを入力してください。

f:id:highemerly:20190104232534p:plain:w256
PCの場合の検索方法

スマホのような画面幅が狭い環境では,「虫眼鏡」のアイコンを押すと,PCと同じ「検索」窓が出現します。ここにキーワードを入力してください。

f:id:highemerly:20190104232630p:plain:w450
スマホの場合の検索方法

この検索窓を使った場合の検索結果イメージを以下に示します。この結果は管理人のアカウントでログインした状態で検索したものですので,他のユーザが検索すると違う結果が得られる点にはご注意ください。いずれにしろ,他人の発言であっても,リプライやお気に入りは表示されていることがわかるかとおもいます(ここで,他人の発言は,他のインスタンスでも表示されます)。

f:id:highemerly:20190104234657p:plain:w256
検索結果イメージ

テスト期間中の注意事項

日本語の検索には若干のチューニングが必要です。そのため,テスト運用中には,一時的に検索結果が得られなくなったり,おかしな検索結果となる場合があります。具体的には,以下の様な制約があります。

  • 検索結果が得られない場合がある
  • 検索したワードが含まれていないにもかかわらず結果に表示される/結果に漏れがある *1

また,テスト運用中に限らず,本運用の場合においても,以下の制約事項を設ける予定です。

  • 検索に時間がかかる*2
  • 検索結果は最大50件までとする *3

やったこと

検索機能は,Mastodon自体にもある程度のものはあるのですが,本格的に検索できるようにするためにはElasticsearchが必要となります。そのため今回は,Elasticsearchを導入しました。具体的な設定等は以下のとおりです。

  • Elasticsearch
    • バージョン6.xを導入
      • JVMメモリ割当は256MBにしてみました。当面これで様子を見ます。
    • 日本語形態素解析プラグインであるkuromojiを導入
  • Mastodon
    • 検索結果がランダム表示であったため,新しい順に並ぶようにソースコードを書き換え
    • 日本語のような"分かち書き"をしない言語でもよい検索結果が得られるよう,ソースコードを書き換え
      • 但しまだうまくいっていないようで,検索結果にノイズが載っているかと思います。この点は運用しながら調整を進めます。

*1:日本語検索のチューニングが不完全なため。

*2:最低限のサーバリソースで検索機能を実現しているため,当面改善の見込みはありません。

*3:今後チューニング予定ですが,おそらく50件〜100件程度が限度かと思われます。