Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カスタマイズしたMastodonを本家に追従するときのコツ

abcang
August 19, 2017

 カスタマイズしたMastodonを本家に追従するときのコツ

2017/08/19 Mastodon Developers Kaigi #0 LT

abcang

August 19, 2017
Tweet

More Decks by abcang

Other Decks in Programming

Transcript

  1. カスタマイズしたMastodonを本 家に追従するときのコツ Mastodon Developers Kaigi #0

  2. 自己紹介 • abcang(@abcang1015) ◦ 「あべ」とか「あべちゃん」と呼ばれている • Mastodonのcollaborator • ピクシブ株式会社 17新卒

    エンジニア ◦ Pawooの開発を担当
  3. 19万ユーザーを突破しました!

  4. Pawooには独自機能がたくさん • pixivアカウント連携 • 自動消滅トゥート • 固定トゥート • メディアタイムライン •

    pixivの画像展開 • 音楽アップロード(Pawoo Music) • 共有プレイリスト機能(Pawoo Music) • などなど
  5. GitHubで本家と比較してみると なかなかの変更量…

  6. Mastodon本家の追従は楽じゃない $ git merge v1.5.1 … $ git status |

    grep "both modified" | wc -l 65 $ git status | grep "both modified" | grep "app/javascript" | wc -l 28 コンフリクト多い!! 半分近くがJavaScript!! 1.3系から1.4系のアップデート のときは100くらいあった
  7. 本家の追従の流れ 1. 本家のコードをマージする 2. GemfileやGemfile.lockのコンフリクトを解決 3. Rails周りのコンフリクトを解決 4. package.jsonやyarn.lockのコンフリクトを解決 5.

    JavaScriptのコンフリクトを解決 6. 残りを気合で修正して動くようにする
  8. GemfileやGemfile.lockのコンフリクトを解決 • Gemfileは通常通り手動で直す • Gemfile.lockは一旦本家のを適用 ◦ git checkout --theirs Gemfile.lock

    • bundle installを実行 ◦ 本家のGemfile.lockをベースにして、独自で追加したgemをインストール
  9. Rails周りのコンフリクトを解決 • modelやcontrollerはコンフリクト箇所が少ない ◦ メソッドが増減すると起こりやすい • viewはコンフリクト箇所が多いのでよく見て直す ◦ pixiv連携周りで起こりやすい •

    一通り直したらテストが通るかチェック • Rails周りはコンフリクト箇所がまだ少ないので楽
  10. package.jsonやyarn.lockのコンフリクトを解決 • Gemfileのときと同じ感じで • package.jsonを手動で直す • yarn.lockは一旦本家のを適用 ◦ git checkout

    --theirs yarn.lock • yarn installを実行
  11. JavaScriptのコンフリクトを解決 • componentやcontainerにコンフリクトが多い ◦ ReactのDOM構造が変わるとdiffがうまくとれなくなる ▪ その結果大きいdiffを眺めてコンフリクトを解決することに ◦ 固定トゥートやpixivの画像展開機能は コンポーネントに変更を加えているのでコンフリクトしやすい

    • actionやreducerではコンフリクトが少ない ◦ リファクタリングとかあるときぐらい
  12. 残りを気合で修正して動くようにする • コンフリクトを解決してもwebpackのコンパイルに失敗すること はよくある ◦ ライブラリのバージョンが上がって使い方が変わった(react-router) ◦ 大きく仕様が変わった(メディアタイムラインのマルチカラム対応) • JavaScriptのlintに通るように修正

    ◦ ルールが追加されててtestに通らなくなってることが多い • などなど
  13. カスタマイズしつつ本家に追従しやすくする • カスタマイズ部分を可能な限り別ファイルに分ける ◦ 本家に存在するファイルを直接変更するとコンフリクトしやすい ◦ Rubyならモジュールとして切り出してincludeして使うなど ◦ Reactならコンポーネントに切り出してimportして使うなど •

    いっその事カスタマイズした部分を本家に送る ◦ コンフリクトしなくなる!! ◦ 他のインスタンスでも使われるので多くの人が恩恵を受けれる ◦ Pawooでは管理画面の改善を本家に送った
  14. 楽しいMastodon開発ライフを!