FOSS: Appsmithに貢献してみた
Appsmithとは手軽にアプリUIを作るためのWebサービスであり、外部APIやデータベースへの要求も可能なためデータの表示にも向いている:
今回はそのデータ表にまつわるバグの修正過程の話をしたいと思います。
Issueの問題
今回修正したIssueはこちら。
そのIssueでご覧になれる、コメント欄が「宜しければ、このIssueを私にアサインしていただけないでしょうか」のようなコメントで埋まっているのにも関わらず、PRを投稿した人は誰一人もいない。意図がわからなくもないが、明らかに皆の時間を無駄にしてしまう。
そこで、Issueにコメントするより、PRを準備することを選んだ。
バグの説明
Appsmithに表ウィジェットを追加して初めてデータ源を繋げると次のバグが発生する:
最初の状態:Editable
チェックボックスにright-padding: 6px;
が適用されていない。
ページをリロードすれば:今回はright-padding: 6px;
の効果が見られる。
質問:なぜ最初の時だけthis.state.hasScrollableList
が真になる?
// PrimaryColumnsControlV2.tsx
// componentDidUpdate
const hasScrollableList =
listElement && listElement?.scrollHeight > listElement?.clientHeight;
- リストのスクロール範囲はリストの高さより大きければ、当然ながらスクロールできるということで
hasScrollableList
は真になる(参照:MDN)
しかし、hasScrollableList
はfalseで初期化される。
したがって、今回のバグの原因は:リストは最初からスクロール可能なのに関わらず、コンポーネントが変更されるまでhasScrollableList
も変更されず、パディングが変わらない。
解決方法
クラスコンポーネントが使用されるので、componentDidMount
にhasScrollableList
を初期化するだけで完成。コードの方はcomponentDidUpdate
のコードをそのままにコピーした。
マージまで
単純なバグ修正だったが、PRの投稿からマージまで2週間ぐらい経った。それまでの流れをまとめると:
- 投稿(1日目)
- Appsmithチームのレビュー(4日目)
- 修正(5日目)
- コンポーネントの自動テストの起動(5日目):そこでCypressテストに問題発生
- メインブランチとマージする(11日目)
- テストが成功する。ゆえに、PRをマージ(12日目)
要は、私がメインブランチをマージしなかったせいで6日間無駄にしたわけだ。
CodeRabbit AI
PRを初めて投稿したとき、CodeRabbitというAIサービスが発動し、私のPRとリンクされたIssueの比較を行った。そして驚くことに、私のPRをようやくしたうえに、Issueの修正の修正にどう繋がるのかも説明してくれた。関係ないことも含まれているが、それでも便利だなと思った。
Discussion