「CI/CD」というキーワードをよく聞くのですが、調べてもよくわかりません。プログラマーにとってどんなメリットがあるのですか?ソフトウェアを開発するためプログラミング言語を学んでいる方にとっては、今は作ることで精一杯かもしれません。ソフトウェアが世にある工業製品(ハードウェア)と大きく違うポイントに、いつでも簡単に書き直して良くしていけるというものがあります。プログラマーという職業に就こうと考えている方に向けて、ソフトウェアと付き合っていくためのキーワード「CI/CD」について、わかりやすく説明していきたいと思います。目次CI/CDとは?CIは「継続的改善」CDは「継続的デリバリー」どんなシーンで使われているのか「アジャイル開発」との関係アジャイル開発って?CI/CDはひとりでも始められるCI/CDを実践するためのツール/サービスパイプラインって何?Jenkinsとは何か?CircleCIとは何か?CI/CDがもたらすメリットまとめCI/CDとは?よく一緒にとりあげられるCIとCD、どちらもソフトウェアの取り扱いに関して使われる用語です。プログラムを書いたら「ハイ、仕事終わり!」ではなく、時間軸に対する考え方です。Improvement”の略で、その単語の意味のまま「継続的改善」とも表現されます。出来ているソフトウェアに対して、機能を追加したり、性能を良くしたり、バグを修正したり、といった改善を継続的にやっていく、ということを意味します。反対というわけではありませんが、ソフトウェアの世界では「2年後にバージョン2を出そう」と計画をして、上にあげたような改善を期間を決めてまとめておこなうやり方もあります。Delivery”の略で、後ろの単語は訳されてないのですが「継続的デリバリー」とも表現されます。CIによって常に良くなったソフトウェアは、何らかの形で利用者に届けられなければなりません。使う人にとっては新しい機能や、バグの修正はできる限り早く届けられたほうが良いことは言うまでもありません。CIによって改善されたソフトウェアを次々と「届けること」もまた、継続的にやっていこうというのが継続的デリバリーです。どんなシーンで使われているのかイメージしやすい例として、スマホを持っていれば、みなさんもCI/CDについて利用者として体験しているはずです。インストールされているアプリに「アップデートがあります」と通知があり、ダウンロードするとインストールされ、そのアプリの改善がすぐ使えるようになります。その裏ではアプリの開発元がみなさんにできる限り早く届けようと、日々CI/CDを実践しているのです。「アジャイル開発」との関係アジャイル開発って?ソフトウェアの開発スタイルとしてよく出てくるキーワードですが、簡単に言うとソフトウェアの開発を「的確に、小さく、早く」実施するためのスタイルです。アジャイル開発では、2週間とか一定の期間を設けて、その期間内で開発内容を決めて、開発して、デリバリーするところまでやってしまいます。それを繰り返していく、という流れになります。CI/CDとアジャイル開発は密接な関係にあり、CIの中身をどのようにするか?をアジャイル開発によって進め、その成果をCDの仕組みを使ってどんどん利用者に届けていくわけです。CI/CDはひとりでも始められるここまでの話ですと、なんだか会社にでも勤めない限り体験できないように思えてしまうかもしれませんが、全くそんなことはありません。作ったソフトウェアを「オープンソース」として公開されている方々がいますよね?よっぽどの有名プログラマーが作ったソフトウェアであれば公開当初から話題にもなりますが、そうでないソフトウェアはGitHubなどのサービスで公開し、ダウンロードしてくれた人たちの意見を反映しながら使いやすくしていくことで話題になっていくのです。自分が作った便利ツールなどをGitHubに公開し、バグがあった!などの報告をもらいながら、修正してすぐにアップロードする・・・これは立派な「アジャイル開発」そして「CI/CD」になるのです。GitHubについてはこちらの記事も参考にしてください。人には聞けない?でもサクッと知りたい!という人のためのGit超入門2019年9月8日CI/CDを実践するためのツール/サービスCI/CDをやってみようと思ったとき、詳しくない方だと具体的には何をつかうんだろう?と思う方も少なくないはず。ここではCI/CD界隈で著名な「Jenkins」と「CircleCI」についてご紹介させていただきたいと思います。パイプラインって何?CI/CDをツールなりサービスを使って実践するのに理解が必要なキーワードとして「パイプライン」と表現される概念をつかんでおく必要があります。簡単に言ってしまうと、CIした成果物をCDして利用者に届けるまでの作業の流れについて、その実行を含めて定義したもの、となります。わかりにくいですかね・・・そうですよね。次のような一連の処理をパイプラインとして定義するのです。GitHubから最新版のプログラムソースを取得する取得したソースをコンパイルするコンパイルした結果を各OSで実行できる形式に変換するテストするため、専用の環境にアプリケーションをインストールするテストプログラムを実行するコンパイル、テストの結果をグラフ化して関係者にメールを送信する(チャットに書き込みでもよい)このような「パイプライン」を定義して実行することで、CIされた結果がCDされるまでを自動的に実行することができます。Jenkinsとは何か?JenkinsはオープンソースのCI/CDを実現するツールです。自分の手元にあるLinuxサーバなどにインストールして構築できるため、会社内などネットワーク接続に制約がある場合でも導入がしやすい面があります。パイプラインの定義はJenkinsのマニュアルなどを見て、Jenkinsが公開している仕様に則って定義する必要があります。仮にコンパイルなどの処理に非常に膨大な能力が必要な場合、そのコンパイル作業をたくさんの仮想マシンなどに分散して依頼する必要がある場合も考えられます。いった資源の管理も含めて運用する必要があるので、企業内にはJenkinsのアイコンのように「Jenkinsおじさん」と呼ばれるエキスパートエンジニアが必要となる状況もあります。自由にカスタマイズしたい、ネットワーク的に社内に閉じて作業したい、といった場合に使われるケースが多いです。CircleCIとは何か?CircleCIはJenkinsサーバを自分で構築するのとは違い、専用アカウントを作ってパイプラインを実行する環境が使える「サービス」になります。プランに無償のプランと有償のプランがありますが、Jenkinsの場合と違って、購入したサービスに応じたコンピューター資源を割り当ててパイプラインを実行してくれます。(無償プランだと1つのコンテナでパイプラインを処理させる)インターネット越しに使えるサービスなので、処理能力が必要であれば追加することもできますし、パイプラインを実行する環境も含めて仮想マシンの心配などをする必要がありません。実際のパイプライン処理はCircleCIが持っているシステムで実行されるため、プログラムソースを持ってくる処理などについてはCircleCIが対応している必要がでてきます。その条件が自分にマッチしている場合は良いですが、サポートされていない環境にプログラムソースを置いていたりすると使えないケースも出てくるリスクはあります。CI/CDする対象のプログラムが比較的小さいものだったり、それほど頻繁に更新されないものであれば無料プランにおさまる可能性が高いので、インターネットサービスを使うことに制約がなければ最初に検討してみてもよいと思います。CI/CDがもたらすメリット今のご時世だと、企業が提供するスマホアプリなどの更新もどんどんされて当たり前なイメージがありますが、これはオープンソースが作った流れに追従する形になっています。いうのも、企業としては小さな修正だとしてもそこには開発費がかかっていて、本心からすれば決してタダで提供したいわけではないのです。そのため、企業が提供するソフトウェアは「2年後までにバージョン2を開発して新規に売る、またはバージョンアップパッケージを作って売る」というスタイルが主流だったのです。使い続けていたのにあるバージョンでピッタリ更新が止まって・・・なんていう悲劇もありました。オープンソースがバグのやり取りも含めて全てをオープンにしてどんどん改善していく流れの中、利用者にとって「本当によいソフトウェアとはなんだろう?」と考えたとき、たとえ有償のソフトウェアであってもCI/CDによって改善されていくべきだ、となってきているのです。当たり前といってしまえばそれまでなんですが、ソフトウェアの利用者が常にハッピーになる、それがCI/CDの最大のメリットです。まとめCI/CDが大きなメリットになるなら、プログラマーというお仕事は「作って終わり」というわけではなく「作ってからが始まり」と考えていただけると良いと思います。経験者としての立場で言わせていただくと、CI/CDを実践し続けることがプログラマーとしての成長を促すといっても過言ではないと思っています。利用者が本当に望むものを「理解して、作って、届けられる」そんなプログラマーが一人でも多く世の中で活躍してくれることを願って、この記事がそのきっかけとなれば幸いです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。関連記事は見つかりませんでした。編集部員(プログラマー)現役プログラマーの編集部員です。このブログは複数の編集部員によって運営されています。おすすめの勉強法は?未経験からプログラマーに就職2020.2.18『今』プログラミング学習をおすすめする3つの理由JavaScript2020.2.11【初心者向け】TypeScriptって何?JavaScriptと何が違うの?職業訓練校2020.2.9未経験者が職業訓練でJAVAを学ぶプロフィールごま塩シンジ(編集長)30代後半、未経験からweb系企業に就職しました。底辺高校→Fランク大学→営業→PHPエンジニア→フリーランス※当サイトはリンクフリーです※当サイトは複数のプログラマーによって運営されています※広告募集中です。ご希望の方はお問い合わせからご連絡ください。最近のコメント初心者におすすめのプログラミング言語は何か。初心者におすすめのプログラミング言語は何か。初心者におすすめのプログラミング言語は何か。