継続的データ連携とは?

継続的データ連携 (CI) とは、開発においてコードを単一のコードリポジトリへ自動的にデータ連携することです。

CI がなければ、開発者は最終製品に対する個々のコードの貢献を手動で調整、周知しなければなりません。非 CI 環境では、煩雑かつ余計な手続きと複雑な同期が欠かせなくなり、必要以上に複雑な状況が発生します。

よく起こるのは、エンジニアリングチームとその他の部署の間、特にエンジニアリングチームと製品チームの間でのコミュニケーションの断絶です。新たな変更が単一のリポジトリなど 1 か所に保存されておらず、多くの時間と労力をかけてデータ連携しているために、開発から製品ローンチまでの期間の大部分が不透明になってしまうのです。

継続的データ連携のさまざまな要素を表す図。

これら 3 つはいずれも、DevOps プロセスを含むソフトウェアリリースサイクルに不可欠の部分です。

継続的データ連携 (CI)

一般的なルールとして、CI はアジャイルソフトウェア開発と併用され、複数のタスクをリストや製品ロードマップにまとめるのに役立ちます。概要が出来上がったら、タスクはさまざまなチームメンバーに割り当てられて、コードになります。そして複数のコードが 1 つのマスターコードリポジトリに結合されます。

継続的デリバリー (CD)

CD はプロセスの第 2 フェーズです。コードを 1 つにパッケージングし、エンドユーザーに配布できるようにします。このステップは、通常アーティファクトを生成する自動ツールで実行され、いつでもエンドユーザーに展開できる状態にします。

継続的デプロイ

プロセスの最終フェーズである継続的デプロイは、エンドユーザーにソフトウェア製品を自動的にローンチします。つまり、データ連携とデリバリーを正常に通過したことを意味します。自動化には、ソフトウェア製品を公共サーバーまたはその他の公共配布手段に転送するスクリプトやツールを利用します。高度に自動化され、適切に管理されている環境では、製品がデリバリーされ次第、デプロイが自動的に行われます (このため、「継続的」なのです)。チームや製品によっては、特定の時期または他のプロセスが完了した後にデプロイが行われることもあります。

スケーリング

コーディングにおける煩雑な手続きを最小限に抑えることで、新しいコードの開発からサイクルの最後まで、DevOps とアジャイルワークフローを効果的かつスムーズに機能させることができます。また、CI によって、個々の機能の開発の障害になる依存関係を削除するタイミングでスケールすることができます。開発者が独りで作業するとしても、自分のコードがコードリポジトリの残りにデータ連携されることを知った上で作業できます。

フィードバックループの改善

ビジネス判断のフィードバックを速やかに受け取ることができます。これにより、製品チームがアイデアをテストし、反復型の製品設計により効果的に取り組むことができます。測定可能な変更を短時間で、かつ、問題を起こさずに行うことができ、バグを迅速に解決、修正できます。

コミュニケーションの改善

エンジニアリングチームのコミュニケーションが改善し、エンジニアリングチームに責任が課されるため、DevOps チーム内のコミュニケーションも改善します。他のチームのメンバーが書いたコードを見たり、コメントしたりできるようになり、今後のコーディングで他の開発者と協力することも可能になります。

バージョンコントロール

コードは、apache subversion や git などのバージョン管理ソフトウェアを通じて実行されます。ソフトウェアコードのコミット履歴がコミットされるため、必要に応じて変更できます。

ビルド

開発者がコードを書き足すと、コードはバージョン履歴システムを通り、その後コンパイルするためにビルドフェーズに戻されます。

テストとステージング

ソフトウェアは、ソフトウェアを単体でテストする単体テストなどのテストを受けます。ステージングフェーズはテストの合格後に始まり、ステージングプロセスにデプロイされる準備が整っていることを意味します。ここで、最終テストフェーズの前にコードがレビューされ、確定します。

自動テスト

ステージング環境にデプロイされたソフトウェアは、あらかじめ用意されている専用の自動テストを受けます。ソフトウェアが自動テストに合格すると、デプロイフェーズに送られます。

デプロイ

自動テストの実施後、ソフトウェアは本番環境にデプロイされます。テストフェーズやその後の展開でエラーがあった場合、ソフトウェアはバージョン管理手順に戻され、エラーが調査されます。エラーが特定されると、修正されます。

リポジトリの維持

プロジェクトのビルドに必要な各アーティファクトは、中央コードリポジトリに配置します。複数のバージョンを同時に維持するのではなく、変更をデータ連携して維持できます。

ビルドの自動化

データ連携を自動化して本番のような環境にデプロイするような、システム全体をビルドできる単一のコマンドがあれば理想的です。スクリプトがバイナリをコンパイルするときに、Web ページ、配布媒体、統計、Web サイトページが生成されるようなケースはたくさんあります。

ビルドの自己テスト化

期待通りに動作することを確認するため各種のテストを実行する必要があります。

全員が定期的にコミット

全員が定期的にコミットしていれば、変更が競合する可能性は飛躍的に低くなります。毎日コミットすることで、開発者はコードから問題や必要な変更を特定し、その時点で変更を知らせることができます。1 週間分の仕事を溜め込むと問題が捕捉されなかったり、量に圧倒されたりする可能性があります。毎日のコミットが必要なのはこのためです。

コミットのたびにビルド

コミットは現在の作業バージョンにビルドし、正しく動作することを確認する必要があります。通常は自動継続的データ連携 (ACI) が用いられますが、手動で行われることもあります。ACI では、デーモンを使用して、リビジョン管理システムで行われる変更を監視し、ビルドプロセスを自動的に実行します。

常に迅速にビルド

データ連携の問題を防止し、問題が発生しても速やかに特定できるように、各ビルドはできるだけ迅速に実行する必要があります。

テスト用に本番環境を複製

テスト環境を本番環境に展開した場合、テストするシステムに障害が発生することがあります。本番環境の複製をセットアップすることで、本番環境をテスト環境から隔離して障害を防止できます。独立したステージング環境は、テクノロジースタック構成を維持し、コストを軽減するスケーラブルなバージョンである必要があります。

最新の成果物を簡単に取得できるようにする

ステークホルダーとテスターは確認作業を必要とするかもしれません。そこで、機能の再ビルドが必要な場合に、必要な修正や変更を減らすため、ビルドをいつでも取得できるようにしておくことがベストです。テストを早目に実施することで、エラーがプロセスの終盤まで持ち越される事態も防げます。

チームの全員が結果を確認できる

ビルドが壊れても簡単に見つかります。CI では、加えられた変更や変更を加えたチームメンバーを特定できるので、透明性と生産性が向上します。

ビルド展開の自動化

ビルドが完了した後でも、ほとんどの CI システムはスクリプトを実行します。誰でも見ることができるライブテストサーバーにアプリケーションを展開するためのスクリプトを書くこともできます。CI は、退化や欠陥を防止する自動化を加えた上で、本番環境に展開するソフトウェアを呼び出します。

テスト主導の開発

プロジェクトが CI パイプラインで確立されたら、定期的にテスト範囲を開発/改善することをお勧めします。CI パイプラインに組み込まれる各新機能には、新しいコードが期待通りに動作することを検証するテストが付随している必要があります。

プルリクエストとコード

プルリクエストは CI に欠かせません。ほとんどのソフトウェア開発者は、プルリクエストとコードレビュープロセスを実施しています。プルリクエストは、自動承認のステップを通過するための CI パイプラインを開始する優れた機会です。プルリクエストの際に手動承認も追加されます。これにより、ステークホルダー以外がコードレビューを実施でき、編集を特定したりプルリクエストを承認/拒否したりする機会を得られます。

パイプライン速度の最適化

CI パイプラインは一般的に使用されるプロセスなので、その実行速度を最適化することは極めて重要です。ワークフローの遅延は、機能のリリース、コードベースサイズ、チーム規模の拡大時に問題を悪化させる可能性があります。CI パイプラインが最適化されていることを確認するため、定期的に測定します。

CI パイプラインが高速なら CI フィードバックループも速くなります。開発者は、変更をプッシュしてユーザーエクスペリエンスを実験し、迅速にバグを修正し、実行速度を上げて競争に勝ち、全体的な品質を上げる機会を得られます。

ServiceNow プラットフォームでアプリを構築するときに CI/CD を活用できます。CI/CD ツールを ServiceNow の DevOps 製品に接続して、CI/CD パイプラインを通過する成果物を ServiceNow で管理されている成果物にリンクすることもできます。ServiceNow DevOps 製品は、使用する開発プラットフォーム (ServiceNow、Azure DevOps、GitLab、Jenkins など) にかかわらず、CI/CD プロセスに多くのメリットServiceNowをもたらします。

コラボレーションの改善

Git repo データ連携を使用するときの複数の開発者のコード変更を効率的に管理し、ユーザーストーリーや repo のコミットなどの成果物同士を接続できます。ServiceNow でコミットをテスト結果や変更に接続できることで、パイプラインの完全なエンドツーエンドの可視化が実現します。

DevOps の簡素化

変更作成、承認、展開を自動化し、開発からテストを通過して本番環境に移動するまでを迅速かつ効率的に行います。

開発を迅速化

アプリケーションを迅速にデリバリーし、チームがフィードバックに基づいて、早期かつ頻繁に反復できるようにします。

バリューストリームの管理

商品企画から生産までのパイプライン全体、バリューストリームについて報告します。チーム全体に伝達し、さまざまなツールのパフォーマンスを比較し、ボトルネックを特定・解決します。

ビジネスに合わせて機能を拡張

企業全体で DevOps を有効活用できます。高速化によるリスクを取り除き、IT の運用と開発の間の摩擦を最小限に抑えます。

リソース