業界: 交通機関

使用されている JetBrains 製品: Qodana, IntelliJ IDEA

組織規模: 従業員 200 人以上

チームの規模: 6 チーム、開発者合計 60 人

テクノロジースタック: Java、Spring、Jenkins

信頼できる交通機関への道: Qodana のコード解析による Moovit の本番環境インシデント防止

Moovit はコミューター分野でトップを誇るアプリの制作元です。Moovit の iOS、Android、およびウェブアプリは、あらゆる公共および共有交通機関を使用して目的地まで簡単に到着できるスマートなモビリティエクスペリエンスをユーザーに提供しています。交通機関の利用者はモバイルチケットを利用して、交通サービスの利用計画、支払い、乗車を行えます。2012 年にリリースされた Moovit は、現在では 45 言語で 112 か国 3,500 都市以上の 15 億人を超えるユーザーにサービスを提供しています。

課題: 中断の原因となる null ポインターとその他のエラーを発見する

公共交通機関は労働、教育、ヘルスケアなどのライフラインですが、それを利用した移動は困難かつストレスの元になる場合があります。コミューターアプリ 1 位の制作元である Moovit は、公共および共有交通機関を使用して簡単に目的地までの経路を計画して移動できるスマートなモビリティエクスペリエンスをユーザーに提供しています。Moovit は 112 か国 3,500 都市以上の 15 億人を超えるユーザーを案内してきました。


非常に多くのユーザーがリアルタイムの情報を含む交通情報と案内に依存しているため、システムの安定性は重要事項です。Moovit のインフラストラクチャチームは、B2C と B2B の両方のプロジェクトで Moovit のシステム全体の安定性を維持する役割を担っています。同チームは、本番環境に影響して同社のサービスを中断させてしまう問題を特定するという大きな課題に直面しました。主な懸念事項の 1 つはサービス中断の一般的な原因であり、CrowdStrike のインシデント でも要因であったと考えられる NullPointerExceptions を検出することでした。


Moovit はサービス運用のリスクを軽減し、高いコード品質を維持するため、以下の条件を満たす静的コード解析ツールを探し始めました。

  • 問題を早期発見できるクイックスキャン。開発サイクルの早い段階で問題を発見可能で、Jenkins クオリティゲートと IntelliJ IDEA と統合できるツールが必要でした。
  • カスタムルールと構成を作成できる機能。カスタムルールを定義して会社固有のコーディング規則を強制できる必要がありました。
  • 拡張性とコスト効率。 著しいパフォーマンスのオーバーヘッドや巨額な費用を生じることなく、Moovit の大規模なコードベースを処理できるソリューションが必要でした。

結果: 本番環境での問題が減少し、開発者の信頼が向上

現在、Qodana は合計 60 人の開発者からなる Moovit の 6 チームによって使用されています。Qodana は IntelliJ IDEA と同じ解析エンジンを使用しているため、Moovit 開発者はインスペクションプロファイルを IntelliJ IDEA と Qodana で同期しました。


その結果、次のステップを含むプロセスが完成しました。

  1. まず、開発者がコミット前の Qodana チェックを IntelliJ IDEA で実行して問題を修正します。
  2. 次に、開発者が Bitbucket リポジトリにマージリクエスト(MR)をプッシュします。Jenkins でビルドジョブが開始します。そこで問題数が特定の数を超えるか、重大度の高い問題が含まれている場合は、追加の Qodana クオリティゲートによってコードがブロックされます。
  3. Qodana クオリティゲートによってマージがブロックされると、Qodana Cloud にあるレポートへのリンクを含む Slack メッセージが開発者に届きます。開発者は Open in IDE(IDE で開く)機能を使って IntelliJ IDEA 内で推奨された修正を適用した後、コードを再度コミットします。

「一番のメリットは、Qodana がさまざまな高い重大度の問題を監視しているため、自分たちでインスペクションのリストを事前に定義する必要がなかったということです。デフォルトの重大な問題のリストを確認し、自分たちのニーズに無関係な問題のみを削除するだけで済みました」

— Amit Weinblum、Moovit インフラストラクチャチームリーダー

本番環境インシデント数の減少

インフラストラクチャチームによると、プロセスの中で問題を積極的に早期に発見して解決することで、特に開発中に発見できていた可能性のある本番環境の問題が減少したとのことです。

「まだ Qodana を使い始めたばかりですが、チームの深夜作業を回避できたと思った重大な事例がすでに 2 件発生しました。確実に重大な問題が通知されると思えるようになったため、自分の仕事に良い影響が現れています」

— Dor Rud、Moovit バックエンドチームリーダー

重要なコードルールを簡単に強制

Moovit は標準の Qodana インスペクションとは異なる独自のカスタムルールを作成し、問題の重大度をカスタマイズし、プロファイルから簡単にインスペクションを追加または削除できる機能を高く評価しました。この機能により、本当に重要なコード変更を監視できるようになりました。

開発者の生産性とコード品質のベストプラクティスの採用を強化

開発者が解析の精度と IntelliJ IDEA との統合を高く評価し、これによってワークフローの中断を最小限に抑えながら、より迅速に問題を解決できるようになりました。

JetBrains ブランドの力も重要な要素であり、それは開発者が Qodana を追加のコード解析手順として採用する決め手になりました。開発者は元々 IntelliJ IDEA やその他の JetBrains 製品のファンであったため、その結果を信頼していました。最終的には、その速度と信頼性により、組織内で静的解析がより肯定的に受け止められるようになりました。

「実際のところ、Qodana を導入する際には反発が生じるのではないかと心配していました。通常、会社のポリシーを開発者に強要するのは非常に困難です。JetBrains の評判が良く、Quadana が本当に重大な問題を報告してくれるおかげで、開発者は Qodana を無視したり抜け道を探したりすることなく問題を修正しています」

— Dor Rud、Moovit バックエンドチームリーダー

「他のコード解析ツールと同様に、Qodana はパイプラインのステップを追加します。これによって開発サイクルが遅延することになりますが、不便さを感じるのは短期間だけです。Qodana のおかげで長期的には本番環境システムが安定化し、開発者がパイプラインの遅い段階で問題を修正する必要がなくなりました。Qodana によって開発チームがポリシーに従い、数日におよぶ不眠の夜から救われるという劇的な変化が起きている様子を目の当たりにしています」

— Amit Weinblum、Moovit インフラストラクチャチームリーダー