DevOpsによる開発を効率化するための実行環境

2023年12月8日(金)
田中 智明
第8回の今回は、DevOpsによる開発を効率化するための実行環境について、その選択肢やメリット/デメリットについて解説します。

はじめに

ここまで、コンテナを活用した開発や、運用に使用できるツールについて説明してきました。では実際に運用をしていくにあたり、どのような環境で運用していけば良いのでしょうか。

今回は、DevOpsを活用して高速に開発サイクルを回していくにはどのような実行環境が適しているのかを解説します。

実行環境の選択肢

「実行環境」とは、アプリケーションやその動作に必要なRDBやNoSQLなどのソフトウェアを実行する環境のことです。実行環境には大きくわけて2つあります。1つは「オンプレミス」、もう1つが「パブリッククラウド」です。

オンプレミスとは

オンプレミスとは、サーバーやネットワーク機器などのハードウェア・ソフトウェアなどを自社で保有し管理運用することを指します。オンプレミスでは、あるソフトウェアごとにサーバーを用意し運用するのが一般的です。

「オンプレミス型プライベートクラウド」というものも存在します。こちらは自社のサーバーをクラウド環境として構築します。今回はプライベートクラウドではなく、従来型のオンプレミスについてメリット/デメリットを解説します。

メリット

・カスタマイズ
自社でハードウェアを調達するため、要望に合ったカスタマイズが可能です。また、自社内にサーバーがあるためアプリケーションの連携など思い通りに設定できます。

・セキュリティ
自社で管理しているハードウェアであるため、自社のポリシーを適用できます。パブリックからオンプレミス環境に一切アクセスできない設定も可能です。

デメリット

・運用コスト
オンプレミスではハードウェアを自社で購入し設置、設定しなければなりません。サーバーを設置するにはサーバールームのようにセキュリティが担保され、空調のある環境が必要になります。電源やネットワークなども考慮する必要があるでしょう。トラブルなどへの対処も自社で行う必要があります。こういった点で初期費用や運用保守を行なう人員の確保にコストがかかってきます。

・スケールのしにくさ
サーバーを発注するには、実行したいアプリケーションに必要なリソースを予想します。予想よりもリソースを消費するようであればスペックアップが必要になりますし、予想よりもリソースを消費しなければサーバーのリソースが無駄になります。サーバーの代金は空きリソース分もかかるため、できるだけ無駄なく使い切りたいところです。

では実際にサーバーを発注するとして、いつ届くのでしょうか。今日明日で調達できるものではありません。早くても数週間から遅くて数ヶ月はかかってしまいます。機材調達にかかる時間を考えると気軽にサーバー追加やスペックアップができません。

パブリッククラウドとは

パブリッククラウドとは、インターネットを通じてクラウドコンピューティング環境を提供するサービスです。具体的にはハードウェアを自身で調達することなく、データセンターなどで提供されているコンピューターのリソースを利用します。

メリット

・コスト
クラウドはサーバーやその他のサービスを使った分だけ料金を支払います。マシンリソースが足りないときや、多すぎる場合にはマシンスペックを変更するなどして調整できます。新しくサーバーを追加することも容易です。サーバー調達が容易になったため使い捨ての様に使用できます。

自社にサーバーを置く必要がなくなったため、サーバールームの様な設備や、それをメンテナンスする人員も不要になります。人や設備にかかっていたコストをサーバー代金に当てることができます。

・機材調達のスピード
クラウドは、ほしいリソースを即座に用意できます。オンプレミスであれば数週間以上の時間をかけてサーバーを調達しますが、クラウドはクリック一つでサーバーを用意できます。

デメリット

・コスト増加の可能性
クラウドは使った分だけ料金を支払います。これはメリットでありデメリットでもあります。使えば使うほど料金がかかるからです。慣れないうちは誤ったスペックのマシンを用意してしまったり、クラウドに最適化された構成にならず無駄に料金が発生してしまうかもしれません。不要なリソースを消し忘れて料金が発生してしまうこともあるため、最低限「使い終わったら消す」ことを心掛けましょう。

・学習コスト
これはどのツールを使っても同じことが言えるのですが、クラウドを使うにも学習が必要です。特にクラウド特有の運用や操作方法などを学習していかないとクラウドを使用してる旨みがありません。これは一例ですが、クラウドをオンプレミスのように使用しているのをよく見かけます。クラウドは運用コストを削減できることがメリットですが、オンプレミスと同じことをしていてはサーバーの所在がクラウドに移っただけで同じ程度の運用コストがかかってしまう可能性があります。

クラウドネイティブという考え方

近年、「クラウドネイティブ」という言葉をよく耳にします。クラウドネイティブとはパブリッククラウドやプライベートクラウドで運用することを前提としたシステムやその考え方を指します。

⚫︎CNCFが定義するクラウドネイティブ
https://github.com/cncf/toc/blob/main/DEFINITION.md

なぜ、今クラウドネイティブが注目されているのでしょうか。その背景について説明します。

販売形態の変化

現代のビジネスでは、顧客のニーズに素早く対応していくことが重要視されています。サービスの販売形態が買い切り型からサブスクリプション方式に変化しつつあるからです。

従来の買い切り型は、一度リリースしてしまえば新機能の追加などは行われません。新機能は次のバージョンに含まれ、顧客はそれを楽しみに待っている状態です。フィードバックにリアルタイムで応える必要はありません。

一方で、サブスクリプション方式では日々顧客からフィードバックを受け、新機能の追加や不具合の修正が行われます。これは継続的に料金を支払ってもらうためにも必要です。また、サブスクリプション方式ではサービスを利用する顧客数が読めません。ある新機能のリリースで爆発的に人気が出ることもあれば、顧客が別のサービスに移ってしまうこともあります。

アジャイルとDevOps

顧客から受けたフィードバックや顧客数の増減に素早く対応するためにはアジャイル開発やDevOpsが必要になります。

アジャイル開発では優先度の高い機能から開発し、できたものからリリースします。高頻度にリリースを繰り返すことで顧客に早く機能を提供し、フィードバックの機会を増やすのが狙いです。高頻度にリリースを繰り返すためにはテストの自動化やデプロイの安定性が重要となってきます。そこでDevOpsの仕組みを利用します。

DevOpsはコンテナ化されたアプリケーションを様々な環境から使用し、効率化や自動化、デプロイの安定性を実現します。また、Infrastructure as Code(IaC)を使用して環境構築の簡素化を実現します。

クラウドの必要性

アジャイル開発やDevOpsはあくまでも開発・運用をしていくための考え方ですが、オンプレミスよりもクラウドとの相性が良いとされています。

オンプレミスはサーバーの調達に時間がかかるため、一度作った環境をサービスが終了するまで、もしくは、ハードウェアが故障するまで使い続けます。そのためスケールアウトや構成変更が気軽にできないという問題があります。

クラウドは必要なときに必要なだけ即座にサーバーを調達できるため、気軽に構成変更ができます。構成変更後の動作確認環境を別途用意することもできます。

柔軟に顧客のニーズに応えるためには柔軟にインフラ構成を変更できなくてはなりません。クラウド・アジャイル・DevOpsを使用することで、柔軟に顧客のニーズに応えられるようになります。

おわりに

サービスの販売形態が変化しつつあることで、従来のウォーターフォール開発では顧客のニーズに即座に応えることができません。そこでアジャイル開発やDevOpsをうまく回すためのクラウド環境が必要となってきます。

もちろん、オンプレミスにはオンプレミスの良いところがあるので、「どういったサービスを運用するのか」「誰が使用するのか」という点を考慮し、実行環境を選択することが重要となります。今回は、そのような観点で解説しました。

次回は「Git」について触れていきます。GitはDevOpsにとっても重要なツールとなっています。数あるバージョン管理ツールの中で、なぜGitを選択するのか、また、どのように使用するのかなどについて解説します。

日本仮想化技術株式会社
ソーシャルゲーム業界で10年間インフラエンジニアとして活動し、現在は日本仮想化技術でOpsエンジニアを担当。DevOps支援サービス「かんたんDevOps」では仕組み作りや導入支援、技術調査などを行っている。

連載バックナンバー

設計/手法/テスト技術解説
第25回

AWSの監視サービス「CloudWatch」でサーバー監視を試してみよう

2024/8/9
本連載も今回で最終回となります。今回は、AWSの監視サービス「CloudWatch」を使って、簡単なサーバー監視を試してみましょう。
設計/手法/テスト技術解説
第24回

CI環境を構築して「ESLint」で静的解析を実行してみよう

2024/7/26
実践編第8回の今回は、「Dev Containers」でCI環境を構築し、静的解析ツール「ESLint」で静的解析を実行するまでの流れを解説します。
設計/手法/テスト技術解説
第23回

テストコードを書いて「GitHub Actions」でCIを実行してみよう

2024/7/12
実践編第7回の今回は、Webフロントエンド開発を例に、テストコードを書いて「GitHub Actions」でCIを実行するまでの流れを解説します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています