Q. 久しぶりにメンテナンス記事を書いたな?
A. Ruby 3.2.3アップデート時のメモを紛失して書けなかったから
ということで、備忘録として残しておきます。
## 大まかな手順
1. Mastodonユーザーに移動
2. 最新のMastodonバージョンにcheakout
3. インストールできるバージョンを確認する
4. (必要に応じて)rbenv周辺のアップデート
5. Rubyのインストール
6. 環境変数に登録
## 詳細な手順
### 1. Mastodonユーザーに移動
```
$ sudo su - mastodon
```
RubyはMastodon用のユーザーアカウントでインストールしています。([公式インストールマニュアル](https://docs.joinmastodon.org/admin/install/#installing-ruby)をよく見るとわかる)そのため、最初にMastodonユーザーに切り替えます。
### 2.最新のMastodonバージョンにcheakout
```
$ git fetch --tags
$ git checkout <タグ名>
```
マイグレーションは行わなくてOK。Rubyのバージョンの関係でエラーになります。
### 3. インストールできるバージョンを確認する
次にRubyのバージョン管理ツール`rbenv`を使って、インストールしているRubyとバージョンアップしたいRubyを調べます。
```
$ rbenv versions
$ rbenv install --list
```
`rbenv versions`は今インストールしているRubyのバージョン、`rbenv install --list`はインストールできるRubyのバージョンを調べます。なお、`rbenv install --list`を行った際に、最新のRubyのバージョンが出ないときがあります。その時は手順4を経由してください。(`rbenv install --list`で最新バージョンがある場合、手順5に移動してOKです)
### 4. rbenv周辺のアップデート
必要に応じて`rbenv`周辺のアップデートを行います。`rbenv`自体と、rbenvのプラグイン「`ruby-build`」のアップデートの2種類あるので注意。(だいたい`ruby-build`だけで済みますが)
#### rbenvのアップデート
```
$ cd ~/.rbenv
$ git pull
```
`.rbenv`フォルダーに移動して、pullすればOKです。
#### ruby-buildのアップデート
```
$ cd ~/.rbenv/plugins/ruby-build
$ git pull
```
`.rbenv/plugins/ruby-build`フォルダーに移動。同じくpullしてアップデートを行います。
アップデートが終わったらホームディレクトリに戻り、再度`rbenv install --list`を行います。最新バージョンのRubyが一覧に出てきます。
### 5. Rubyのインストール
最新バージョンのRubyが一覧に載っていることを確認したら、最新のRubyのインストールを行います。
```
$ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install <インストールしたいバージョン>
```
この際注意したいのが、`RUBY_CONFIGURE_OPTS`の設定を入れた状態でインストールを行うこと。忘れるとMastodonのビルドができなかったはず。(3.2.3インストール時にやらかした)
インストールが終わったら、最新バージョンを使う設定に切り替えます。
```
$ rbenv global <インストールしたバージョン>
```
これでRubyのインストールができたので、Mastodonのマイグレーションに入りましょう。お疲れさまでした。
## おまけ
### 不要になったRubyのアンインストール
```
$ rbenv uninstall <不要になったRubyのバージョン>
```
## 関連記事
- [[WSL2を使ってローカルMastodon鯖を立てる]]
メンテが不安なら、一度ローカルに鯖を立てて練習するといいかも。
## 参考サイト
- [Installing from source - Mastodon documentation](https://docs.joinmastodon.org/admin/install/)
- [rbenv/ruby-buildのアップデート - Qiita](https://qiita.com/jhanyu/items/38671f7e9f03b77670c0)