受託開発やっている、いまの開発スタイルを書く。
この前のブログはわりとフォーカスをしぼったはなしだったので、今回は簡単に全体のはなし。(書く順番が逆っぽい)
今回のプロジェクトではアーキテクトとして、この↓開発スタイルの構築と運用をしていて学び多い。
バージョン管理はGit
プロジェクト用サーバーにGitBucketをたててソースコードを管理している。
オフショアと仕事をするなど、開発拠点がわかれることが多い。
ソースコードに対してロックをとったりしちゃうと、他の人が開発すすめられなくなるし、拠点別れて並行開発する大規模案件だからこそ、Gitを使う必要がある。
各開発者がブランチをきって開発をして、プルリクでレビュー依頼、からのマージをすることで、レビューが済んでいるソースしかmasterブランチに取り込まれない、というのもイイ。
弊社の”エンジニア”はみんな当たり前のようにGitを使っている。
受託開発的に、ソースコードを社外に配置するのはのは結構ハードルが高い+運用にお金がかかっちゃうとマネージャを説得しなければならなくて無駄にHPが削られるので、
そういった無駄な労力を避けるために、プロジェクトメンバーのみがアクセス出来るサーバにGitBucketをたてている。
GitBucketの立て方はブログ書いた。
CIは必須
顧客が急に動作確認したいと言いだすこともあるので、ソースコードは常にデプロイ出来る状態にしておく必要がある。
GitBucketをJenkinsで常に監視している。
GitBucketに対してソースがpushされたら、それをpullして、最新のソースに対してテストやデプロイを行っている。
JenkinsとSonarQubeの連携を行っていて、ソースコードの品質を常にチェックしている。
SonarQubeの説明はこれがわかりやすい:SonarQubeでプログラムの品質管理をはじめる(概要) - Qiita
なお、うちのプロジェクトは諸事情ありまして、JenkinsとSonarQubeはWindows7 PCに立ててる。
JenkinsとSonarQubeの構築手順のはなしは需用があればブログ書きますー。
ただ、プロキシ的なところではつまづいたけど、それを除けばサラッと構築できてしまったので、アレ。
ライブラリ管理はリポジトリで
jarファイルや.classpathや.projectファイルがバージョン管理リポジトリに配置されているのは既に過去。
プロジェクトの各モジュール間やフレームワーク、ライブラリの依存関係はmavenで定義している。
プロジェクトごとにリポジトリ管理ツール(Artifactory)を構築している。
この記事でいま開発をすすめていくなかでの各モジュールの位置づけを書いているけど、parentとかcoreとかentityモジュールに関してはこちら側で修整+提供をしている。
それを、Jenkinsでビルドして、ビルドの後処理でプロジェクトのArtifactoryにdeployしている。
開発者は必要なjarをプロジェクトのArtifactoryやmavenセントラルからダウンロードして開発していて、個人が自分のローカルにこっそりjarファイル置いていて、コミットしたら動きませんなんてことが全くない。
それによって、各開発者は常に最新のjarをリポジトリから取得することが出来る。
開発の早い段階でバージョン固定したjarを管理してるから、古いモジュールを意図的に使うことも可能なので、
依存関係のある他モジュールを変更した!⇒動かなくなった!
なんてことはなく、新規開発するひとは新しいモジュールで開発するし、既存のソースコードは一旦古いモジュールのjarを参照したままにしておいて、修整や動作確認ができたら新しいモジュールに切り替え、が簡単に出来る。
課題はチケット管理
Redmineで課題や別拠点とのQAの管理をしている。
Redmineからエクセルを出力して顧客に見せているので、SIer的にも安心!
Redmineで課題を管理することによって、課題の関連付けがさっと出来るし、自分の担当チケットなんだっけ?という検索もサッとできる。
課題の証跡や残課題の総量もわかりやすい。
気軽にコミュニケーションをとるときはチャット
リモート拠点の開発者とのコミュニケーションにチャット(back-channeling)を導入した。
まだ導入したてだけど、Redmineでのチケットを切るほどでもないけど、電話やメールがめんどくさい、というときにチャットあるの便利。
コミュニケーションの回数は増えたけど、1つ1つの粒度は小さいし、ふだんはおとなしい開発者の人からも、こういうふうにした方が良いんじゃないですか?的な提案が来たりした(!)ので、今のところかなり満足度高い。
なお、使ったのはコレ。話題がスレッド形式で、話題単位でページが別れるのもイイ。
github.com
なお、このチャットの説明はこちら:BackChannelingによるお手軽お仕事用チャット - Qiita
何がイイって
ツールとしては全部タダだし、情報が中にクローズされているのがイイ。
やっぱり、お金かかっちゃったり、ソースコードを外に置いたりするとなると、マネージャーや顧客を説得するという無駄な消耗が必要になったりする。
自前で構築や運用をやらなきゃいけないんだけど、Redmine以外はJVM上で動くのでセットアップもちょー簡単だし、それで自分が快適になるので全く苦じゃない感じある。
@kawasimaさんが同じ部門になって、この開発スタイルが弊社のデファクトスタンダードになっており、かなりイイ。
とりあえず新人さんはこれ読んどけばいいんではないですかね。
チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)
- 作者: 池田尚史,藤倉和明,井上史彰
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る