なぜエンタープライズ開発にDockerを採用したのか
ここからは、筆者が在席するワークスアプリケーションズにおけるDockerの活用事例を紹介します。
当社は、エンタープライズ向けのERPパッケージ「COMPANY」の開発を行っています。エンタープライズ向けの製品を提供する中で、エンタープライズ向けゆえの複雑さに伴う、様々な課題に直面してきました。ここからは、Dockerを用いることで課題を解決できた事例を紹介します。
2つの課題
本記事で紹介する解決事例は、次に示す2つの課題を対象としたものです。
課題①「複数製品・複数バージョンの開発および保守」
エンタープライズ向けゆえの課題として、開発や保守を行う製品の多さがあります。COMPANYには人事給与から会計、サプライチェーンマネジメントと様々な製品をラインアップしており、当社のWebサイトに掲載しているものだけでも19製品あります。加えて、開発中の製品も多数あります。
加えて、お客様によってバージョンアップのタイミングが異なることもあり、1製品につき、複数バージョンを保守しなくてはなりません。
こうした事情による複雑な開発・保守環境は、当社が抱える長年の課題の1つでした。
課題②「複数拠点での開発」
当社では、同じ製品を複数の国で共同で開発しています。そのため、開発者が使用するEclipseやTomcatの構成を同じにするほか、データベースやソースコード管理など共有で使うものは、各拠点間で同期を取りながら運用していく必要があります。この「複数拠点における同期」を簡単に行う仕組みを、長年模索していました。
これらの課題に対し、開発から評価までの各フェーズにおいて、Dockerを取り入れた仕組みを解決策として導入しました。以下がその事例です。
解決事例①「継続的インテグレーションの利用」
当社ではGitLabとJenkinsを連携させて、継続的インテグレーション(以下CI)を行っています。
よくあるCIですが、複数バージョンが絡んでくると複雑になってきます。また、過去のバージョンに修正が発生した場合、テスト環境の関連ライブラリにバージョンの不一致が発生することで、テストに失敗することがありました。
解決策には、仮想環境を使う方法や、古いバージョン用にテスト環境を構築する方法がありますが、準備やテスト処理に時間がかかってしまいます。
この問題に対し、各バージョンごとの環境をDockerイメージとして用意しておき、Jenkinsがテスト時に対応バージョンのDockerイメージを起動して、そのコンテナ内でビルドやテストを行うという仕組みに変更しました。この結果、ソースコードのバージョンに対応した環境を用意することができました。さらに、環境の起動が速いため、マージリクエストを素早く処理することも可能なりました。
