100日後にエンジニアになるキミ - 90日目 - 開発 - CIについて

昨日までのはこちら

[100日後にエンジニアになるキミ - 88日目 - データ - データ転送について](https://qiita.com/otupy/items/e720e175c83a84e101c9)

[100日後にエンジニアになるキミ - 86日目 - データベース - Hadoopについて](https://qiita.com/otupy/items/0016a1b9f496627619b6)

[100日後にエンジニアになるキミ - 76日目 - プログラミング - 機械学習について](https://qiita.com/otupy/items/6a4f960ba4df06e27050)

[100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて](https://qiita.com/otupy/items/f53e2e7d16adf80b5acf)

[100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について](https://qiita.com/otupy/items/5828ac7450c5ba8d6931)

[100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1](https://qiita.com/otupy/items/0196897ae4d2134794fa)

[100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて](https://qiita.com/otupy/items/f1a5e81633b868f3b5ed)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

本日はにCIについてです。

## CIについて

`CI`とは`Continuous Integration`の略で、継続的インテグレーションと呼ばれています。

`CI`では開発者がコード変更をリポジトリにマージし、その度に自動化されたビルドとテストを実行します。
これによりチームはソフトウェアをより迅速に開発できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/b6d2cf91-3420-92ca-ba54-f21861942a5f.png)

参考：https://cloudbees.techmatrix.jp/devops/ci/

### ビルドについて

`ビルド(build)`とはソフトウェアのソースコードを用いて
実際に稼働するプログラムを作成することです。

ソースコードから実際のプログラムを作る際には、いろいろな作業が必要です。

この「いろいろな作業」を含めて「プログラムの元から実際のプログラムを作る作業」
がビルドになります。

プログラム自体は1つのファイルから出来ているわけではありません。
複数のファイル群をつなぎ合わせて1つのプログラムとなることがほとんどです。

そういったファイル同士のリンクや、ソースコードからのコンパイルを含めた
実行ファイルの作成を行います。

ビルドには数分から数時間を要する場合がありますが
手作業でやっていては時間が足りなくなるケースもあるため
ビルドを自動化するツールも増えてきています。

### デプロイについて

`ソフトウェアデプロイメント(Software deployment)`の略のようです。
デプロイメント（Deployment）とは「展開、配備、配置」という意味になります。

一般的にはビルドして出来上がった実行ファイル群をサーバーなどに配置して
実行できるようにすることを指します。

### CIツールについて

CIツールは一連のビルド作業、デプロイ作業などを自動化します。

ソースコードの変更を行ったあとはビルド元のリポジトリでソースコードの更新がと行われ
まずはビルドが可能かどうかをチェックします。

ここでダメだった場合は手直しになりますが、こういった失敗のリカバリーなどを含め
自動化ツールでは作業工程のどこがダメなのかを迅速に把握することができ
開発工程を短くするのに一役買っています。

### 主なCIツール

一般的なCIツールを紹介します。


**Jenkins**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/fbb96e74-f6e7-2477-d1a3-8942d715b6f0.png)

もっとも一般的で有名ななCIツールで、トレードマークはおじさんです。
オープンソースで無料で、高い汎用性と、豊富なプラグインによる優れた拡張性
対応言語の多さが人気の理由です。

また利用者が多く、コミュニティも大きく、日本語の情報が集めやすいのも特徴です。

このツール自体もアプリケーションであるためサーバーなどにインストールして
利用を行います。

**Circle CI**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/b745b349-708c-ae37-1ef1-f4e809fc7eb3.png)


クラウド向けに最適化されたCIツールでパラレル稼働によるテスト・ビルドの
処理の早さが売りの一つ無料となる利用制限内でも、十分に役立つようです。

iOSのビルドが行なえるのもCircle CIが選ばれる理由となっているようです。

[Circle CI](https://circleci.com/ja/)

**Travis CI**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/06fe0d3c-e790-4b5d-f982-3b0fc974841c.png)

こちらも無料で使えるツールでコードも公開されているようです。

[Travis CI](https://github.com/travis-ci)

オープンソースのプロジェクトであればtravis-ci.orgで無料
プライベートプロジェクトであればtravis-ci.comで有料で利用となっているようです。

**GitLab CI**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/860a3bf5-7847-b24d-825e-05716a232aac.png)

こちらもオープンソースのCIツールになります。

[GitLab CI](https://docs.gitlab.com/ee/ci/)

## まとめ

大規模な開発をする上では、こういったプログラミング以外の部分も
割と工数を取られることになります。

ツールを導入することで工数削減と品質の向上を実現できるので
ビルドやデプロイの自動化はかなり進んでいます。

自分たちも昔はJenkinsをサーバーに立てて運用していました。
慣れるまでは少し大変かもしれませんが、導入後のメリットを考えると
利用したいツールになりますので、ツール自体の知識は抑えておきましょう。

君がエンジニアになるまであと10日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython