デジタルトランスフォーメーション(DX)の波が加速し、ソフトウェアやサービスの開発スピードがビジネス成功への大きな影響を与えており、どのように効率良くシステムを運用するかが重要となってきました。それらを実現するために、短期間で要件定義からリリースまでを反復させるアジャイル開発や、アプリケーションの開発、配備、管理に優れた運用することが求められます。こうした背景から、今回はそれを解決する新しい仮想化手法として「コンテナ」と呼ばれる技術を使用した際のビジネスメリットについて紹介致します。プロダクトオーナー、システムエンジニアが一丸となってスピーディーにサービス開発ができるよう、自社の開発環境の見直しなどの参考になれば幸いです。
コンテナとは?
コンテナとは、サーバのプロセスやリソースを区画化した空間です。コンテナを稼働させる場所となるサーバ(ホスト)上に区画化された空間を実現することやその方法が「コンテナ型仮想化」「コンテナ技術」です。
アプリケーション(処理)が実行される箱のようなイメージです。間仕切りされた引き出しがイメージしやすいかもしれません。
コンテナ技術は、実行環境を他のプロセスから隔離し、その中でアプリを動作させる技術です。サーバの中身を整理整頓して、アプリやWebサイトの開発や管理を効率的に進行することができます。
引き出しが仕切られていればそこまで文具や服などが散乱せず、他に影響しないため、取り出しやすく、収納しやすくなる、そんなイメージです。
コンテナ技術を用いれば、異なるサーバであっても簡単に同一構成の開発環境や本番環境を構築できます。その為、開発者はアプリケーションをより早く、安全に作成してリリースすることができます。
コンテナ技術を使用した時のビジネス面のメリット
①開発期間の短縮やコストの削減に繋がる
従来の手法よりも「環境構築作業が短い」といった特徴があります。例えばコンテナでは、コンテナの中に実装環境を作っておけば、複数エンジニアにコンテナの構成管理ファイルを渡すだけで開発環境が作れます。弊社のエンジニアが実際に従来の手法だと1日~最大で1週間かかる開発環境構築が、1時間~3時間程度まで工数を削減したという実例もありました。
開発者はすぐに開発環境を準備できるため、迅速に開発に着手し、コードの開発に集中できるといったメリットがあります。
②サービス/事業のスケール拡大に繋がる
別々のコンテナが独立して実行されるため、改修時の影響範囲を限定することができます。
このためプログラムの改修を最短で実行でき、即業務やサービスに反映させることが可能になります。対立しがちな開発と運用の担当者がお互いに強調してスピーディーにクライアントにシステムを提供するDevOps(デブオプス)という手法ととても相性が良いです。
③長期的な運用コストの削減により、残った時間や費用をビジネス面への注力へ投下できる
別々のコンテナが独立して実行されることにより、1 つのコンテナに障害が発生しても他のコンテナに影響することはありません。
障害が起きた時に特定のコンテナのみを停止して新しくコンテナを立ち上げるだけなので障害復旧にかかる人員や時間を減らすことができます。その為、従来の運用コストと比べて工数や費用の削減に繋がります。
コンテナを使用しない場合のデメリット
①人的操作ミスによる開発工数の増加
開発環境を構築する際、各開発者が①ダウンロードするツールのバージョンを間違い、②手順を読み飛ばしてしまう(マニュアルの読み違い)などでプログラムを書き始めるまで数日を費やすことがあります。たった数日ですが、開発者が複数名いるようなプロジェクトでは大きなロスに繋がってしまいます。
②サービスを停止することによる利益の減少
サービスに新機能を追加する、UIを改善するなど、現在稼働しているシステムに手を入れる際に、一度システムを止める、つまりユーザーへのサービスを止める必要があります。システムが複雑であるほど、現行システムに手を加える際の影響範囲が大きい可能性があるため、再度システムを稼働させるまでに時間を要してしまい、その時間分機会損失につながる可能性があります。
しかしコンテナを使用することで、間仕切りがあることにより、手を加える部分の一部のサービスのみを止めるだけで機能追加などを実現できます。
アプリ開発者から見た、コンテナ技術のメリット
コンテナ技術を使った開発の現場で、アプリ開発者から見たメリット
コンテナは環境構築が楽にできることが最大のメリットです。
アプリ開発環境構築ができない要因は先にも挙げた通り些細なことがほとんどのため、この原因を見つけるのになぜ何時間もかけてしまったのか。とアプリ開者にとってストレスがかかっているポイントでした。ノンストレスでプロジェクトをスタートできることは大きなメリットと言えます。
また、開発者目線では、他の仮想化技術よりも軽快に動くこともメリットです。
過去に流行っていたVirtualBoxやVMWareなどは、スペックの低いPCでは動かないなど、すごく動作が重くなるといったことが起きましたが、コンテナ(Docker)はそれらに比べると格段に軽く動くので開発時のスピードは上がります。PCの動作が遅いことも開発者にとってはストレスを感じるポイントでもあります。
どのプロジェクトでもスペックの高いPCが用意できるわけではないのでこの点も大きなメリットと言えます。
コンテナ技術に関する用語はこれを押さえておきたい!
コンテナ技術に関連する2つの用語
1.Docker
コンテナを利用した基盤ソフトウェアでコンテナの代表的な技術です。Docker社が開発しているコンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
軽快で使いやすくいため普及しており、多くのプロジェクトで利用されている技術です。
2. Kubernetes
Google社主導で開発された、「k8s」と表記されることもある、コンテナオーケストレーションシステムです。コンテナオーケストレーションとは複数のコンテナの管理を自動で行い、効率的に運用管理するため仕組みのことです。コンテナ化されたアプリケーションをいつでもどこでも好きなときに実行できるようになります。
余談ではありますが最近ではドラマ「半沢直樹II・エピソードゼロ」でセリフ中に登場したことでエンジニア界隈のSNSを賑わせていました。
最後に
コンテナ技術により、アプリ開発者や運用管理者の負担を軽減し、開発環境の構築やサービス改善のスピードを加速させることが可能です。こうしたメリットからシステムを含め自社サービスを創っていくチームにとって、コンテナ技術は必要不可欠な技術となっています。コンテナ技術を使いこなすことで、競合優位性を得ることにもつながるのではないでしょうか。
また、コンテナ技術とシステム内製は、ビジネスのスピードを加速させるという点で非常に相性が良いものです。
システムをSIerにアウトソースしているプロダクトオーナーやプロジェクトマネジャーの方にも、プロダクトやプロジェクトに応じて、コンテナ技術を用いたシステム内製という選択肢をご検討いただくきっかけとなれば嬉しく思います。