はい。
このブログをわざわざ読んでいる方なら既にご存知かもしれませんが、マストドンをご存知でしょうか。
いわゆる分散型マイクロブログの一種で、2017年ごろのTwitter社による日本人イラストレーターの大規模凍結あたりで一時期話題になり、 最近またイーロンマスクによるTwitter社買収から始まった一連の混乱で再度少し話題にもなりました。
で、まあ僕としてもマストドンに小改造をしたうえで自分で運用しているんですが、マストドンのコードは今となってはだいぶ厳しい。
厳しい部分を挙げると割とキリがないんですが、ざっくり書くと
- フロントエンドがWebpackerにべったり、かつ独自configを書きまくっている
- デフォルトが隠蔽されているWebpackerと合わさり最終的にどういうconfigでwebpackerが動いてるのかたぶん誰も把握できてない
- Typescriptじゃない
- 動いてるからヨシ!じゃない
- 改修が辛い
- 複雑度的にも変更すると壊れる、のレベルに達していてリファクタすら決心が要る
- 大半のReactコンポーネントがクラスベース
- コンポーネントの階層構造もなんか必要以上に複雑になっている
- Reduxも一昔前のボイラープレート満載の構造
- なんかredux-thunkを非同期処理のためじゃなくて他reducerのstateを気軽に横取りするための便利ツールとして使ってるとこもあるし…
- apiのスキーマのドキュメントが手で整備されている
みたいな不満が募っていたんですが、
でついにTypescriptを入れさせることに成功しました。
以来、何よりもとにかくフロントエンドに型注釈が付いてほしいので、とにかくts/tsxにリネームして型を最低限付けて…を繰り返しています。
- Rewrite AvatarOverlay component with React hooks by takayamaki · Pull Request #24543 · mastodon/mastodon · GitHub
- Rewrite GIFV component with React hooks by takayamaki · Pull Request #24552 · mastodon/mastodon · GitHub
- Rewrite AnimatedNumber component with React hooks by takayamaki · Pull Request #24559 · mastodon/mastodon · GitHub
- Allow `==` when null checking by takayamaki · Pull Request #24593 · mastodon/mastodon · GitHub
- Rewrite Icon and IconWithBadge with typescript by takayamaki · Pull Request #24747 · mastodon/mastodon · GitHub
- Add type annotation for RelativeTimestamp component by takayamaki · Pull Request #24749 · mastodon/mastodon · GitHub
- Add type annotation for Blurhash component by takayamaki · Pull Request #24750 · mastodon/mastodon · GitHub
- Add type annotation for DisplayName component by takayamaki · Pull Request #24752 · mastodon/mastodon · GitHub
- Add type annotation for IconButton component by takayamaki · Pull Request #24753 · mastodon/mastodon · GitHub
- Add type annotation for some js files by takayamaki · Pull Request #24787 · mastodon/mastodon · GitHub
- use configureStore of redux-toolkit instead of createStore of redux by takayamaki · Pull Request #24790 · mastodon/mastodon · GitHub
- Rewrite actions/app.ts and reducers/missed_updates.ts with createAction by takayamaki · Pull Request #24801 · mastodon/mastodon · GitHub
- Add more detailed type annotation for Account by takayamaki · Pull Request #24815 · mastodon/mastodon · GitHub
- Rewrite actions/modal and reducers/modal with typescript by takayamaki · Pull Request #24833 · mastodon/mastodon · GitHub
- Use LayoutType from is_mobile in actions/app by takayamaki · Pull Request #24863 · mastodon/mastodon · GitHub
今気付いたけど、これ最初のPRからまだ1ヶ月経ってないのマ?
でもts化開始前の段階でjsxが全部で242ファイル、jsが205ファイルくらいあったので、これに型を付け切って更にイイカンジにリファクタするにはまだまだ、道のりが遠そうです。
コードベースの疲弊ぶりに本当に混乱と困惑している
— フサギコ (@fusagiko) 2023年4月19日
どうしてこんなになるまで頑張ってしまったんだ
マストドンのフロントを読めば読むほど、どうしてこんなになるまで頑張ってしまったんだ、ってなってる
— フサギコ (@fusagiko) 2023年4月16日
千里の道も一歩からとはよく言いますが、それにしたってあまりにも量が多いので、誰か手伝ってくれる人を捜し求めています。 どなたか手伝ってくれませんか、マジで(