フロントエンド

フロントエンドは既に webpacker 化されていますが、Rails 5.1.x の流儀からも外れ、 完全にJavaScript世界の流儀で構成されています。 ファイルは app/javascript 以下にすべて格納されています。

css

cssは scss が使われいて、app/javascript/styles 以下に格納されています。 完璧ではないものの命名規則にBEMを採用しているようです。

webpackの設定で、通常は app/javascript/styles/application.scss をエントリーファイルにしますが、 app/javascript/styles/custom.scss がある場合はそちらをエントリーファイルにします。 デザインをカスタマイズする場合、 custom.scss から application.scss と独自定義のファイルを読み込むようにします。

バージョン2.0.0 から custom.scss の優先読み込みはなくなりました。 代わりに、 config/themes.yml でテーマとして設定可能なようなので、そこで custom.scss を使うように設定すれば良いようです。 詳しく調べてはいませんが、テーマというからにはどうやらもっと深い使い方がありそうです。

JavaScript

app/javascript/mastodon というディレクトリが存在し、おそらくこれがマストドンのフロントエンドの重要なファイル群だというのはひと目でわかります。 が、とりあえず一旦webpackがどんな動作をするのか確認しておきましょう。 webpackの設定を見ると、どうやら app/javascript/packs の中にあるファイルをエントリーファイルにして、 何種類かのJavaScriptファイルを生成しているようです。 いくつかあるうち、application.js 以外は管理画面用などの小さなファイルです。 webpackの設定では、 custom.js を除外するような記述が書かれていますが、 どうやらcssの時のようにカスタマイズはここに書けというわけでは無さそうで、これが何を意味するのかわかりません

application.js は案の定 app/javascript/mastodon/main を読み込んでおり、やはり app/javascript/mastodon が本命であることが確認できました。

さてコードの中身を見ると、完全に ReactRedux で作られたシングルページアプリケーションだということがわかります。 TypeScriptやFlowなどの型支援をつかうような トチ狂った選択 はしていません。

actions/ があり、 reducers/ があり、おそらく教科書の通りのReduxだと言えるのではないでしょうか。 実際のコンポーネントは、 features/ の下にそれぞれの要素ごとに実装されています。

カスタマイズしたい場合は、 まぁ・・・頑張れや・・・ としか言えません。 Rubyのような便利なクラス拡張などはできません。 既存のファイルをガリガリいじっていくことになるでしょう。当然アップデートの追従は大変です。 JavaScriptいじるときは覚悟を持ってやる必要があるでしょう。

Last updated