Help us understand the problem. What is going on with this article?

Mastodon をカスタマイズする

More than 1 year has passed since last update.

https://blog.x39.dev/tech/mastodon-customize/ に記事を移しました。最新の更新はブログの方を見てください!!


この記事は Mastodon Advent Calendar 2017 - QiitaMastodon 2 Advent Calendar 2017 - Adventar の5日目の記事です。

昨日は @xserver さんによる インスタンス運用アンチパターン@Denmaaaa さんによる 具体的分析結果から考える神崎の倒し方 でした。

はじめに

Mastodon 使いやすくするために制限を緩和しようとしましたが、ドキュメントがなく Rails 初心者の私が行った簡単なカスタマイズを書きたいと思います。

使用してるバージョンは v2.0.0 です。

文字数制限の緩和

注意: 長文を投稿することができるようになり TL(タイムライン) が荒れる可能性があります。
また、自分のインスタンスのみだけではなく他のインスタンスにも迷惑がかかるのでしっかりとルールを設定し行うことをすすめます。

  • 本体側の制限を緩和
app/validators/status_length_validator.rb
 # frozen_string_literal: true

 class StatusLengthValidator < ActiveModel::Validator
-  MAX_CHARS = 500
+  MAX_CHARS = 4096

   def validate(status)
     return unless status.local? && !status.reblog?
  • Web UI 側の制限を緩和
app/javascript/mastodon/features/compose/components/compose_form.js
           </div>

           <div className='compose-form__publish'>
-            <div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div>
-            <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabled || this.props.is_uploading || length(text) > 500 || (text.length !== 0 && text.trim().length === 0)} block /></div>
+            <div className='character-counter__wrapper'><CharacterCounter max={4096} text={text} /></div>
+            <div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabled || this.props.is_uploading || length(text) > 4096 || (text.length !== 0 && text.trim().length === 0)} block /></div>
           </div>
         </div>
       </div>

投稿画像の画質制限の緩和

注意: この機能を使用する際は AWS S3 などのストレージサービスを使用してない場合、容量をガンガン削られるので使用することをオススメします。

変更箇所は2点です。

  • 画像の解像度を変更
app/models/media_attachment.rb
   IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze
   VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze

-  IMAGE_STYLES = { original: '1280x1280>', small: '400x400>' }.freeze
+  IMAGE_STYLES = { original: '3840x2160>', small: '400x400>' }.freeze
   VIDEO_STYLES = {
     small: {
       convert_options: {
  • 投稿画像のファイル容量制限を変更
app/models/media_attachment.rb
   include Remotable

   validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES
-  validates_attachment_size :file, less_than: 8.megabytes
+  validates_attachment_size :file, less_than: 20.megabytes

   validates :account, presence: true
   validates :description, length: { maximum: 420 }, if: :local?

これにより画像の制限をオリジナル画像では 1280x1280 から 3840x2160 へ緩和しファイルの容量制限を 8MB から 20MB へと変更されます。

テーマ機能

テーマ機能については 公式ドキュメント がありますが日本語の記事がなかったので書こうと思いました。

内容を変更したファイルを追加します

app/javascript/styles/custom.scss
// カスタム内容の例
$ui-highlight-color: #d3d900;

@import 'application';

コンフィグにテーマファイルを追記します

config/themes.yml
 default: styles/application.scss
+custom: styles/custom.scss

表示名を追加します。

config/locales/en.yml
     title: "%{instance} Terms of Service and Privacy Policy"
   themes:
     default: Mastodon
+    custom: Custom
   time:
     formats:
       default: "%b %d, %Y, %H:%M"

おまけ: 管理者権限の剥奪

先日間違って一般ユーザーに Admin権限 を付与してしまったので権限を一般ユーザーに戻したときのメモです。

まず Rails のコンソールを開きます

# 直接インストールしてる場合
RAILS_ENV=production bundle exec rails console
# docker-compose を利用してる場合
docker-compose rails console

ユーザーネームを指定し権限を更新します

user = User.joins(:account).where(accounts:{username:'ユーザーネーム'})
user.update(admin: false)

ちなみに ソースコード を見ながら行いました。

さいごに

"ここはもっとこうするといいよ!" みたいなものがありましたら教えてください!

Ress
誤字、脱字など至らない点は多いと思いますがよろしくおねがいします。
https://portfolio.39.gy/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした