How Quarkus Improved Logicdrop’s Developer Experience and Process
Logicdrop は、ビジネスオートメーションとデータインテリジェンスのプラットフォームを提供し、企業が独自のソリューションを設計し、クラウドで実行できるようにしています。グローバルな顧客ベースで毎月数百万件のトランザクションを処理し、ミッションクリティカルなプロセスに大きな価値を与えています。
デベロッパーエクスペリエンスは、あらゆるテクノロジーの採用において重要な役割を果たします。アイデア出しから納品までを迅速かつ自信を持って行えることは、イノベーションを促進し、ワールドクラスの製品を提供することにつながります。
私たちはクライアントのために 複雑なことをシンプルにし ますが、自分たちの開発プロセスでも同じことができるでしょうか?
みんなが世界を変える方法に注目している中、私たちはまず自分自身を内側から変える方法に注目します。
…これはQuarkusの採用から始まっています。
挑戦
私たちのプラットフォームの開発は、3年以上前に始まりました。Quarkusはまだ鳴り物入りで、Kogitoはまだ存在していませんでした。また、息子のミドルネームに「Jenkins」を入れたのは、Jenkinsがまだ人気のあるビルドシステムだったからです。
2020年の今、私たちはまだSpring Bootを使っていますが、Knative、Kamel、IgniteなどのKubernetesやその他の技術を全面的に取り入れています。
このようなプラットフォームの大きな進歩と、それによってもたらされた機能は、非常に複雑なものとなり、ここが旅の始まりでした。
プラットフォームが進化し、複雑さが増すにつれ、開発者のプロセスが雑になり、フロントエンド、バックエンド、オペレーションなどの技術チーム間の依存関係がボトルネックになり始めました。
そこで私たちは、自尊心のあるコンピューターサイエンティストがするように、データを調べてみました。何がこの変化の原因であり、よりアジャイルになることを妨げているのか?
いくつかの分析を行った結果、3つの大きなペインポイントが浮かび上がってきました。
-
環境のセットアップが大変過ぎる
-
学習曲線が急すぎる
-
CI/CDプロセスは自動化されていたが、十分ではなかった
2021年に入り、私たちの目標は、単に現状に戻ることではなく、プロセスを大幅に改善し、クラウド・ネイティブに向けて真っ先にジャンプすることです。
Quarkusとは何でしょうか?
ウェブサイト にあるように、本当に純粋な *開発者の満足*です。
Spring Boot、Micronaut、さらにはGuiceも検討したことがありました。また、Pythonや.NET Coreへの切り替えなど、より抜本的な変更も検討しました。
結局のところ、Quarkusが私たちの心をつかんだのは、私たちが知っているJavaでありながら、必要に応じてステロイドを使用しており、そして以下のものでした:
-
開発者がすぐ始められる
-
最も簡単に生産性を上げることができる
-
リッチでまとまりのあるエコシステム
-
リアクティブにも命令的にも自然に対応できる
-
KubernetesとKnativeフレンドリー
-
慣れ親しんだ標準に基づいている
Quarkusを深く掘り下げれば掘り下げるほど、他の側面にも魅力を感じるようになりました。
この時点で、私たちは思い切って既存のプラットフォームを改造するのではなく、白紙の状態からスタートすることにしました。同時に、限界に挑戦し、CI/CDプロセス、クラスター、そして最も重要な開発者の文化を全面的に見直すことにしました。
プロトタイピングを担当するリードアーキテクトは次のように言います:
1ヶ月足らずの間に、Quarkusを使って少なくとも3つの新しい重要なプロトタイプを実装し、デプロイしました。そのうちの2つがすでにボツになっていることが信じられません。
リード・アーキテクト
変化は必然です
このプロジェクトは、既存のSpring Bootプラットフォームの全面的な書き換えとして取り組んだため、多くの変更が必要となりました。コードベースは新しくなりましたが、パターンは同じで、Quarkusを使用することで、より簡単に、より速く、より良く実装することができました。
-
VSCodeは、私たちにとってデファクトのエディタになることができました
-
AutoConfigurationsと無駄な依存関係がなくなりました (大勝利)
-
DIが魔法ではなく予測可能になりました (大勝利)
-
標準仕様を使用することで、コードベースの開発や学習が容易になりました
-
MongoとPanacheは、私たちが必要としていたものを提供してくれました。
-
Kubernetesの設定をよりサービスに近づけることができました
-
Mutinyは、リアクティブ・サービスを誰でも簡単に書けるようにしてくれました。
-
設定やDIのための"Bean"をスキャンするためのリフレクションがなくなりました
-
セキュリティはすぐに使えて、しっかりと定義されていた (大勝利)
-
RESTクライアントにより、サービスをよりきれいに、よりよく分離することができました
-
OpenAPIとSwaggerは微調整なしで動作しました
-
Mavenを熟知している必要はありませんでした
-
テストが容易になり、一貫性がある状態になりました
-
CI/CDは、すべてのサービスを個別にではなく、まとめてオーケストレーションします
-
サービスを隔離してデプロイ/テストするためのプレビュー環境を導入しました
-
肥大化した依存関係が解消されました
-
Livecodingで全てが良くなりました
そして、そのリストはまだまだ続きます…
すべての開発者は、Pythonや.NETの開発者も含めて、Quarkusを簡単に使いこなせるようになり、受け入れています:
Quarkusは、Javaの開発をこれまで以上に簡単かつ効率的にします。コードをリビルドするのに適した端末を探すために、複数のターミナルを切り替える必要はもうありません。Quarkusはそれを自動的に行ってくれます。
ルールとビッグデータにフォーカスしたフルスタックデベロッパー
また、Kubernetesとの深い連携により、複雑さを最小限に抑え、当社のサービスをよりクラウドネイティブに近づけることができました。以前はデベロッパーだった当社のDevOpsエンジニアが、このように語っています。
これは、Quarkusが私に代わってサービス構成を処理してくれるので私が取り組む必要がなくなったため、コーディングに戻れることを意味していますか?
DevOpsエンジニア
フロントエンドの開発者は、少なくともコードを読むことができる程度にはQuarkusに慣れており、デバッグやテストを手伝うことができます。
遂にローカルで完全な環境が整い、何が起こっているのか理解できるようになりました。これで、少なくとも待つことなく、バグを見つけることができます。
フロントエンドデベロッパー
ネイティブイメージは必要ですか?
ネイティブイメージは、元々はあまり気にしていなかった機能のひとつでしたが、どうでしょう?ほとんど問題なく動作しています。
これまで200MBだったコンテナのサイズは、現在では50MB程度にまで縮小されました。これは、クラスターの密度を高めるだけでなく、クラスター・ノードのコストを大幅に削減することにもつながります。
追加されたネイティブイメージの起動時間は1秒未満で、それまで10秒以上かかっていたものが短縮されました。
ネイティブイメージをビルドして使用できるのであれば、そうしない手はありません。CI/CDプロセスやテストに組み込む際に、いくつかの興味深い課題が発生する可能性がありますが、大きな問題にはなっていません。
効果測定
半年後、ほとんどのものが一から作り直されました。
Quarkusを採用した当社の新しいクラウドネイティブプラットフォーム Logicdrop Fusion をご紹介します。
当社のコードベースの60%以上が移行され、元の同等のコードベースの半分以下のサイズになりました。プレビュー環境やステージング環境へのデプロイは1日1時間に何度も行われていますが、平均所要時間は以前の半分になりました。
Quarkusへの移行によって得られた大きな成果は何ですか?
-
オンボーディング と ランプアップは、数週間ではなく数日で完了します。
-
コードベースが小さくなり、タイトになり、作業しやすくなりました
-
生産性と品質の向上
-
Javaが再び楽しくなりました
また、 すべての 開発者は、数日や数週間ではなく、数時間でサービスを構築、テスト、デプロイできるだけの実務知識を持っています。
ある開発者は、学習曲線が容易になった結果をこのように述べています:
煩雑な設定をすることなく、期待通りに依存関係を注入してコーディングを始められるのは素晴らしいことです。まずどうやってそこに到達するかではなく、今やるべきことに集中できます。
Javaデベロッパー
考えてみれば、私たちはQuarkusを学び そして、 すべてを一からやり直さなければなりませんでした。今では、わずかな期間で本番対応のコードをデプロイしています。これは非常に素晴らしいことであり、Quarkusの導入がいかに簡単であったかを示しています。
Quarkusへ…そしてその先へ
現時点では、Quarkusに完全に傾倒しています。Quarkusは私たちの新しいプラットフォームの心臓部であり、後悔しているのはもっと早くに移行しなかったことです。
今年の残りのロードマップ:
-
引き続き、Quarkusの基盤を拡大
-
チームやクライアントにQuarkusを広める
-
プラットフォームの堅牢化
-
Integration with Kogito との連携
そして、言うまでもなく、Quarkusのおかげでできる限り早く機能を導入することができるようになりました!
現在の典型的な一日:
ご参考までに、10のサービスを展開してみました。
Slackメッセージ
今、改めて10人全員を配置しました。
30分後…