![SB C&S株式会社 ICT事業本部 ICT事業戦略・技術本部 技術統括部テクニカルマーケティングセンター 佐藤梨花氏](http://cz-cdn.shoeisha.jp/static/images/article/15836/15836_0.jpg)
コンテナは今や当たり前に要求される技術
2021年4月、IDC JapanはコンテナとKubernetesの導入状況に関する調査結果を発表した。その調査によると、約4割の企業・組織がコンテナを「導入済み」「導入準備中」と回答。このことから、国内においてはすでにコンテナは当たり前に要求される技術になりつつあるという。
コンテナがこれほどまでに普及している背景にあるのが、開発サイクルの高速化だ。いかに顧客の要望に迅速に対応し、安全なシステムを構築できるかが企業価値につながる。環境構築が容易かつ迅速に行えるコンテナを採用する理由はそこにある。
現在、SB C&SでDevOpsを推進するエンジニアとして、Springについて積極的に発信している佐藤氏も「私自身もそうでしたが、環境構築を苦手にしている開発者は多い」と言う。なぜなら環境構築にはインフラ寄りの知識が必要になるからだ。
佐藤氏は新卒で入社したIT企業で約8年半、Javaによる基幹システムの開発に従事。メインはコーディングだが、顧客と打ち合わせして要件を定義したり、リリースした後の保守運用にも携わったりするなど、一人でDevからOpsまで経験したという。それでも「試験が始まるから新しく試験の環境を作ってほしいなど言われても、何から手をつければ良いのか、工数がどのくらいかかるのかわかりませんでした。また構築したものが本当に妥当なのかわからず、その積み重ねが苦手意識を増幅させていくのだと思います」と佐藤氏は話す。
だが、コンテナを使えば、開発者が苦手とする環境構築が一瞬でできるようになる。「環境を構築したことのある開発者なら、時間が短縮できるだけではなく、自分自身が生み出すアプリケーションをリッチにできるなど、良いものが生み出せることも知っている。コンテナ技術を身につけることは、開発者のキャリアに取っても優位になるので、魅力的な技術だと感じている人は多いと思います」(佐藤氏)
コンテナを使うメリットは高速化や環境構築の容易さだけではない。同じDockerファイルを使えば、本番環境と試験環境を同じにできるので、環境起因によるバグを撲滅できる可能性がある。
![SB C&S株式会社 ICT事業本部 ICT事業戦略・技術本部 技術統括部テクニカルマーケティングセンター 佐藤梨花氏](http://cz-cdn.shoeisha.jp/static/images/article/15836/15836_1.jpg)
開発者がコンテナとKubernetesに抱く苦手意識の正体
だが、そのような魅力がある一方で、コンテナの活用には敷居の高さを感じている開発者もまだまだ多いのも事実だ。「コンテナはインフラエンジニアが持っているものを借りるという認識が、開発者側にあるのが大きな理由だと思います」(佐藤氏)
Kubernetesになると、さらに敷居や高くなる。KubernetesはDockerなどのコンテナ化されたサービスを管理するためのポータブルで拡張性のあるオープンソースのプラットフォームであり、コンテナを利用するうえで欠かせないソリューションだ。「Kubernetesはクラスタ構成やストレージの管理が複雑なので、開発者にとっては難度が高い。しかもさまざまなことができるよう、プラグインが豊富に用意されています。似たようなプラグインも多いので、最適解を導くことが難しい。このような理由から尻込みしてしまう開発者も多いと思います」(佐藤氏)
特にコンテナやKubernetesと馴染みがないJava開発者ならなおさらだ。Java開発者などDockerやKubernetesに関する知識のない開発者がそれらの技術を扱わなければならなくなった場合は、「ネットで検索し、ヒットしたテンプレートをコピー&ペーストしてそのまま使ってみることが一般的だと思います」と佐藤氏。だが、このような方法には大きな問題がある。「動いたとしても、それは自分がやろうとしていたものの最適解なのか、セキュリティ的に問題がないのかなども、自分で気づくことができないからです」(佐藤氏)
そのため、Dockerファイル起因のバグが起きたとしても、知識がないのでそれがDockerファイルに原因であることを特定することも難しい。もちろん、修正する術もわからない。たとえ修正しても、知識が乏しいので時間もかかり、さらに大きなバグが起こる可能性も秘めている。
しかもDockerやKubernetesが今、正しく動いているからといって数年先までそのまま使えるわけではない。3~4か月に1回の頻度でバージョンアップがあるからだ。例えばKubernetesであれば、Kubernetes自体のバージョンアップはもちろん、Kubernetesに関連するさまざまな機能もバージョンアップされる。「脆弱性が見つかった場合は、直ちに対処する必要がありますが、コピー&ペーストして作ったDockerファイルや、ネットの情報を見て適当に設定したKubernetesだと、そもそもその見つかった脆弱性の対象なのか、そのバージョンアップが自分のコンテナ環境に影響があるかどうかという判断が難しくなります。アップデート頻度も高いので、それに追いついていける自信とスキルを身につけていくことが求められます」(佐藤氏)
コンテナへの苦手意識を払拭する「Spring」などの技術の進化
だが、そんな苦手意識のある開発者でも、コンテナを身近に感じられる技術が登場した。それが2014年にリリースされた「Spring Boot」である。Spring BootはSpringの機能を使いやすくするためのフレームワーク。これを使うことでアプリケーションサーバの構築が不要になり、作ったパッケージをそのまま単一で動かすことができる。
このように改めて言語化すると気づく人もいるかもしれないが、Spring Bootはコンテナと似た技術というわけだ。「Spring Bootがリリースされたことで、Springで作ったものを容易にコンテナ化やクラウド化できるようになった」と佐藤氏は説明する。さらに特筆すべきは、Spring Boot 2.3から、Cloud Native Buildpacks(クラウドネイティブビルドパック)をサポートしたことだ。
「開発者にとって馴染み深いMavenやGradleというビルドツール1つで、Dockerイメージの作成が可能になりました」(佐藤氏)
しかもクラウドネイティブビルドパックは、使用言語は自動判定し、最適なDockerファイルを作成・コンテナ化してくれるのだ。
Spring Bootだけではない。VMwareも「Tanzu Application Platform(以下、Tanzu)」という、Kubernetes上でクラウドネイティブアプリケーションの構築・デプロイを容易にするプラットフォームを迅速かつ安全にアプリケーションを構築、マルチクラウド上のKubernetesにデプロイするためのプラットフォームをリリース。このTanzuの中に含まれるTanzu Build Serviceに、クラウドネイティブビルドパックの機能が組み込まれている。つまり、Tanzu Application Platformを使えば、自動的にクラウドネイティブビルドパックが使えるようになるというわけだ。後はcf pushというコマンドを叩くだけで、すべての運用はTanzuに任せることができ、開発者はコンテナを一切意識することなく使えるようになるという。
![VMware Tanzu](http://cz-cdn.shoeisha.jp/static/images/article/15836/15836_2.png)
「このようにDockerやKubernetes周辺の技術が登場したことで、Dockerファイルを開発者自ら書く必要はもちろん、Dockerファイル自体を必要とすることなく、開発者にとって馴染みのあるコマンドに少し手を加えるだけで、ビルドからコンテナ化、配布まですべて行ってくれるような技術が登場しています。Dockerやコンテナ、Kubernetesに苦戦してきた開発者にとって、難しかったコンテナ関連の技術を隠ぺいして、簡単な操作で誰もが使えるようになってきたのです。とにかくコンテナを利用してみたい、コンテナのメリットを得たいという開発者にとって、スタートしやすい環境が整ってきたと思います」(佐藤氏)しかも素晴らしいのは、コンテナを使ううえで課題となるデータベースの接続や外部連携なども、プラットフォーム側が担保してくれる。「開発者は純粋に作りたいものを作れば、最終的にコンテナとしてできあがってくる。しかも1つのプラットフォーム、1つのコマンドで完結する。素晴らしい技術です」(佐藤氏)
VMwareでは運用もBOSHというKubernetesの構成管理部分を補う機能を有償で用意。「マルチクラウドに対応しているので、デプロイ先となるパブリッククラウドの種類を意識することなく、運用を自動化してくれます。アプリケーションをよりリッチにできるのも魅力ですね」(佐藤氏)
Spring BootやTanzuを使えば、インフラの知識のない開発者でもコンテナやKubernetesを扱える環境が整ってきたとはいえ、「勉強が不要というわけではない」と佐藤氏は釘を刺す。「Tanzuでどういうことができるのか、機能を勉強することは必要でしょう。特に意識してほしいのはインテグレーションの部分。どれを使えば自分の環境に最適なのか、選定にも関わってくるので、このあたりの知識については特に注力して身につけてほしいと思います」(佐藤氏)
将来的に企業情報システムはマイクロサービス化されていく方向に進んでおり、その前段階として、コンテナに関する知識は、インフラエンジニアはもちろん、開発者にとっても不可欠とも言える。
Spring BootとTanzuがDevOpsの懸け橋に
このようにコンテナやKubernetesを取り巻く技術は、日進月歩で進化している。これまでのようにインフラの知識を身につけなければ入れなかったコンテナの世界に、開発者も容易に入れるようになっている。これまでDevとOpsではスキルセットが異なっていたが、その懸け橋となる技術が登場したことで、DevとOpsが共通言語で話せるようになり、一気通貫のDevOpsの実現も見えてくる。
「インフラやコンテナに苦手意識を持っている開発者はまだまだ多いと思います。ですが、Maven、Gradleという馴染みのあるコマンドで実行できるほど、コンテナは身近な存在になっています。コンテナの技術を使うことで、システム開発の迅速化が可能になり、開発するものもリッチになる。また環境依存のバグを減らすことができ、さらに運用はプラットフォームに任せることができる。その結果、品質の向上にもつながります。このようにコンテナ側から歩み寄ってくれているので、使わない手はありません。その入り口として、最適なのが今回紹介した技術だと思います。ぜひこれらを活用して、コンテナの世界への第一歩を踏み出してほしいですね」(佐藤氏)
関連情報
SB C&Sは、VMware Tanzu をはじめとした DevOps の成功に必要なサービスを提供し、お客さまのDevOps 導入をトータルでサポートします。詳細はこちらから!