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

Mastodonの開発環境の構築まとめ

More than 1 year has passed since last update.

Mastodonの開発環境の構築方法をざっくりまとめました。
対象は2017/05/04以降のmasterブランチです。

Vagrantを使う

Vagrantを使う場合は非常に簡単に開発環境を構築できます。
Vagrant-guide.mdに詳しく書かれているので読むといいでしょう。

まずは、あらかじめVirtualBoxやVagrantが使えるようにしておきます。
Vagrantを使った開発環境では、mastodon.devというホスト名でアクセスできるようにhostsファイルを書き換えます。そのため、hostsファイルを書き換えるためのプラグインをインストールしておく必要があります。

$ vagrant plugin install vagrant-hostsupdater

次にcloneしてきたMastodonのディレクトリで以下のコマンドを実行して仮想マシンを起動します。

$ vagrant up

するとUbuntuのダウンロードやパッケージのインストールなどが実行されます。
vagrant upだけではアプリケーションサーバは起動しないので、以下のコマンドを実行します。

$ vagrant ssh -c "cd /vagrant && foreman start"

すると、Railsのサーバとストリーミングサーバ、webpack-dev-serverがforeman経由で起動します。
http://mastodon.dev (または http://localhost:3000 )にアクセスすることでページを見ることができます。

ローカルのMastodonのディレクトリは仮想マシン内の/vagrantにマウントされています。
そのため、Rails関連のコードを変更した場合は自動的に読み込まれるため、基本的にはforemanの再起動などは必要ありません。
しかし、データベースのマイグレーションや、gemやnpmのパッケージの更新が必要な場合は、
vagrant sshで仮想マシン内に入ってコマンドを実行する必要があります。

ローカルで開発環境を構築する

ローカルで開発環境を構築する場合、PostgreSQLとRedisが必要になります。
ローカルにこれらのサーバを立てたくない場合は、Dockerを使うと便利です。

以下のdocker-compose.dev.ymlをローカルに作成して起動します。

docker-compose.dev.yml
version: '2'
services:
  db:
    restart: always
    image: postgres:alpine
    ports:
      - "5432:5432"

  redis:
    restart: always
    image: redis:alpine
    ports:
      - "6379:6379"
$ docker-compose -f docker-compose.dev.yml up -d

これでPostgreSQLとRedisが立ち上がります。

次に、RailsやストリーミングサーバからPostgreSQLとRedisのサーバを指定するために.envファイル作成します。
ローカルのPostgreSQLとRedisを使用する場合は適宜値を変更してください。

.env
DATABASE_URL=postgres://postgres:@localhost:5432
REDIS_HOST=localhost
REDIS_PORT=6379

設定が終わった後はデータベースのセットアップを行います。
通常であればbin/rails db:setupを実行するだけなのですが、testデータベースを作成するときにDATABASE_URLが反映されないため途中で落ちてしまいます。(rails/rails/issues/28827)
なので、以下のように一つづつコマンドを実行します。(testデータベースに関してエラーが出ますが、無視しましょう)

$ bin/rails db:create
$ bin/rails db:schema:load
$ bin/rails db:seed

最後に、以下のコマンドを実行してアプリケーションを起動します。
(foremanをインストールしてない場合はgem install foremanでインストールしましょう。)

$ foreman start

Vagrantを使用する場合と同様に、Railsのサーバとストリーミングサーバ、webpack-dev-serverがforeman経由で起動します。
ページは http://localhost:3000 にアクセスすることで見ることができます。(http://mastodon.dev にはアクセスできません。)

あとがき

Vagrantを使用する方法と、ローカルで動かす方法を紹介しました。
個人的におすすめするのは、PostgreSQLとRedisをDockerで動かしつつ、アプリケーションをローカルで実行する方法です。
VagrantだとCPUやメモリの制限もありますし、マイグレーションやパッケージの更新を行うためにvagrant sshを実行する必要があるので、少し面倒だと思っています。
ローカルで実行する場合はそういった面倒な部分はないのでオススメです。

abcang
JavaScriptとかRubyとかがすきです
https://abcang.net
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