見出し画像

エンタープライズでアジャイルを実現する技術について

技術担当の鈴木です。IMDLでは技術要素としてサーバレスやDevOpsに取り組んでいますが、採用している技術と、その理由について説明します。

トップ画像: Tisse ta culture, Place des festivals (CC BY 2.0) by art_inthecity

エンタープライズとアジャイル

IMDLは三越伊勢丹グループで利用されるサービスを開発しているため、いわゆるエンタープライズレベルのシステム開発/運用が求められます。一方で、IMDLが主導するサービスは、デジタル化を実現するためアジャイル開発を前提としたマイクロサービス型のアーキテクチャを目指す必要があります。

まず、エンタープライズレベルのシステム開発/運用ということでは、以下のような観点が重要になります。
・セキュリティ、障害対応、リリースプロセスなどがレギュレーションを満たすこと
・長期のアプリケーションの保守に対応できること(5年以上)

一方で、アジャイル開発が求める要素は以下のようなことです。
・日中無停止でのリリースが可能なこと →リリース回数の増加
・インフラ管理や障害対応が容易なこと →開発に集中

これらを満たすために、以下のことに取り組んでいます。
・サーバレスを中心としたPaaSを採用すること
・IaCとCI/CDに取り組むこと
・継続的に保守可能な言語を採用すること

サーバレスを中心としたPaaSを採用すること

スクリーンショット 2020-06-25 1.15.40

サーバレスとは、その名の通り「サーバの管理が不要」という意味です。アプリケーションが稼働するシステム構成全体が、クラウドサービスによって管理されているため、環境構築作業が軽減、インフラ管理が不要(OSパッチ適用やEOS対応が不要)といったメリットがあります。さらにコンテナ(Docker)を前提にすることでミドルウェアの管理も容易で、リソース効率も高まります

IMDLで利用しているのはAzureのApp ServiceとAWSのFargate(ECS)です。いずれも少ない設定で高度なインフラ環境を用意することができます。むしろ、VMやEC2のように仮想マシンを素で使うことを禁止しています。

サーバの管理が不要ということは、我々はOSレベルに手が出せないことを意味します。サーバに個別でエージェントをインストールすることもできません。これを責任共有モデル(Azure / AWS)と呼びます。PaaSであればOSレイヤー以下の責任はクラウドサービスが持ってくれるのです。

AWS LambdaAzure FunctionsのようなFaaSについては一部に採用しています。FaaSは、高度なサーバレス環境で圧倒的なスケーラビリティに魅力がありますが、実行環境に強い制約があるため、テスタビリティや可搬性に課題があります。このためエンタープライズのビジネスロジック部分で保守をしていくには悩ましいところです。現在は「シェル的な使い方」については推奨する、としています。

IaCとCI/CDに取り組むこと

スクリーンショット 2020-06-25 1.15.51

サーバレスを採用するだけではインフラ構成管理は楽になりません。システムを構成するにはサーバだけではなく、ネットワーク、セキュリティ、データベースなど、様々な要素が関わるためです。そこで、これらのインフラ構成の管理を自動化するために、IaC(Infrastructure as Code)に取り組んでいます。

ツールとしてはTerraformやServerless Frameworkを使っています。IMDLではAWSもAzureも使うため、個別クラウドサービスの固有機能は利用せず、外部の標準的なツールを利用しています。

また、より安全なデプロイを実現するためにCI/CD(Continuous Integration/Continuous Delivery)によるリリースプロセスの自動化にも取り組んでいます。

ツールとしてはAzure Pipelinesを採用しました。選定にあたって様々なツールを試しましたが、Azure Pipelinesは使い勝手と機能のバランスが優れていると評価しました。実はMicrosoftがGitHubを買収したことで、GitHub ActionsはAzure Pipelinesをforkして作られています。今後、Azure Pipelines(あるいはGitHub Actions)が世の中の標準になっていく可能性は高いと考えています。

IaCやCI/CDは、まだまだ未成熟の領域なのでツールも万能ではないです。凝りすぎて職人技にならないように、成果が出る部分を意識しながら適用領域を広げています。

継続的に保守可能な言語を採用すること

スクリーンショット 2020-06-25 1.16.03

Webアプリケーションの構築に利用する言語ですが、チームや案件によって選択することができます。とはいえ、長期間のメンテナンスを考えるとテスタビリティが高く、人材流動しても修正コストを低くする必要があるため、静的型付け言語が有利です。代表的なものとしてJavaとTypeScriptの採用理由を説明します。

Javaは25周年を迎える静的型付け言語ですが、豊かなエコシステムがあり、エンタープライズ用途として知られています。加えて、近年はOSSとなり、6ヶ月ごとのアップデートサイクルが採用されたことで進化が早まっています。GraalVMのAOTビルドを利用したNative Imageが広まれば起動の高速化も見えてきました。

Webアプリケーションフレームワークとしては、ど定番のSpring Bootを推奨しています。MicronautやQuarkusのようなマイクロフレームワークについては、まだトライアル段階と判断しています。

一方、TypeScriptは、JavaScriptのスーパーセットとなる静的型付け言語です。Microsoftが開発しただけあって、エンタープライズでのニーズがよくわかっています。ただ、近年ではコミュニティにも広く受け入れられ、多くのSPAフレームワークではTypeScriptでの開発が標準になりつつあります。

SPAフレームワークはAngularを推奨しています。Angular 6から導入されたSchematicsによって安全なアップデートが可能になったり、Angular 9から入ってきたAOTコンパイラIvyなど、より安全性と性能を両立させる進化を続けており、長期保守にも耐えられると判断しています。

他にもFaaSではPythonやC#、ネイティブアプリではDart、Swift、Kotlinが使われています。

まとめ

IMDLでは以下のような取り組みを推進しています。
・コンテナを前提としたサーバレスPaaSの利用
・IaCやCI/CDによるインフラや運用作業の自動化
・長期保守に向いている静的型付け言語の採用

同時に、三越伊勢丹グループとしてのセキュリティや各種レギュレーションを満たしています。このためオンプレミスやIaaS上の基幹システム群とはシームレスな連携が可能です。

総じて、モダンな環境としては無難な選択肢かなと思います。これは我々のミッションがデジタル化を通じてビジネス成果をあげることであり、開発チームは効率的にエンタープライズとアジャイルを両立させる必要があるからです。

私が考える理想のエンジニアは、ビジネスと技術のバランスを考えながら、システム全体を効率的に開発・運営し、より高いビジネス成果を目指す方です。エンタープライズ領域の魅力は、自分の作ったものが世の中で使われ、人びとの役に立つこと。三越伊勢丹という土台の上で、これに挑戦してみたい!という方は、ぜひエントリーしてください。

最後までお読みいただき、ありがとうございました。
Wantedlyでも記事を公開しているので、ぜひご覧ください!
https://www.wantedly.com/companies/company_129530/post_articles/251723

この記事が気に入ったらサポートをしてみませんか?