技術覚書

自分のために技術的なことを色々と書こうと思います。

【読んでみた】チーム開発実践入門

こんにちは。

今回も読んだ本のエントリです。

目次

読んだ本

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

 

本の目次

第1章:チーム開発とは

第2章:チーム開発で起きる問題

第3章:バージョン管理

第4章:チケット管理

第5章:CI(継続的インテグレーション

第6章:デプロイの自動化

第7章:リグレッションテスト


なんでこの本を読もうと思ったの?

今の職場でソース管理やバグ管理、リリース管理がこれでもかというくらいズタボロ

なんだけど、こういうのをうまくまわすツールってあると思うんだけど

どんなものがあって、それをどんな手法でやってるんだろう?というのが知りたくて。


要約

プロジェクトで起きる問題

  1. 重要なメールが多すぎて優先順位を決められない
  2. 検証用環境がない
  3. 別名フォルダでブランチを管理している
  4. データベースの再作成が困難
  5. 起動するまで壊れていることに気づかない
  6. 他メンバーの修正を上書きして消してしまう
  7. 自身をもってリファクタリングできない
  8. バグの修正時期がわからず、デグレードも追跡できない
  9. ブランチ・タグを活用できていない
  10. テスト環境や本番環境では動かない
  11. リリースが複雑で手順書が必要となる

理想的なプロジェクトとは

  • チケット管理システムに課題などが集約されている
  • できる限りバージョン管理システムを利用する
  • 繰り返し再検証可能なCIシステムを構築する
  • 環境の影響を最小限にとどめ、常にリリース可能にしておく
  • すべてを記録して追跡可能にする

バージョン管理

今はSubversion、Git、Githubを使った開発が主流。

Gitを使ったワークフローのパターン
  • 中央集権型:中央リポジトリを1つ設定し、開発メンバー全員がそれを唯一のpush/pull先としてローカルマシンにクローンするフロー
  • GitHub型:中央リポジトリを1つ設定するのは同じ。開発メンバーは各自で中央リポジトリをForkしたリモートリポジトリを持ち、それをローカルマシンにクローンするフロー
  • ブランチ管理するパターンとして「git-flow」「gitHub-flow」があり、プロジェクトの特性に応じて開発フローを選びカスタマイズして運用

データベーススキーマとデータの管理

データベースマイグレーションとその機能

データベーススキーマにCI(継続的インテグレーション)することで

こんなことができる

  • SQLの適用順とどこまで適用したかを管理する
  • スキーマ定義編集の衝突を管理する
  • ロールバックのしくみを用意する
  • データのロードもできるようにする
データベースマイグレーションツール

言語・フレームワークに特化したもの

言語・フレームワーク非依存

  • Flyway
  • Liquibase
  • dbdeploy

チケット管理

チケット管理システムのメリット
  • タスク管理するための基本機能がある
  • 一覧性・検索性が高い
  • 情報の一元管理と共有が可能である
  • レポーティングに活用できる
主なチケット管理システム

OSS製品

商用製品

  • JISA
  • YouTRACK
  • PivotalTracker
  • Backlog
  • GitHub
チケット管理システムの応用事例
  • お客様からの問い合わせ管理
  • 他部署への作業依頼管理

CI(継続的インテグレーション

インテグレーションとは

以下のようなビルドとテストをおこなうプロセスのことで

これを継続的に行うから「CI」

 

CIに必要なもの
主なCIツール
  • Jenkins
  • TravisCI
Jenkinsで何ができる
  • ソースコードをチェックアウト
  • 自動でビルドおよびテストを実行(静的解析やカバレッジ計測もできる)
  • 結果を集計しレポーティング
  • 通知
カバレッジ計測ツール
  • Cobertura
  • jacoco
  • Scct
  • SimpleCov
  • Rcov
トレーサビリティの担保

P.203より

ビルドが壊れたり何らかのトラブルが発生したとき、問題のあったビルドがどのコミットから由来したのか、そのコミットはもともとどんな課題から発生しているのかなどをトレースできると、運用上とても役に立ちます。Jenkinsをチケット管理システムやバージョン管理システムと連携することで、トレーサビリティを担保し、プロジェクトの見える化を実現できます。 

デプロイの自動化(継続的デリバリー)

リリース作業のアンチパターン
  • リリース作業を手動で行う
  • リリース作業の内容が毎回違う
  • リリース作業に特別な知識が必要(属人性が高い)
  • 何度も繰り返してリリースが行えない
デプロイ自動化すると何がうれしいか
  • 細かくたくさんデプロイできればリスクをコントロールしやすくなる
  • フィードバックを早く得られるようになる
  • 自動化によりデプロイの速度を加速させる
  • 誰でもデプロイができるようにすることが重要(リリース職人の撲滅)
プロビジョニングツールチェーン
  • Bootstrapping・・・サーバOSの設定や仮想マシンによる立ち上げの自動化に関するツール
  • Configration・・・サーバやミドルウェアの設定を自動化するツール
  • Orchestration・・・ソースコードのデプロイやリリースに関わるサーバの操作などを自動化するツール
BootStrappiingツール
Configrationツール
  • Chef
  • serverspec
Orchestrationツール

 

 ブルーグリーンデプロイメント

デプロイによる停止が発生しないゼロダウンタイムデプロイメントの一つ。リリース中にテストアカウントは先行バージョンのブルー環境に振り分けられ、

一般ユーザは現行バージョンのグリーン環境にロードバランサで振り分けられるように制御すること

 

 リグレッションテスト

リグレッションテストとは

デグレードを検知するためのテストのこと。

Selenium

Webアプリケーションの機能テストおよび結合テストの自動化を実現するためのブラウザ駆動型のテストツール群。

SeleniumIDE

Firefoxのアドオン。起動してブラウザで画面遷移や文字入力などの操作を行うと、そのまま操作がコマンドとして記録され、簡単なテストケースを作成できる。

いくつかのテストをまとめてテストスイートを作ることもできる。

Jenkinsと連携してSeleniumIDEで作ったテストケースの実行を自動化が可能。

また、Jenkinsで分散ビルドで並列処理化して高速化することもできる。

(が、サーバの負荷とかで安定して動かないこともあるらしく色々難しいみたい)

 

感想・気づき

Jenkins有能。使いこなせるようになりたい

今回出てきたチケット管理、テスト自動化、自動デプロイなどで

Jenkinsが中心になってほかのツール群を組み合わせて実現させている。

色々と便利ツールを知らない自分もさすがにJenkinsは知っていたし

少し前に別プロジェクトでJenkinsを使おうとしてたけどほとんど

使いこなせなかった。。。これからもっとJenkinsをさわって

開発をよりらくちんにしていきたい所存です。

 

今の職場でもJenkins使ってるけど、全然使いこなせてないなと思う。

いまだにリリース作業も属人的だしよくミスってるしね。

ここの本で載っているノウハウすべては環境の特性上できないけど

SVNと連携させたり、バグ追跡の仕組みだけでもできればかなり変わってくると思う。

バグ管理もExcelの台帳ベースだしね。他のプロジェクトでredmine入れてたから

使えると思うんよな。

もっと開発を楽しく楽するために継続的な情報収集・キャッチアップを

今の職場はネットが使えない閉鎖された開発環境で、けっこう枯れた技術を

使ってプログラムを作っているわけですが、AI(機械学習)の勉強を

はじめたのをきっかけに最近、技術書読んだりセミナー行ったりするようになり

「外の世界」を色々見てみるとまぁ自分はモノを知らないなと

己の無知さ加減を思い知る毎日です。

もっといろんな便利な開発手法やツール、技術がたくさんすごいスピードで出てきている。

それを知らない、知ろうとしないのは損だし、技術者としてもやばいなと。

 

自分も歳が歳なんで(笑)もう開発をがっつりやるわけじゃないんですけど

チームで開発することはなくなることはないので、チームメンバのみんなが

抱えている問題や負担が少しでもなくなるように問題解決の手段(カード)を

いっぱいもつ努力はこれからも続けていこうと思います。