
Workwear Group Drives Innovation and Cuts Costs by 30% with Streamlit and Generative AI
オーストラリアの小売企業であるWorkwear Groupは、Snowflakeを活用してコスト削減と生産性の向上を実現し、AI導入に向けた強固な基盤を築きました。
Data for Breakfast Tokyo | 3月17日(火)開催
データとエージェント型 AI を活用してビジネスインパクトを創出するには?
文化哲学であり、ソフトウェア開発ライフサイクルの短縮を目指すベストプラクティスであり、またツールキットでもあるDevOpsは、高品質で継続的なソフトウェアデリバリを実現するための一般的なアプローチを表しています。DevOpsという言葉は、開発(Development)と運用(Operations)を組み合わせた造語で、従来の環境よりも両者が緊密に連携する新しい取り組み方を定義しています。このアプローチにより、アプリケーションやサービスを迅速に提供しつつ、展開後の長期的な安定性を向上させることができます。
この記事では、DevOpsの仕組みの詳細、そして組織にもたらすさまざまな利点について解説します。
DevOpsは、ソフトウェア開発プロセスへのアプローチ方法と、開発と運用を共通の枠組みの下で機能的に統合するために必要なツールを組み合わせたものです。この取り組みは2007年頃に始まり、「DevOps」という言葉自体は2009年に生まれました。開発者がコードを次々とリリースし、運用チームが不本意ながらそれをサポートするという、対立的な構造の改善を目的として考案されました。DevOpsは、これらの役割を一つの継続的なプロセスに統合することで、開発と運用の協調を促進し、製品品質と顧客満足度の向上を目指しています。
DevOpsは、アプリケーションのライフサイクル全体を通じて、開発チームと運用チームの業務を統合および自動化します。DevOpsチームは一体となって連携し、ソフトウェアを予定どおりにリリースするだけでなく、長期的に運用可能な状態を維持できるよう協力します。継続的統合と継続的デリバリの原則を通じて、ソフトウェアのライフサイクルは常に自己フィードバックを行う循環ループとなります。DevOpsのライフサイクルについて詳しくは、このページの後半でご説明します。
DevOpsの導入によって得られる多くのメリットの中でも、特に注目すべきものは次のとおりです。
DevOps導入のメリットの中で、最もわかりやすいのは、開発サイクルの速度の向上です。開発と運用がサイロ化されていないため、同じチームがソフトウェアの展開までを一貫して対応でき、時間の無駄が減ります。また、継続的なデリバリにより、長期的な遅延を発生させることなく、更新を迅速かつ定期的に行えるようになります。
運用チームが開発プロセスの初期段階から開発者と連携することで、問題を早期に発見し、解消できます。前述のとおり、継続的統合と継続的デリバリの原則により、チームは長期的な問題をすばやく特定し、新機能を効率的にロールアウトすることが可能になります。
DevOpsの目的の一つは、分断された開発チームと運用チームの対立的な構造を和らげることです。責任を共有することで、チームは一体となって行動できるようになり、全体の士気が高まって、より良い職場環境が生まれます。チームの満足度が向上するだけでなく、効率性も向上します。
セキュリティはDevOpsの中核を成す要素であり、セキュリティを開発と運用の両チームに組み込んで橋渡しするDevSecOpsという派生形も登場しています。綿密に作成されたDevOpsポリシーにより、チームはコンプライアンス、認証、構成管理を初期段階から実稼働のプロセスに統合できます。
DevOpsのライフサイクルは通常、6~8つのフェーズに分かれており、互いにフィードバックし合いながら、途切れることのないループを形成しています。その流れは次のとおりです。
従来のソフトウェア開発と同様に、このフェーズでは開発するソフトウェアに対する戦略的なアイデアやアプローチを考案します。ただし、DevOpsではソフトウェア開発者だけでなく運用チームもこのプロセスに関与します。この連携によって、より創造的で革新的なプロダクトが生み出されます。
反復的なアプローチを用いて、DevOpsチームのメンバーは大規模なプロジェクトを小さな単位に分割します。そして、プロジェクト管理ソフトウェアを使用し、開発の進め方を計画して、予算内かつ期限内にプロジェクトを完了できるようにします。
手間のかかる作業のフェーズです。コードは、最初から信頼性、セキュリティ、スケーラビリティを念頭に置いて記述されます。継続的統合により、複数の開発者が同時に同じプロジェクトに取り組むことができ、DevOpsの開発サイクルの構築フェーズは、通常、非常に短期間で完了します。
これは継続的統合のもう一つの側面であり、開発者がコードをリリースするたびに自動化されたテストが実施されます。テストが開発サイクルの途中で行われるため、完成したアプリケーションは従来の開発手法と比べて、より信頼性が高くなります。
継続的統合のもう一方の側面が、継続的な展開です。このプロセスでは、ソフトウェアを一度リリースして終わりにするのではなく、DevOpsチームが安定したペースで、新機能をアプリケーションへ反映していきます。このアプローチは、身近なモバイルアプリが頻繁にアップデートされることからも見て取れます。
このフェーズでは、運用チームが中心となって活動します。チームは、アプリケーションを支えるITインフラストラクチャを維持するために必要なツールを活用し、問題やバグが発生した際には迅速に検知しながら、アプリケーションが利用可能で、想定どおりに動作していることを確認します。
DevOpsのもう一つの中核的な原則は、継続的なフィードバックです。DevOpsチームは常にアプリケーションのパフォーマンスをモニタリングし、想定した稼働率で、期待どおりに稼働していることを確認します。リリースごとに、アプリケーションのパフォーマンスに関するメトリクスを収集し、その情報を次のプロセス改善に活かします。こうしてチームは再び発見のフェーズに戻り、新たなサイクルを開始します。
DevOpsのライフサイクルが示すように、DevOpsは本質的には文化的な転換であり、単なるツールのセットではありません。以下に、実際に機能するDevOps文化を定義するコアバリューをご紹介します。
サイロ化が解消することで、問題の発生時に責任の所在を押し付け合うといったことがはるかに少なくなります。開発チームと運用チームは、すべてのリリースにおける成功と失敗の両方を共有します。
開発と運用を別々のフェーズとして分けるのではなく、DevOpsでは小さな変更や更新を絶えずリリースしていく、継続的な改善の重要性が強調されます。
前述のとおり、DevOpsチームは間違いを責める文化を徹底して排除します。発生したインシデントを、誤りを犯した人を罰する理由ではなく、学びと成長の機会として捉えます。
適切な合意形成と明確な計画があれば、どんなソフトウェアチームでもDevOpsを導入することができます。ここでは、成果を上げているDevOpsチームが採用しているベストプラクティスをいくつかご紹介します。
すべては文化の醸成から始まります。これまで分断されていたチームは、互いに協力し合い、ソフトウェアプロジェクトの始まりから終わりまでアカウンタビリティを持つことを学ぶ必要があります。そのために、多くの新しいDevOps環境では、開発チームと運用チームを物理的に隣接して配置します。
継続的統合と継続的デリバリはパイプラインで管理されます。パイプラインは、自動化されたシステムであり、チームがアプリケーションをより迅速に構築、テスト、展開するよう支援します。適切に設計されたCI/CDパイプラインは、デリバリ速度と製品品質を向上させます。
自動化は、DevOpsの速度を支える重要な要素です。CI/CDパイプラインは、自動化を活用し、リリース後の作業も含め、ソフトウェアリリース全体のオーケストレーションを行います。価値の低い手作業を自動化することで、開発者はより創造的な開発作業に集中でき、運用チームは実稼働環境でより戦略的な役割を担うことができます。
モニタリングは、アプリケーションのリリース後だけに行うものではありません。チームは改善点を見つけるために、開発ライフサイクル全体を通してモニタリングを行います。モニタリングと状況認識により、パフォーマンスが低下し始めた際や、製品の最新リリースに対して顧客の不満が高まった際に、迅速に対応することができます。また、多くのDevOpsツールでは、アプリケーションが想定どおりに動作しない場合に、すぐにロールバックを実行できるようになっています。
DevOpsは「働き方」(そして「生き方」)のアプローチでもありますが、DevOpsライフサイクルのあらゆる段階でツールによって支えられています。主なツールは以下のとおりです。
Git、Bitbucket、Azure Reposなどのツールは、DevOpsチームがソフトウェア開発ライフサイクル全体を通じて、バージョン管理と変更追跡を行えるよう支援します。
JenkinsやCircleCIなどのツールを利用することで、DevOpsチームは継続的統合を実践できます。また、Spinnakerのようなソリューションを使えば、継続的デリバリや展開を実現できます。これらのツールにより、開発者が提供するコード変更をシームレスに統合し、新しいコードリリースを本番環境に迅速にロールアウトすることが可能になります。
DockerやKubernetesは、アプリケーションとその依存関係をパッケージ化し、展開するために最も広く使用されているツールです(これらの整理された単位はコンテナと呼ばれます)。Kubernetesは、負荷分散やその他の複雑な機能を含め、コンテナのリリースおよびスケーリングの方法を自動化する、DevOpsの基盤となるツールです。
Ansible、Puppet、Chefは、さまざまな環境でソフトウェアの構成方法を管理するために一般的に使用されるツールであり、一貫性の向上と合理化された展開を実現します。
Dynatrace、Prometheus、Lokiなどのツールは、アプリケーションが本番環境に展開された後も、その動作状況や発生しているエラーをチームがモニタリングできるよう支援します。
エンタープライズレベルでAIのイニシアチブを成功させるには、スケーラブルでセキュアかつ統合されたインフラストラクチャが不可欠です。柔軟なテクノロジープラットフォームを強固なセキュリティ対策と合理化されたワークフローと組み合わせることで、組織は迅速な実験、合理化されたモデルの展開、効果的なモデル管理を実現できます。そしてこれが最終的に、イノベーションの推進、運用効率の向上、コンプライアンスの維持につながります。
継続的な統合と継続的なデリバリが、DevOpsにおける最も基礎的な開発手法を定義します。これに加えて、DevOpsの主要な原則を反映する手法として、次のようなものがあります。
Infrastructure as Codeの活用。この手法では、ITインフラストラクチャが、手作業による構成ではなく、コード化されたデータを使用してプロビジョニングされます。これにより、ソフトウェアのホスティング方法をプログラムでエンコードでき、品質と一貫性を高められます。
マイクロサービスの活用。この手法では、大規模なアプリケーションが、コンテナ化して個別に開発できる、小さく緩やかに結合されたサービスに分割されます。
構成管理の活用。この手法では、自動化ツールを使用して、サーバーのパラメータが適切であり、すべてのマシン間で一貫していることを確認します。
アジャイルは、スプリントと呼ばれる短期間に集中してチームが協働することを求める開発哲学です。DevOpsとアジャイルは補完的な関係にあり、多くのDevOpsチームがコーディングのプロセスでアジャイル手法も取り入れています。両者の違いは、アジャイルが開発段階に焦点を当てているのに対し、DevOpsはその考え方をソフトウェアの実稼働のためのライフサイクル全体に拡張している点にあります。
すべてのDevOpsロールで高度なコーディング知識が求められるわけではありませんが、ほとんどのDevOps担当者はコードの記述に慣れています。チームにおけるAIツールの活用が進むことで、より経験の浅い人材にもDevOpsチームでの活躍の機会が広がっています。とはいえ、DevOps環境において、優れたコーディング原則に関する知識と経験を有していることは重要です。
マンスリーニュースレターを購読する
Snowflakeの製品に関する最新情報、専門家の知見、役立つリソースを直接お届けします。
プロダクト
サポート