CI/CDで半自動化する

CI/CDとはデプロイなどを自動化し、継続的に開発する方法です。CI(Continuous Integration)は継続的インテグレーション(一体化)で、CD(Continuous Delivery)は継続的デリバリー(配送)の略で、この2つを合わせて「CI/CD」と呼ばれています。

CI/CDは属人化を無くせミスが防げる

属人化すると業務がブラックボックス(隠ぺい)化され、ワンオペという1人任せになり、1人の誤認や操作ミスで大きな損害が生じます。また病欠や退職などで引き継ぎもできません。

ちなみにGo言語やNestJSなども、個別によりソースコードが異なる属人化を防ぎ、大規模システムでは有効な手段です。

CI/CDの流れ

開発したソースをGitHubなどのGit(バージョン管理ツール)にコミット(送信)すると、CIにより自動的に「エラーが無いか?」などのテストをします。

CIによるテストがパス(通過)後、次はCDによってreleaseブランチにマージ(吸収)され、ビルド(組み立て)が行われます。なおUnixのやWindowsのコマンドも移動はcd(カレントディレクトリ)で、現在のフォルダ(を移動)という意味です。

CDによりビルドされたアプリ(アプリケーション)は、自動でテスト用サーバーにデリバリー(配送)され、動作確認ができます。これを継続的デリバリーと呼ばれています。

CDepで全自動化する

継続的デリバリーされたアプリを、次は本番環境にデプロイするかは人間が決めます。方や本番環境へデプロイまで自動的に行うのを継続的デプロイと呼ばれ、上記とは区別されています。

デプロイという用語は自動化しなくても覚えた方が良い

CDep(Continuous Deployment)とは継続的デプロイの略で、デプロイとは直訳では設置ですが、実際は公開となります。デプロイという言葉は従来とは違う最新技術なモダン言語が普及した最近では、特に多く使われてる用語です。

現在のWebアプリケーション運用は情報量が多いので自動化が必要

昔のデプロイはソフトウエア開発のみで使用され、Webサイト作成では使われませんでしたが、今のWebサイトはソフトウエア開発レベルな難易度に上がってきているので、昔使っていたソフトウエア開発の専門用語が使われています。また昔のWebサイト作成は、取り扱う情報量が少なかったので、自動化も少なかったですが、近年は必要になりました。

更に昔のソフトウエア開発もフレームワークなどを使わない、白紙からソースをコーディング(文字打ちを)するという手作業では追いつかないのが現代です。そこで迅速に自動化するためにモダン(最新技術の)言語なGo言語やフレームワークなどの、既に出来上がったテンプレートを使い、自動化するシステムを構築するいうことになります。

CDepは使用するかしないか選択する

人間が決める手動の方が、静的型付け言語のように正確だと思う専門家もいます。1998年頃でしたらHTMLを手打ちでなくホームページ作成ソフトで作ると、社内イントラに合わないこともありました。ただしこれは属人化や人的コストは減らせます。まず選択やシステムを構築する前の、調査・観察力が大事です。

CI/CDパイプラインの総合的システム管理は重要

上記の一連の流れは『新機能をコミット→テスト→ビルド→テスト環境にデプロイ→動作確認→本番リリースまでも自動で実行』となります。このCI/CDとCDepの(石油の配送経路な)パイプラインの企画・調査・分析・設計・構築・試用・保守は重要です。

また保守である不定期的な監視やメンテナンスも必要です。なぜなら定期的という時間帯などを決めてしまうと、それ以外の時間帯で事故を起こすかもしれないからです。これらの全て工程管理を私の造語ですが「総合的システム管理」とし、パイプライン以外でも多くのシステムで必要です。例えば従来の多くの常時稼働サーバーなども、自動的にバックアップを取るので、CI/CDパイプラインな総合的システム管理を導入するべきです。

CI/CDパイプライン構築ツールは色々ある

CI/CDパイプラインは、市販・OSSのツールやWeb付属サービスを利用が一般的です。CI/CDツールは、オンプレミス(顧客担当者が自社内で管理できる)でも実行可能な「Jenkins」や、SaaSの「CircleCI」や「Travis CI」などがあります。またDevOps支援の一体型ツールも増えています。

DevOpsで他部署などと共有化する

DevOps(DevelopmentOperations)とは開発と運用を組み合わせた造語で、開発者と運用者が連携し、柔軟で迅速な開発をします。

例えば開発者とはプログラマーで、運用者はサポートセンターの電話受付・入力者だとします。ここで両者ともお互いの実務を知らないという、大きな文化の違いがあります。

ここからしてDevOpsは単純にツールを使う方法ではなく、共通認識の理解なども含まれているのです。これは開発者と運用者がコミュニケーションをはかったり、スポーツのダブルスを組み、分析するような試作をしても良いでしょう。

DevOpsの代表的な開発手法はCI/CDとCDep

特に運用者は技術を知りませんので、CI/CDとCDepで自動化することにより、入力エラーなどを防ぐことができます。