darudaru

だるだるしてるエンジニア

「チーム開発実践入門」を読んだ

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

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

仕事でプロジェクトリーダーとして案件を任せられることも多くなってきたのですが、よりよい開発の環境だったり方法を知りたくて、「チーム開発実践入門」を読んでみました。ひとつひとつ事例をあげながら、それを手助けするツールの紹介、使い方まで詳しく書かれていて、実際に使用する場合のイメージがしやすかったです。

理想的なプロジェクト

・チケット管理システムに課題が集約されている ・バージョン管理システムを利用している ・CIシステムが用意されている ・環境の影響を最小限にとどめ、常にリリース可能にしておく ・すべてを記録して追跡可能にする

すべてを記録する、に関してはプログラムの話だけではなく、仕様についても同じですね。記録しておくということは、それがエビデンスとなり、自分を守る情報にもなります。

分散バージョン管理システムを使うことのメリット

・リポジトリの完全なコピーをローカルマシンに持つことができる ・動作が速い ・一時的な作業の履歴管理が用意である ・ブランチ、マージが手軽にできる ・場所を選ばないコラボレーションが可能

分散バージョン管理システムのデメリット

・真の意味では最新バージョンはシステム上存在しない ・真の意味ではリビジョン番号はない ・ワークフローが柔軟に設定でき過ぎるため混乱しやすい ・考え方に慣れるのに時間がかかる

「考えた方に慣れるのに時間がかかる」には、実際に自分も体験したのでとても同感しました。 わたしの仕事場では今はGitでバージョン管理を行っていますが、昔はバージョン管理システムを使わず、ファイルをリネームしてバックアップファイルを作成しながら複数人で作業をしていました。今考えれば恐ろしい環境で開発を行っていました。Gitを導入するとなったとき、今までの開発フローにGitのリポジトリにプログラムをコミットするという手間が増え、最初はメリットよりも時間がかかるということがデメリットに感じていました。導入するときには、メリットをいかにうまく伝えられるかが重要なポイントですね。わたしはいまいち、メリットを理解しないまま作業してしまっていたので、余計にデメリットを強く感じてしまっていました。 メリットを伝える方法として、デモを見せられる環境を整えて実際にメンバーなり上司に見せてみることがいいと書かれています。確かにそれがあればイメージしやすかったかも。

プロジェクトがうまく回らない理由

・目標が間違っている ・見積もりが不正確で納期が以上に短く、要因が不足している ・プロジェクトの終わりが定義されていない ・メンバーのモチベーションが上がらず進捗しない ・プロジェクトの見える化ができていない ・タスクの管理、進捗の管理、情報の共有ができていない

自分がプロジェクトをうまく回せていなかったときの原因は、「見積もりが不正確」「見える化ができていない」「タスクの管理、進捗の管理ができていない」が主だったなあ、と読みながら振り返っていました。ひとつの案件の開発の作業を、細かいタスクに分割せず、開発という一本の線でスケジュールをひいていたために、具体的にいまどこまで開発が終わっているかが把握できていませんでした。結果、テスト段階で思っていた以上に開発が終わっておらず炎上するというパターンがありました…。

チケット管理システムの導入メリット

・タスク管理をするための基本機能がある ・一貫性、検索性が高い ・情報の一元管理と共有が可能である ・レポーティングに利用できる ・他システムとの連携が可能、拡張性がある

なぜCI(継続的インテグレーション)のようなプラクティスが求められるのか

・コストメリット ・市場の変化のスピード

テストを書くためのフレームワーク

・テスト駆動開発(TDD)系フレームワーク ・振る舞い駆動開発(BDD)系フレームワーク

それぞれのフレームワークについて説明があるのですが、違いがよく分からなかった…。TDDがメソッドごとの最小単位のテスト、BDDが仕様に沿ったテストという理解でいいのだろうか。

 デプロイの自動化における恩恵

・細かくたくさんデプロイできればリスクをコントロールしやすくなる ・フィードバッグを早く得られるようになる ・組織がスケールする

自動化のメリットは、たくさんデプロイできるようになるのもそうですが、他のことに費やす時間ができることもありますね。どんどん自動化して、作業時間を減らし、他の改善業務やサービス向上に時間が割ける環境を作っていけるのが理想かなあ、と。

リリース作業についてのアンチパターン

・リリース作業を手動で行う ・リリース作業の内容が毎回違う ・リリース作業に特殊な知識が必要(属人性が高い) ・何度も繰り返してリリースが行えない

心が痛い。

まとめ

CI環境は今の仕事場ではなく、導入しようと試みているところなので、タイミングよく勉強になってよかったです。メモメモ。

会社によって、色んなしがらみがあると思います。わたしの会社でもあります。でも、本書に書かれているとおり、できるところからコツコツと作業を進めていくしかないですね。

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

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