はじめに
システム開発 プロジェクトにおいて使用するツールの全体像について整理してみたかったので書いてみました。
もくじ
要約
現時点(2020年4月12日)において、Scrum型のプロジェクトを推進するにあたって、(個人的に)理想的なツール構成は下図の通りです。
Tools for Team Development 1
なお、このツール構成のコンセプトは、以下の TIS さんの「チーム開発環境構築テンプレート」から多分に影響を受けています。
Fintan-contents/collaborage: チーム開発環境構築テンプレート
上記のツール構成の実現にあたっては、特に次のようなことを意識しています。
プロジェクト単位でチーム開発環境を構築する
可能な限りOSS を使用し、IaaS上に自前で構築することで、情報資産をコントロール 出来る幅をもたせる
一方で、次のようなツールは、自前でホスティング できないものの、それ以上に生産性の向上に役立つと想定しています。
SaaS 型の Knowledge Base ツール : esa
SaaS 型の UML 作成ツール : draw.io
SaaS 型の ホワイトボードツール : miro
SaaS 型の チケット管理ツール : Jira Software ※miroとの連携が魅力
なお、各ツールの採用にあたり、SSOや、OAuthのような機構を実現しなければ、アカウント管理が非常に煩雑になります。今回の想定では、理想形として、プロジェクト単位で G Suite の契約をするなどすることが一番効率的であると判断しています。
Scrum について
ツール個別の話題の前に、Scrum について整理します。なお Scrum の概要については、2020年2月に IPA 情報処理推進機構 から公開された『アジャイル領域へのスキル変革の指針 - アジャイル開発の進め方 』で非常によくまとまっているのでオススメです。
Scrum の全体像
Scrum の基本的な開発の流れは下図のように表現されます。
Scrum_overview_by_ryuzee
Scrum を 概念モデル図 で表現してみる
Scrum を構成する要素を概念モデル図で表現すると下図のようになります。
Figure: Scrum Conceptual Model Diagram
Scrum Event
Scrum で実行されるイベントのイメージについてまとめます。
Sprint Planning
Sprint の開始時に、 Product Backlog から 今回の Sprint で扱う Sprint Backlog を選出します。プロダクトオーナによって順位付けされた Backlog Item は、開発チームによって詳細化され、タスク分割されます。通常、タスクは 2〜8時間単位で見積もられ、1つのタスクは1人に割り当てられます。
Figure: Sprint Planning
Figure: Product Backlog, Sprint Backlog, Task
Sprint
Sprint 期間中は次のプロセスを通して作業を進めます。
チームで協働して、【要求〜設計〜テスト】を繰り返す
TDD(テスト駆動開発 )で実装する。
Daily Scrum
毎日、決まった時間に決まった場所で、15分以内で、開発チームが全員の情報を共有します。メンバーは一人ずつ、以下の3つの要素を決まった順に共有します。
昨日やったこと
今日やること
障害になっていること
Jira Software board
出典:What is a Jira Software board? | Jira Software Cloud | Atlassian Support
https://support.atlassian.com/jira-software-cloud/docs/what-is-a-jira-software-board/
Sprint Review
Sprint Review では次のようなことを行います。
sprint で実装した機能をデモする
product backlog について協議する
Sprint Retrospective
Sprint Resrospective では、KPT 法を使用した「ふりかえり」を通して、チーム学習やチーム改善の活動を行います。
KPT
ツールの全体構成
本章から、改めてツールについて見てゆきましょう。
「要約」で掲載した図を以下に再掲します。
Tools for Team Development 1
ツールの種類
上図のツールを構成するそれそれの機能要素についてまとめます。
Type
Description
Knowlede Base
効率的に情報を共有するためのプラットフォーム。Wiki などがこれにあたる。Officeツールで作成した文書は、色々と制約や使いづらさがあるため、Webブラウザ のみで利用できるようなツールを採用することで、利用しやすくなる。
UML
ビジネスやシステムを分析する際に作図するツール。
Office Tool
「文書作成(Word)」、「表計算 (Excel )」、「プレゼンテーション(PowerPoint )」などのツール。
File Storage
情報資産を格納し、関係者間で共有する仕組み。(共有フォルダ、Google Drive 、OneDrive)
Account Management
アカウント管理を実現するツール。OAuthなどの仕組みを実現し、中心となるサービスアカウントにて管理出来るようにすることが望ましい。
Code Analyze
コードの静的/動的な解析を自動化し、かつ、見やすく表現するツール。
Version Control System
コードや文書の版管理を実現するツール。「共有フォルダ」を使用する場合、PDFやOfficeツールで作成した文書も git のような VCS の管理ツールの対象となるが、 Google Drive などのように、自前で版管理が可能なサービスを使用することで、作業効率の向上に繋がる。
Code Review
VCS と連携し、コード差分 や Issue の発行、コード管理フローを支援するツール。
Chat
コミュニケーションのハブとなるツール。リモート開発の場合は、すべてのコミュニケーションが Chat ツールを中心に実行されるようになると、情報の伝達漏れや、記録漏れの防止に繋がる。
Video Chat
オンライン会議を始め、雑多なコミュニケーションに活用する。利用者の物理デバイス が持つマイクやカメラ、ネットワーク環境に依存する部分があるため、ハードウェアの部分から意識して環境を整える必要がある。
ホワイトボード
チームが物理的に近い場所にいる場合は、実際のホワイトボードの活用が好ましいが、遠隔にいるメンバーとコミュニケーションする場合には、情報の伝達漏れや、やり取りの障害になることがあるため、オンラインで利用できるツールの利用が好ましい。
Package Repository Manager
Dockerコンテナや、Maven のリポジトリ など、チーム内や組織内でのみ共有したいパッケージを管理するプラットフォーム。
CI
継続的インテグレーション を実現するツール。システム開発 の分野では比較的、一般的なため詳細は割愛。
Ticket Management
チケット管理を実現するツール。システム開発 の分野では比較的、一般的なため詳細は割愛。
ツール群
採用する想定の各ツールについて下表にまとめます。
Tool
Description
Memo
esa
Webブラウザ から利用できる「情報共有サービス」
DocBase も良さそう。
PlantUML
PlantUML の記法に従ってコードを記載することで、UML を作成できる。 esa や GitLab などと連携できる。
GitLab 連携には、サーバホスティング 型の PlantUMLサーバ必要。Dockerで簡単に構築出来る。
draw.io
PlantUML はシステムに近い部分のUML 作成には向くが、ビジネスに近い部分の作図には向かない。 draw.io は Web ブラウザから利用できる作図ツールであり、様々なサービスのアイコンをすぐに利用できるため、無料ながら非常に強力な作図ツールである。Jira や Confluence と連携する機能を有する(らしい。)
G Suite
言わずもがな。 次のような用途で使用できる。 - アカウント管理 - ファイルストレージ - Officeツール - Video Chat
機能で使用する場合、組織共通で使用しているツールと競合するため、導入は容易ではない場合が多々ありそう。
sonarqube
コード解析ツール。セットアップと連携に一手間掛かるが、非常に有用なコード解析ツール。
だんだん、Web上でも認知度が上がってきたように思う。
GitLab
Git Hosting サービスの1つ。OSS のため自前サーバに構築できる。有料版もあるが、無料版でもかなりリッチな機能を有する。 コードレビュや Merge Requestを始め、コード管理のための十分な機能を有する。
GitHub が使えるなら そちらでも良い。
Rocket.Chat
Chatツール。 GitLabと同様に、OSS のため、自前のサーバに構築出来る。
miro
ホワイトボードツール。以前は Realtime Board という名前だった。 非常に強力なコラボレーション機能を有しており、複数人でリアルタム編集が出来るため、本物のホワイトボードより使いやすい部分も多くある。
この領域はこれ1択かもしれない。
Jira Software
Atlasian のチケット管理ツール。アジャイル 向け機能など、ビジネスユースとして十分な機能を有する。 miro との連携機能が魅力。
色々使うと結構高い。
Sonotype Nexus
Package Repository Manager
この領域にあまり詳しくないが、OSS の割に非常にリッチな機能を有しており使いやすいらしい。
Jenkins
CIツール。
余裕があれば CircleCI などでも良い。
Scrum を支える プラク ティス
以下の書籍で 『Scrum を支える プラク ティス』として紹介されているものについて、採用予定のツールで作図したものを記載します。
Inception Deck ※miro で作成
スクラム で使う「インセプション デッキ」のmarkdown 形式版テンプレート - Qiita
https://qiita.com/bremen/items/ed491246ed83630bc84d
リーンキャンバス
Lean Canvas ※miro で作成
ユーザストーリー
User Story ※miro で作成
User Story Mapping ※miro で作成
miro は Atlasian の Jira と連携することができ、 miro の User Story を Jira の ticket へ変換することが出来るらしい。
miro jira
プラニ ングポーカー
プランニングポーカーは Webアプリケーションとして個人制作されたようなサイトはありましたが、これといったツールは見つかりませんでした。
スパイク
スパイクは「事前調査」という位置付けのため、これに関連するツールは記載しません。ただし、敢えて挙げるとすると、調査結果を共有する Knowledge Base 的なツールが活用できると思います。
タスクボード
Daily Scrum で掲載したものと同じですが、 Jira Software board を使用することによって実現できます。
Jira Software board
バーンダウンチャート
バーンダウンチャート
引用:スプリントの進捗状況を監視する - アトラシアン製品ドキュメント
https://ja.confluence.atlassian.com/jirasoftwareserver/monitoring-the-progress-of-a-sprint-938845440.html
パーキングロット
パーキングロットについては、スプリントレビュ時のネタの退避場所という位置付けであり、スプリントレビュの実施方法に依存してツールが変わってくるかと思います。 miro や esa などを活用することで、効果的なパーキングロットを作成できるのではないかと思います。
KPT ※miro で作成
技術的負債の返済
技術的負債の返済に取り組むためには色々なアプローチがあると思いますが、例えば次のようなツールを活用することによって、コードの見える化 やコードレビュの効率化を実現することが可能です。
継続的インテーグレーションの実行にあたっては、色々なツールが想定できますが、例えば次のようなツールを活用することによって実現できます。
コミュニケーション
『完全リモート』という前提に立つと、『チャットツール』と『ビデオ会議ツール』は欠かせません。両者は色々候補がありますが、例えば以下のようなツールがあります。
先日までは、ビデオ会議ツールとして「Zoom」が一番の候補でしたが、セキュリティ問題が顕在化したため、敢えて候補には入れません。
その他の手段
リッチに SaaS を使用する
自前でサーバ構築してツールを導入するのが面倒な場合、お金を掛けることが出来るならば以下のような構成が楽だと思います。
Tools for Team Development 2
可能な範囲で OSS を使う
一方、可能な限り OSS かつ、制御可能な内部サーバで実現したい場合は、以下のようなツール構成が良いかと思います。なお、Knowlede Base や UML の部分で OSS や クライアントツールの候補もありますが、作業効率などの面でそのままにしてあります。
Tools for Team Development 3
参考
今回の記事を作成するにあたり、以下の資料を参考にしました。
Scrum
チーム開発
情報システム
ツール
変更履歴
2020年4月13日 午前0時34分 新規作成
2020年4月13日 午前8時48分 Scrum の概念モデル図を更新 ※Relase の概念を追加