はじめに
こんにちは、WcaleNieWolnyです - Capgoのリードソフトウェアエンジニアです。
過去8ヶ月間、組織システムの開発を行ってきました。4月14日現在、システムが完成したことを嬉しくお知らせします 🎉 🎊
ついに、8ヶ月を経て、Capgoのすべての機能が組織メンバーにアクセス可能になりました。これには以下が含まれます:
- アプリ
- 統計情報
- 課金
- 完全なCLIサポート
- その他多くの機能!
ここまでの道のりは簡単ではありませんでした。システムには3つの主要なリビジョンがありました。
組織システム v1
初期段階は困難でした。プロジェクトに参加して2週間後に、この開発を始めました。 当時は、コードベースについてほとんど知識がなく、実装方法についての大きなアイデアもありませんでした。
これにより、アプリ、チャンネル、バージョンへのアクセスのみをサポートする非常にハッキーなソリューションを実装することになりました。 招待されたユーザーが統計情報にアクセスすることさえできませんでした。
その後、Martinのレビューを待ちました。待ち続けましたが、何も起こりませんでした。3ヶ月後、この問題に戻り、マージの競合をすべて修正することにしました。また、テストを行うことにしましたが、これは素晴らしいアイデアでした。 予想通り、ハッキーなソリューションは完全に失敗しました。その時点で、すべてのバグを修正し、広範なE2Eテストを書くことを決めました。 非常に壊れたコードと、過去の自分が行った多くの悪い決定と向き合わなければなりませんでしたが、2週間の困難な作業の後、ついに機能するようになりました。
しかし、これは完璧だったということではありません。組織のオーナーは、最高権限を持つ招待ユーザーよりもはるかに多くのアクセス権を持っていました。ユーザー体験も不十分でした。招待されたユーザーはアプリケーションの統計を見ることができず、課金を管理することもできず、CLIはアップロードのみに制限されていました。
これらの課題にもかかわらず、MartinがPRをレビューし、1週間後にプロダクションにプッシュされました。
組織システム v2
組織システムは、すべての課題にもかかわらず、うまく機能していました。ユーザーはそれを使用し、プロジェクト全体を前進させました。しかし、まだ以下のことを行う必要がありました:
- 行レベルセキュリティで作られた混乱を修正する
- CLI全体のサポートを追加する
- 管理者ユーザーがオーナーと同じアクセス権を持つことを確認する
Martinとの多くの議論の後、セキュリティルール全体を書き直し、すべてのリソースの所有権をユーザーから組織に移行することが最善の方法だと決定しました。 これにより、新しい組織システムとの統合が容易になり、多くのレガシーコードも削除できるようになりました。
新しいRLSコードの作成は非常に退屈でしたが、1週間半後、移行全体の準備が整いました。
しかし今回は、E2Eテストを書かないことにしました。そのため、手動でテストを行う必要がありました。Martinと私で3回の広範なコールを行った後、ついにプロダクションにプッシュすることを決定し、うまくいくことを祈りました 🙏
うまくいきませんでした。ユーザー登録が壊れており、新規ユーザーがアカウントを作成できないことが判明しました 😅
パニックコールの後、すぐにプロダクションに変更をプッシュして就寝しました。残念ながら、私の変更は更なる問題を引き起こしただけでした 😰
目が覚めた時、ユーザーが多くの空の組織を持っていることを発見しました。これは1ユーザーにつき1組織しか許可されないはずなので、起こってはいけないことでした。重複した空の組織を削除するのに時間がかかりましたが、それ以外は変更は比較的スムーズに進みました。
組織システム v3
これでもまだ十分ではありませんでした。まだ大きな要素が欠けていました - 課金です。
これまで、オーナーだけが課金を管理できました。これにより、ユーザーが組織のために購入していると思ってプランを購入するという興味深い問題が発生しました。 私たちはすぐに手動でこの問題を修正しましたが、この時点でこの問題は受け入れられないと判断しました。
移行は比較的スムーズでした。