strt's blog

🗒🔨🙍

LeetCodeの管理用アプリを作った

2024/05/21

他のことをやっていて、あまりアウトプットできていなかったので、LeetCodeの管理用アプリを作ったことをまとめようと思います。

成果物

Web問題集管理用デスクトップアプリ

作った動機

NeetCodeのロードマップに沿ってちまちまとLeetCodeを解いているのだけれども、1回解いただけで日を置くと結構忘れてしまうことが課題でした。

何らかのアウトプットをすればいいのでは?と当初はブログにメモがてら書き始めたものの、第三者の参照がそれほど重要なものではない(別にChatGPTに聞けば理解の助けになる)のと、最低限の体裁を整えるのが面倒、それによって継続の妨げとなるのも課題でした。

それらの性質から、こと学習目的でのLeetCodeは、一度解いてちゃんとしたアウトプットをするよりも、複数回日をあけて解きつつも軽く思考プロセスのメモを残すのが一番定着しそう、という考えのもと開発しました。

選定技術

今回は比較的サクッと作りたかったので、以下のとおりでした。

  • Tauri(v2): 別途作成中のContentfulエディタでも使っており、キャッチアップの意味もこめて。Electronでもよかった説はあります。
  • Mantine UI: TauriはReactベースでUIが組めるので、Custom hookやコンポーネントが豊富なMantine UIにしました。
  • sqlite: アプリ特性上、特定のPC上で操作する&第三者に参照させる必要がないので、インターネット上にDBを置く必要も薄く、でもjson等ではなくRDB使いたいよね、ということでsqliteにしました。

開発の感触

Tauri v2においては、基本的にTauriの標準プラグインでDB操作周りをやらせてますが、JS側に持たせたいのかな?という感じで、単純なCRUDはほぼJS側に書くことにしました。

流石にインポート周りはBulkで入れたいのもあり、JS側でCSV解析&整形、Rust側でsqlxを使ってDB操作という形にしてます。

ちょっと歪かもなぁと思いつつ、区分けとしては良さそうかな?と思っています。

あとフロント側は本当にただのReactです。

ドッグフーディングと今後の開発

現状、累計で60問、submissionは224回(Failed含む)してるのですが、気楽にかけていい感じです。

ただ、ちょっと検索機能や集計機能が現状ないので、同じ問題は前どんなアプローチで解いてたのかが見づらかったり、進捗ペースはどうなの?というのがわからなかったりするので、そういった機能は追加したいと思ってます。