Webサービス開発に導入して良かった ツール・ライブラリ6選(2023年度版)

こんにちは。クロスマートで請求書を始めとした帳票サービスの開発を行っているDev2 テックリードのたけじい(@pouhiroshi)です。

このテックブログは持ち回りで担当を決めているのですが、もっとクロスマートのエンジニアがどのような仕事をしているのか、技術的にはどのようなことにチャレンジしているのか等を対外的にアピールしていきたいという(個人的な)想いから、今年は月1本は記事を書いていきたいと思っています。ぜひ今後もご期待ください。

もしこの記事を見て、興味が湧いた方はぜひ採用ページもご覧ください。(絶賛採用強化中です!) xorder.notion.site

さて、ここから本題です。 2023年はクロスオーダーの各サービス開発プロジェクトにおいて多くの新しい技術を導入し、開発生産性を推進する重要な年になりました。 今回の記事では、その中でも特に印象に残ったツールやライブラリ6つをご紹介したいと思います。たくさんありますが、ぜひお付き合いください。

1. GitHub Copilot

docs.github.com

AI技術を活用して開発者のコーディングを支援するGitHub Copilotは、2023年2月に導入されました。当初は試験的な導入だったものの、その予測精度と便利さが認められ、すぐにチーム内での使用がスタンダードとなりました。特に、繰り返しの作業を効率化し、新しいコードの提案を通じて開発プロセスに新鮮な視点をもたらしました。 実際にエンジニアメンバーにCopilotを使ってどれくらいコードを書く量が削減できたかもアンケートを取ってみました。 中には50%という回答もあり、総じて生産性の向上が見て取れました。(その後のCopilotの世界的な広がりは皆さんもご存知の通りです)

Copilotアンケート

2. OrbStack

orbstack.dev

Docker for Macの軽量な代替として、2023年8月にOrbStackを導入しました。 Docker for MacMacでDockerを動作させるツールとしてスタンダードな存在でしたが、色々なサービスをDockerで動かしていると、だんだんその負荷が無視できないものになってきたという課題が出てくるようになりました。 そうした中、TwitterでOrbStackというDocker for Macより軽量なDockerツールがあるということを知り、早速同僚に勧めてみました。

Twitterで見かけたOrbStackを勧める

ですが、勧めるだけではやはり人は動かないので、自ら実際に導入してみることにしました。結果、開発環境のMacの動作が以前よりとても軽くなりました。

Docker for Mac(左)とOrbStack(右)でプロセスを確認
アクティビティモニターで見ると、明らかにOrbStackの方がシンプルで立ち上がっているスレッドも少ないように見えます。

これにはテストマスターY氏もニッコリ

ファン(PCの)がワンワン言わなくなったと大絶賛

このOrbStackにより、システムリソースの消費を大幅に削減し、開発者のマシン上での動作が格段に軽快になりました。特に、複数のコンテナを同時に動かす際のパフォーマンス改善が顕著で、開発環境の快適性が大きく向上しました。

以後はMac開発環境構築の際は、OrbStackを勧めるようにしています。

3. Pydantic V2

docs.pydantic.dev

請求書サービスを始めとした帳票サービスの開発を行っているDev2では、Pydanticを広く利用しており、Version2のリリースは大きなニュースでした。Pydantic V2は、Rustへの移行によるパフォーマンス向上が大きな理由で導入されました。その結果、Pydantic V1.9.1と比べて4倍から50倍の高速化が実現しました。この高速化により、アプリケーションのレスポンス時間が大幅に短縮され、ユーザーエクスペリエンスが向上しました。サーバーの負荷も軽減され、システム全体の安定性と信頼性が向上しました。

以下、公式ブログの引用です。 https://blog.pydantic.dev/blog/2022/07/10/pydantic-v2-plan/#performance

パフォーマンス👍
検証ロジックの Rust への移行 (および検証オブジェクトの構造の大幅な改善) の結果、
pydantic V2 は pydantic V1 よりも大幅に高速になります。
現在のpydantic-coreベンチマークを見ると 、pydantic V2 は pydantic V1.9.1 よりも
 4 倍から 50 倍高速です。一般に、一定範囲の共通フィールドを含むモデルを検証する
場合、pydantic V2 は V1 よりも約 17 倍高速です。

ただ、こちらのバージョンアップは恩恵があるものの、v1でdeprecated(非推奨)になった記述方法も多く、請求書サービスにあるほとんどのSchemaクラスを修正しました(修正自体は機械的なものが多かったのが助かりましたが...) 無事にVersion2に移行でき、大幅な性能改善の恩恵を受けることができています。大変な思いをしましたが、やってよかったと実感しています。

変更は以下のようにnotionにまとめて、メンバーに周知しました。この辺はまだver1を使われているプロジェクトも多いかもしれないので、近いうちにまた記事にしようかと思います。

notionにver1から2への対応についてまとめた

4. NewRelic バッチ(Non-Web-Transaction)計測

docs.newrelic.com

これまでのAPI(画面側の処理)の計測に加え、バッチ処理の監視とパフォーマンス測定のためにNewRelicのバッチ計測を導入しました。 これにより、今まで性能問題などの箇所特定が難しかったバッチの処理状況をリアルタイムで視覚化し、問題の早期発見と対応が可能になりました。NewRelicによるバッチ計測導入は、システムの安定性と信頼性の向上に寄与しています。

バッチによるDB負荷アラートを目にして決意をする私

これまでWebAPIについてはNewRelicで計測を行なっており「お客様の画面動作が遅い」などの問題箇所の対応は比較的スムーズに行うことができていました。 しかしCSVファイルの取り込み処理など、画面とは別のプロセスで行うようなバックグラウンドでの処理(バッチ、非同期処理など)の性能を計測は行えておらず、素早く問題箇所を特定することが難しくなっていました。 そんな時、NewRelicでWeb経由ではない処理(Non-web-transaction)の計測が行えるようになったという記事を見かけ、早速導入を決めました。導入自体はさほど難しくなく、すんなりと計測を行えるようにできました。

いつ、なんのバッチが実行されているかがわかり

どこの処理にどれくらい時間がかかっているかを詳細に見ることができる

これにより、「いつもより取り込み処理に時間がかかっている」などといった問い合わせに、いち早く原因を特定し性能改善まで繋げられることができ、素早くお客様の体験向上に繋げられていると実感できる結果が出ています。

計測は正義!を実感した瞬間でした

5. MinIO

min.io

AWS S3の機能をローカルでエミュレートするのにlocalstack(https://www.localstack.cloud/)を使っていました。ですが去年、localstackが有料化し、無料版のままだとアップロードしたファイルは永続化されなくなってしまいました。(localstackを停止するとファイルやバケットは全て消えてしまうCSVファイルをアップロードして、取り込み処理を行う機能が多い弊社サービスにとっては、開発やテストがしにくくなりかなりの痛手でした。 そこで目をつけたのが最近目にすることが多くなっていたMinIOです。 MinIOは、特にファイルストレージのテスト環境においてその価値を発揮しました。localstackの代替として導入後、ファイルの永続化に関する課題を解決し、開発とテストの効率が向上しました。この変更により、データの持続性を必要とするテストケースが容易に実行可能となりました。

MinIOもnotionで導入説明。あの涙の日々ともおさらば。

こちらもPydantic V2対応同様、別途記事にまとめていくつもりです。

6. CodeRabbit

AIを活用したコードレビューツールであるCodeRabbit(以下、うさぎ)は、2023年12月に導入しました。このツールは、コードの品質向上に大きく貢献し、レビュープロセスの効率化を実現してくれました。特にバグの早期発見やコードの最適化提案が有効であり、開発チーム全体のコード品質が向上しました。

クロスマートのサービスが複数に拡大していく中で、チームリーダー(TechLead)やシニアエンジニアにコードレビューが集中してしまうという現象が、各開発チームで発生しておりました。 そんな中、見つけた記事がこちら。

zenn.dev

AIがコードレビューをしてくれる?最初は大したチェックはしてくれないのではと半信半疑ではありました。 しかし、コードレビューは品質維持のためには大切なプロセスですが、中にはタイプミスや明らかにバグであるようなコードなど、機械的なレビューを通すだけでもある程度はレビュー負担が減るかもしれない。そんな想いや期待を抱きつつ、早速試しに請求書サービスのGithubリポジトリにCodeRabbitを導入してみることにしました。

かなり突っ込んだコメントを的確に指摘してくれるうさぎ

レビューはGithub上でCodeRabbitのbotアカウントがコメントで指摘をしてくれます。上記の例のように、かなり的確な指摘をしてくれるのは驚きでした。私はPython歴があまり長くないので、このような言語仕様についてのコメントもかなり助かることが多いし、勉強になります。

開発メンバーの実際の感想も好意的なものが多いです。

このレビューで改善指摘はなく100点満点のMさん

人間へのレビューの前に、気軽にAIに見てもらえるので、レビュー依頼する側もとても良いという感想。

想像以上にCodeRabbitのレビューが的確で驚きというMさん

うさぎの指摘を馬鹿にできないレベルと感心のY平氏

人に見せる前にうさぎに見てもらえてよかったと喜ぶNさん

結果、レビューする人される人にとって、無くてはならない存在になりました🐰

以上、2023年にプロジェクトに導入して良かった新サービスやライブラリ6つをご紹介しました。 これらのツールやライブラリは、クロスマートの各種サービス開発プロジェクトにおいて重要な役割を果たし、開発の効率化や品質向上に大きく貢献しました。 また今後も、品質や生産性の向上につながる新技術はどんどん取り入れ、より良いサービス開発を目指していこうと考えています。

クロスマートではエンジニアやBizDevなど広く一緒に働く仲間を募集中です。 新しい技術を積極的に取り入れたい!というエンジニアさんにはとてもお薦めな会社です。 ぜひ一緒に外食産業のためになるサービスを楽しく開発しましょう!!

xorder.notion.site