SmartCloud コラム

DevOpsを実現するには

2019.09.04DevOps入門

DevOpsの実現は「ツール」の使いこなしがポイントです

DevOpsを実践するためには、様々な「ツール」を活用する事が求められます。ここでは、ツール活用についての考え方を解説し、主要なツールについて紹介します。

パイプラインという考え方

DevOpsにおけるツール活用とは、CI/CD(Continuous Integration/Continuous Delivery)を実現することが基本となります。CI/CDにおいて、ソースコードをコードリポジトリにコミットし、実際にデプロイされるまでの流れを「パイプライン」と呼びます。ちょうどパイプにソースコードを流し込むと、反対側からデプロイされた環境が出てくるようなイメージです。

 

パイプラインは、シンプルなものにすることも、より高度な処理を行わせることもできます。通常、まずはシンプルに最低限の処理を行うパイプラインを構築し、必要に応じて処理を追加して改善していくことになります。ただし、あまり複雑なパイプラインにすると、処理に長時間かかってしまう、なにか問題が起きたときのトラブル解決の手間がかかるなどの弊害があります。例外的な処理は極力パイプラインに持ち込まないようにするなど、シンプルさを心がけることが重要でしょう。

 

CI-CD-DevOps.png

図1:CI/CD/DevOpsの範囲

パイプラインを実現する自動化

CI/CDパイプラインを実現する基本的な技術が自動化です。CI/CDにおける自動化の中心はCI/CDツールで、全体をコントロールすることから「オーケストレーションツール」と呼ばれることがあります。


もっともシンプルな自動化は、シェルスクリプトなどを使って手作業をバッチ処理化したものです。最初からツールをフル活用しなくても、まずは繰り返しの手作業をスクリプト化するのが自動化への第一歩といえます。スクリプトはCI/CDツールから呼び出すようにすることも、その内容をツールに移し替えることもできるので重宝するでしょう。


デプロイの自動化には、サーバー構成を自動化するAnsibleや、コンテナオーケストレーションツールのKubernetesなど、さらに個別のオーケストレーションツールが用意されているので、これらのツールを上手に活用するとよいでしょう。

「テスト」の自動化がキーポイント

自動化を推し進めていくと、その結果が適正かどうかの確認をテストの自動化で効率良くする必要があります。
テストすべき事項は多岐に渡ります。開発者が書いたソースコードが適正かどうか、ビルド後に正しく動作するか、デプロイ先の環境が正しく構築出来ているかなど、必要に応じて様々なテストツールを利用します。


また、テストは単にテストツールを使えばよいわけではなく、どのようなテストをするのか「テストケース」を書かなければなりません。テストケースが適切でなければ、実行されたテストの結果も適切ではなくなります。開発したソースコードや自動化のパイプラインのメンテナンス同様、テストケースについても継続的に改善していく必要があるでしょう。

各種ツールの紹介

ここでは代表的なツールを紹介します。

コードリポジトリ

アプリケーションのソースコードを管理するためのツールです。最近ではコードのバージョン管理ツールとしてgitが使用されることが多くなっているため、GitHubやGitLabなどのコードリポジトリがよく利用されています。

CI/CDツール

ビルドやテスト、デプロイなど、CI/CD全体をコントロールするためのツールです。オープンソースソフトウェアのJenkinsや、サービス型の提供ですがCircleCIなどが代表的なCI/CDツールです。

構成自動化ツール

アプリケーションの動作環境構築を自動化するツールです。ChefやAnsibleなどがよく利用されています。

コンテナオーケストレーションツール

デプロイ先をコンテナとするケースも増えています。KubernetesやRancherなどがよく利用されています。

テスト自動化ツール

様々なテストを自動化するツールです。JavaのコードをテストするJUnit、Web UIのテストを自動化するSelenium、構築したサーバーのテストをするServerspecなどがあります。

チャットツール

メンバー間のコミュニケーションツールとしてだけでなく、カレンダーと連携してスケジュールの通知、ビルドやテストなどCI/CDの結果を通知するためのツールなどにも利用できます。SlackやTeams、OSSではMatterMostなどが使われています。

チケット管理

開発や環境構築などのタスクを管理するためのツールです。ToDo管理としてだけでなく、進捗状況を可視化するなど様々な使い方が考えられます。Redmineが有名ですが、コードリポジトリで使用するGitHubやGitLabもIssueの機能を備えています。

 

Article02_screenshot.jpg

図2:CI/CDツールインストール画面(DevaaS 2.0)

ツール間連携

ツール間の連携は、最初から機能として用意されているもの、IFTTTのような連携ツールを利用するなど様々な方法で行うことができます。最初からすべてを連携させるのではなく、必要に応じて連携を強化していくようなやり方をするとよいでしょう。

オープンソースソフトウェアとしての魅力

多くのDevOpsを実現するツールが、オープンソースソフトウェア(OSS)として提供されています。これらのツールを活用することで、効率的なCI/CDパイプラインが構築できるので、多くの開発プロジェクトで活用されています。そして、そのノウハウがまたオープンソース開発にフィードバックされ、日々進化しています。また、利用に関するノウハウもインターネット上に蓄積、共有されています。


OSSとして提供されることで、様々な環境で利用できる点もメリットです。多くのクラウドサービスでもDevOpsを実現するためのサービスが提供されていますが、多くがそのクラウドサービスに依存しているため、ハイブリッドクラウド化する際に共用することができないデメリットがあります。

ただし、OSSは原則無保証、自己責任での利用が求められます。自分たちでOSSの活用方法について考えたり、問題発生時に自己解決することができないのであれば、コンサルティングや技術サポートなどのサービスを利用する必要があるでしょう。

 

 

■□■ コンテナとは ■□■

解説の中で何度か触れられている「コンテナ」とは一体どのようなものでしょうか。
従来はサーバーというと仮想マシンを利用することが多くなりましたが、仮想マシンは起動に時間がかかる、メモリなどのリソースを多く消費するなどのデメリットがありました。そこで、高速に起動でき、リソース消費が少ないコンテナが、Webサーバーなどを中心に利用されるようになりました。コンテナの技術的な特徴は、実体としてはプロセスであるため、仮想マシンに比べてメモリリソースの使用容量が少ないことが挙げられます。また、単純にプロセスを起動するだけなので、起動速度も高速です。
コンテナは個別のファイルシステムをイメージとして持つことができます。アプリケーションを実行するためのミドルウェアなどのインストールは、事前にインストールと設定を行った状態をイメージとして用意しておく方法と、コンテナ起動時にインストール、設定を行う方法があります。後者の場合、なんらかの自動化の仕組みを組み合わせる必要があるでしょう。また、コンテナは複数起動して並列化、冗長化などを行う必要があります。コンテナの数が増えすぎると管理が煩雑になってしまうので、Kubernetesのようなコンテナオーケストレーションツールを利用することが多くなっています。システム規模に応じて利用を検討するとよいでしょう。

 

 


(日本仮想化技術株式会社 代表取締役社長兼CEO/宮原 徹)

 

※記載されている会社名、製品名、サービス名は各社の商標または登録商標です。

関連する記事


ページトップへ

お問い合わせ

「SmartCloud」問い合わせ

資料請求・お問い合わせ

ページトップへ