読者です 読者をやめる 読者になる 読者になる

ボクダイモリ

Life is like a Game

継続的インテグレーションによって何が出来るようになるか考えてみる

プログラミング

継続的インテグレーション(CI)について、軽くググってみたら色々出てきた。

継続的インテグレーションとは?– アマゾン ウェブ サービス

www.techmatrix.co.jp

なんでこんなこと調べていたかというと、社内のプロジェクトでCIについて議論する機会があったが、 この辺のノウハウには疎かったのであまり話についていけず気になっていたから。

今現在所属しているプロジェクトは、短いスパンでサービスをリリースしてはそれと並行して開発進めている、いわゆるアジャイル開発だ。
また、開発自体は外部に委託していて、うちの会社はコードの品質管理などをしている。

そんなプロジェクトだが、歴史自体は浅くCIツール(Jenkins)などは導入されていない。
あるとすればコードの品質を最低限保つためのSonarQubeがあるだけ。
それとソースはGitで管理しているが、なぜかリポジトリはBacklogで管理されている。
また、ブランチ管理はGit FlowとかGithub Flowとかではない。masterとリリース+開発用のブランチがあるだけ。

こんな感じのプロジェクトだが、プロジェクトの現状についてどう改善していくか議論する機会をもらえたので、 せっかくなのでCIツールとは何か、CIってなにするのか、問題点とか将来こうしたいなど自分の考えとか理想とかをまとめてみる。

CIについて

CIについては上のAmazonのページがよくまとまっている。
CIの目的はつまりこのような感じだろう。

  • 開発者の生産性向上
  • コードの品質向上
  • リリースと結果確認にかかる時間の短縮

上記3つを目標とする際、実際にするべきことはなんだろうか。それぞれ必要なことを軽く挙げてみる。

開発者の生産性向上

  • 重要なコーディングに集中する
  • 開発中に埋め込まれるバグを減らす
  • バグを早期発見する仕組みを作る

コードの品質向上

  • コードレビューを実施する
  • コーディング規約を設けて機械的にコードをチェックする
  • 定期的にビルドする(コンパイルエラーになるようなコードは埋め込まない)

リリースと結果確認にかかる時間の短縮

  • リリーススクリプトを用意して、リリース作業を自動化する
  • ビルド、リリース結果を担当者に通知する
  • ビルドからリリース結果確認までの手順を簡略化する

CIツール等を使えば上記のようなことはできそう。
他にもできることはありそうだが、とりあえずは上の項目をプロジェクトに盛り込みたい。

現プロジェクトの問題点

今プロジェクトが問題にしていることはだいたい以下の通りである。

  • CIツールがないため、自動ビルドや自動デプロイというような仕組みがなく、その作業に時間を使っている
  • 品質向上の為、SonarQubeを使ってはいるが、手動で行っていて時間がかかっている
  • 開発フローにコードレビューが存在せず、局所的にコードレビューを行っているのみ
  • リリースの手順が複雑、時間もかかる

現プロジェクトの問題点として、自動化できるような部分で時間を取られていたりしていて面倒くさい。
やはりエンジニアとして自動化出来る部分は自動化して、本質的な作業に集中したい。

また、ブランチ管理の規約を設け、開発用のブランチを用意することでブランチの構成をシンプルにした上で、 他のツールとの連携もしやすい環境にしたい。

そのためにもまずは、JenkinsなどのCIツールの導入や、ブランチ管理、開発フローの見直し等が必要なのかなと 考えている。

今後について

今のプロジェクトについて問題点を挙げたので、次はそれについて具体的な解決策などを模索していきたい。 まだまだ勉強不足で考慮が足りていない部分もあるだろうけども、今後メンバーとプロジェクト体制を見直していく上で 少しずつ知識を身に着けていければいいかなー。

まとめ

今回はCIとは何であって、プロジェクトの問題に焦点を当てながら理想の開発環境を書いてみた。

今後どうやってCIを導入していくかは気が向いたら書く。
今はもう疲れたから寝る。