初心者プログラマーも知っておくべき?CI/CDのススメ

初心者
「CI/CD」というキーワードをよく聞くのですが、調べてもよくわかりません。プログラマーにとってどんなメリットがあるのですか?

ソフトウェアを開発するためプログラミング言語を学んでいる方にとっては、今は作ることで精一杯かもしれません。でも、ソフトウェアが世にある工業製品(ハードウェア)と大きく違うポイントに、いつでも簡単に書き直して良くしていけるというものがあります。

プログラマーという職業に就こうと考えている方に向けて、ソフトウェアと付き合っていくためのキーワード「CI/CD」について、わかりやすく説明していきたいと思います。

CI/CDとは?


よく一緒にとりあげられるCIとCD、どちらもソフトウェアの取り扱いに関して使われる用語です。プログラムを書いたら「ハイ、仕事終わり!」ではなく、時間軸に対する考え方です。

CIは「継続的改善」


CIは”Continuous Improvement”の略で、その単語の意味のまま「継続的改善」とも表現されます。

出来ているソフトウェアに対して、機能を追加したり、性能を良くしたり、バグを修正したり、といった改善を継続的にやっていく、ということを意味します。

反対というわけではありませんが、ソフトウェアの世界では「2年後にバージョン2を出そう」と計画をして、上にあげたような改善を期間を決めてまとめておこなうやり方もあります。

CDは「継続的デリバリー」


CDは”Continuous 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して利用者に届けるまでの作業の流れについて、その実行を含めて定義したもの、となります。わかりにくいですかね・・・そうですよね。例えば次のような一連の処理をパイプラインとして定義するのです。

  1. GitHubから最新版のプログラムソースを取得する
  2. 取得したソースをコンパイルする
  3. コンパイルした結果を各OSで実行できる形式に変換する
  4. テストするため、専用の環境にアプリケーションをインストールする
  5. テストプログラムを実行する
  6. コンパイル、テストの結果をグラフ化して関係者にメールを送信する(チャットに書き込みでもよい)

このような「パイプライン」を定義して実行することで、CIされた結果がCDされるまでを自動的に実行することができます。

Jenkinsとは何か?


JenkinsはオープンソースのCI/CDを実現するツールです。自分の手元にあるLinuxサーバなどにインストールして構築できるため、会社内などネットワーク接続に制約がある場合でも導入がしやすい面があります。パイプラインの定義はJenkinsのマニュアルなどを見て、Jenkinsが公開している仕様に則って定義する必要があります。

仮にコンパイルなどの処理に非常に膨大な能力が必要な場合、そのコンパイル作業をたくさんの仮想マシンなどに分散して依頼する必要がある場合も考えられます。そういった資源の管理も含めて運用する必要があるので、企業内にはJenkinsのアイコンのように「Jenkinsおじさん」と呼ばれるエキスパートエンジニアが必要となる状況もあります。

つまり、自由にカスタマイズしたい、ネットワーク的に社内に閉じて作業したい、といった場合に使われるケースが多いです。

CircleCIとは何か?


CircleCIはJenkinsサーバを自分で構築するのとは違い、専用アカウントを作ってパイプラインを実行する環境が使える「サービス」になります。

プランに無償のプランと有償のプランがありますが、Jenkinsの場合と違って、購入したサービスに応じたコンピューター資源を割り当ててパイプラインを実行してくれます。(無償プランだと1つのコンテナでパイプラインを処理させる)

インターネット越しに使えるサービスなので、処理能力が必要であれば追加することもできますし、パイプラインを実行する環境も含めて仮想マシンの心配などをする必要がありません。

ただ、実際のパイプライン処理はCircleCIが持っているシステムで実行されるため、プログラムソースを持ってくる処理などについてはCircleCIが対応している必要がでてきます。その条件が自分にマッチしている場合は良いですが、サポートされていない環境にプログラムソースを置いていたりすると使えないケースも出てくるリスクはあります。

CI/CDする対象のプログラムが比較的小さいものだったり、それほど頻繁に更新されないものであれば無料プランにおさまる可能性が高いので、インターネットサービスを使うことに制約がなければ最初に検討してみてもよいと思います。

同様のサービスにTravis CIなどもあります。

CI/CDがもたらすメリット


今のご時世だと、企業が提供するスマホアプリなどの更新もどんどんされて当たり前なイメージがありますが、これはオープンソースが作った流れに追従する形になっています。

というのも、企業としては小さな修正だとしてもそこには開発費がかかっていて、本心からすれば決してタダで提供したいわけではないのです。そのため、企業が提供するソフトウェアは「2年後までにバージョン2を開発して新規に売る、またはバージョンアップパッケージを作って売る」というスタイルが主流だったのです。使い続けていたのにあるバージョンでピッタリ更新が止まって・・・なんていう悲劇もありました。

でもオープンソースがバグのやり取りも含めて全てをオープンにしてどんどん改善していく流れの中、利用者にとって「本当によいソフトウェアとはなんだろう?」と考えたとき、たとえ有償のソフトウェアであってもCI/CDによって改善されていくべきだ、となってきているのです。

当たり前といってしまえばそれまでなんですが、ソフトウェアの利用者が常にハッピーになる、それがCI/CDの最大のメリットです。

まとめ


CI/CDが大きなメリットになるなら、プログラマーというお仕事は「作って終わり」というわけではなく「作ってからが始まり」と考えていただけると良いと思います。経験者としての立場で言わせていただくと、CI/CDを実践し続けることがプログラマーとしての成長を促すといっても過言ではないと思っています。

利用者が本当に望むものを「理解して、作って、届けられる」そんなプログラマーが一人でも多く世の中で活躍してくれることを願って、この記事がそのきっかけとなれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA