プロジェクト管理って難しいよね？(Sourcetree Jira Confluenceの使用例)

この記事はJira, Confluenceを用いてタスク管理をし，さらにGitでのプルリクエスト，マージの連携まで記す．
また，初めて共同開発する人に向けてどのようにプロジェクトの進捗状況を管理，共有したり，タスクの分担の方法の一例を紹介しよう．

gitの基本的な使い方は以下の記事から

https://qiita.com/JavaLangRuntimeException/items/6b46551f56e0def76eba

プロジェクト管理において以下の動作を自動で行ってくれると便利ではないだろうか．
**1．ブランチ作成後，タスクのステータスを`進行中(in progress)`にする**
**2．プルリクエスト(PR)作成後，タスクのステータスを`PR済(PullRequest)`にする**
**3．マージ後，タスクのステータスを`完了(complete)/マージ済(merged)`する**
**4．PRクローズ後，タスクのステータスを`クローズ済(closed)`にする**
このサイクルをする際にチームメンバーが都度ステータスを変更することは非常に非効率である...し，ちゃんと変更してくれるか不安だろう．

# 連携後のイメージ
gitでタスク番号に応じたリモートブランチが作成されると以下のようになる
![スクリーンショット 2024-05-31 10.14.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/30d7059d-90ea-b8a0-d3cb-640e29b50afb.png)

gitでPRが作成されると以下のようになる
![スクリーンショット 2024-05-31 10.28.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/fa83b5c1-39f7-70d9-264e-191dbcfcf207.png)

このようにタスクのステータスが更新が自動で更新されるようにすることが本記事の目標である．

# そもそもどのようにプロジェクト管理するべきか
プロジェクト管理といってもやったことない人はあまりしっくりこないだろう．まず，プロジェクトに求められる3要素は以下の通りである．
![スクリーンショット 2024-06-01 10.38.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/4b6ac89f-4e15-c904-7c3c-f2975bcc9f74.png)
`Quality Assurance`品質保証
`Cost`費用
`Deliverry`納期

PMBOKによるとプロジェクトマネジメントを以下の10の知識エリアに分類できるようだ．
>`PMBOK（Project Management Body of Knowledge）`
プロジェクトマネジメントのベストプラクティス，標準，ガイドラインを提供するための文書

![スクリーンショット 2024-06-01 10.41.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/afa3e69d-0e90-6f64-019c-564d73b73350.png)

またソフトウェア開発手法に1つであるウォーターフォールモデルにおけるSLCPは以下のように多くの工程が連なっている

>`ウォーターフォールモデル`
>その名の通り「滝」のようにソフトウェア開発の工程が一方向へと段階的に進行する特徴を持っている開発手法．

>`SLCP(Software Life Cycle Process)`
>ソフトウェアアプリケーションの企画，作成，テスト，デプロイメントを包括的に管理する方法論

![スクリーンショット 2024-06-01 10.47.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/21b89bd2-2e57-9ddf-70f4-671470d4ade6.png)

個人開発では上記のことはあまり気にしないと思うが，共同開発で下記のこととなるとどうだろうか．例えば，ハッカソンで以下のようにプロダクトを開発するとしよう．Unityでプレイヤーの位置座標を常にAndroidで表示するシステムを開発するとする．APIはJavaで開発するとしよう．どのように開発すると良いだろうか．
![スクリーンショット 2024-06-03 16.20.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/ba94c83c-3c91-003d-a696-0994e56780f3.png)

初めて共同開発をした際はプロジェクトの進捗状況の管理やタスクを分担する作業は大変だろう．
以下にどのようにタスクを分割すべきかを記す．

## 1.大まかなタスクに分ける
それぞれの開発プラットフォームごとで大まかなタスクに分割してみる．環境構築から各機能の開発まで大きく分けると良い．
![スクリーンショット 2024-06-03 17.22.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/15356519-43fb-8385-4a6a-5740eca577d7.png)

## 2.タスクの細分化
先ほど大まかに分けたタスクに対して各開発プラットフォームごとに小さいタスクに細分化する．また，各プラットフォームごとにプロジェクト名をつける．
>Unityでは`DEVUNITY`とする．

![スクリーンショット 2024-06-03 18.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/e2277d57-bd6d-10fe-bb58-001f408c1ab1.png)

## 3.タスク番号をふる
細分化したタスクに対してタスク番号を振っていく．これにより各タスクごとに番号で識別できるのでチームメンバー内でタスク名称や内容を共有できる．
![スクリーンショット 2024-06-03 18.32.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/c2cf74cf-e514-7daf-bbda-560da0eeaba0.png)

## 4.タスク単位でブランチを作成
細分化したタスク単位でブランチを作成し，ブランチ名は`feature/<タスク番号>`とする．このブランチでタスクの作業をする．
![スクリーンショット 2024-06-03 18.49.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3ba90803-69a1-0815-188b-44890a8609da.png)

基本的にはgitではこのように管理をすると良い．

# 各種ツールの説明
gitのみではタスクを管理することは難しい．git管理，プロジェクトの進捗状況の管理，タスクの概要(仕様)や分担には以下のツールを使うとよい．
>以下の３つのツールは全てAtlassian社製品であり，ソフトウェア間の連携に優れている．

## Sourcetree
![スクリーンショット 2024-06-03 19.10.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/5ec83a79-8478-36fc-4be6-8c0646db7799.png)

Gitクライアントソフトウェアの一つ．Gitリポジトリの視覚的な管理や操作を行うためのGUIツールとして機能し，ブランチの作成，マージ，コミットの管理などが視覚的に行える．Gitの操作に不慣れな人でも使いやすいインターフェースを提供している．

## Jira
![スクリーンショット 2024-06-03 19.09.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/41ba7702-458f-f4d7-f9f8-df33d13a3de2.png)

プロジェクト管理やタスク追跡のためのツール．チケット（課題）の作成，担当者の割り当て，進捗管理などを行うことができ，プロジェクトの進捗状況を可視化し，チーム内のコラボレーションを促進する．また，アジャイル開発のためのスクラム・カンバンボードの機能も備えているため，開発チームの効率的な作業に役立つ．

:::note info
今まで説明してきた`タスク`のことをJiraでは`チケット(課題)`という．
:::

## Confluence
![スクリーンショット 2024-06-03 19.09.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/cc909559-66e0-6404-004c-4b95f5d09249.png)
チーム内の情報共有やコラボレーションのためのwikiツール．ドキュメントの作成，編集，共有を行うことができ，ページの階層構造や検索機能により，情報を整理して必要な情報にアクセスしやすくなる．また，画像，表，添付ファイルなどを使ってコンテンツを作成できるため，チームメンバー間の知識共有に効果的である．

# 実際に使ってみる
>Sourcetreeのセットアップ，Jiraでのプロジェクトの作成方法，ConfluenceでのWiki作成は次の見出しで説明する．この見出しではセットアップ済みだと仮定する．

>もしAtlassianアカウントを持っていないのであれば作成すること
>https://www.atlassian.com

>アクセスするためのURLはプロジェクトマネージャーに聞くこと．自分で作成するには次の見出しで



はじめにConfluenceのプロジェクト全体のページにアクセスする．

:::note info
ConfluenceのURLはエンドポイントが`/wiki`となっている．
https:\//projectName.atlassian.net/wiki/spaces/KEY
>`projectName`は管理者が決めた名前
>`KEY`はプロジェクトごとに識別するためのキーで管理者によって設定される
:::

![スクリーンショット 2024-06-03 19.20.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/b20358cf-e813-6ae5-abd5-c56b96dbb9a2.png)

>私用のプロジェクトの写真を使う

Confluenceでは`ショートカット`という欄に各種リンクを貼ることができる．例えば全体プロジェクトのJiraのリンクやGitのリモートリポジトリのリンクを貼るなど様々なサイトにアクセスできるようにすると便利である．

また，`コンテンツ`という欄には様々なWikiページを作成できる．例えばプロジェクトの仕様や，ReadMeの下書き，プロジェクト管理の概要，仕様した技術やソースコードの説明などを文字だけではなく画像や図表を使って文書化することができる．

:::note info
このようにConfluenceはチームメンバー間の知識共有に便利なツールとなる．
:::


次にJiraのプロジェクトページにアクセスする．

:::note info
JiraのURLはエンドポイントが`/jira`となっている．
https:\//projectName.atlassian.net/jira/core/projects/KEY
>`projectName`は管理者が決めた名前
>`KEY`はプロジェクトごとに識別するためのキーで管理者によって設定される
:::

![スクリーンショット 2024-06-03 20.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/38461ad0-b5e8-de3d-4859-3c967f5236ee.png)

このようにタスク(チケット)ごとに未着手，進行中，PR済，マージ済のようにタスクの進行ステータスを分けることができる．
>好きなようにステータスの名前はつけられる

またプロジェクトの要約を一目で確認することもできる．
![スクリーンショット 2024-06-03 20.15.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/ea93bc27-3844-f5e0-f809-8e3d1db376b0.png)

各タスクの優先度，担当者，期限，Confluenceのページを添付することも可能である．さらにタスク(チケット，課題)ごとに子課題を振ることができたり，他の課題をリンクさせることも可能だ．課題に関してチームメンバーがコメントを残すことも可能である．
![スクリーンショット 2024-06-03 20.17.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/61b5c13e-1db2-674c-4140-58d9f9f0a60a.png)

:::note info
冒頭でも述べた通り，このチケットのステータスをgit操作(git branch, pullrequest,  merge, close)をトリガーとして変更させることも可能である．本記事では最後の見出しで紹介する．
:::

:::note info
JiraとConfluenceを連携させるにはJiraの左上にある以下のアイコンをクリックしてConfluenceプロジェクトを選択することで可能となる．
![スクリーンショット 2024-06-03 20.24.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/b1fb75d3-ad0e-6f97-4f08-210dfd6295d6.png)
:::

またJiraの各々のアカウントページでは全てのプロジェクトにおける自分の担当チケットを確認することも可能だ．

![スクリーンショット 2024-06-03 20.26.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/03e5a65b-8900-cd57-147c-6c9f3d61e4bb.png)

次にSourceTreeでGit管理をする．
>Gitリポジトリはリモートで作成済みであると仮定する．

>gitの基本がわからない方はこちらの記事を見ること
>https://qiita.com/tarakokko3233/items/ad7e1a1a14d3e2f10da3　

>Sourcetreeをインストールしていない人は以下からインストールすること．
>https://www.sourcetreeapp.com

Sourcetreeを開いたらローカルとリモートの欄があるのでリモートを選択したら，ログインしているGitリポジトリの一覧が出てくる．

>githubへのログイン方法はSourcetreeの設定からアカウントを選択して，githubなどでログインをするとリモート欄にリモートリポジトリが出てくる．

![スクリーンショット 2024-06-04 16.21.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/f3d2ee7e-a88b-db8d-7f72-e50f56cfe35b.png)

リモート欄にあるリモートリポジトリの右側についているクローンを押すとクローンできる．
![スクリーンショット 2024-06-04 16.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/09174cdd-275d-6fc5-9eb2-e881e0e788a9.png)

チェックアウトの仕方は，
![スクリーンショット 2024-06-04 17.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/963b6f71-bef5-ad5f-c664-33a83aa7208b.png)

ローカルブランチを作成するには，上部のブランチボタンから作成することができる．Jiraではこのローカルブランチをプッシュすることでタスクステータスを`未着手`から`進行中`に自動で変えることができる設定がある．
![スクリーンショット 2024-06-04 17.16.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/e71a64fe-03fd-41dc-8f6e-36fc406fae41.png)

git add， git commitの仕方は以下の通りである．
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333735373434322f32623236383634352d306663392d363439322d383033642d3062343064666333376238652e706e67.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/a5d7e292-f28a-e5de-9f8f-8737c577464f.jpeg)


git pushの仕方は以下の通りである．
![スクリーンショット 2024-06-04 17.23.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2352e021-4e39-f63a-f398-cd81aaf8a202.png)

PRとマージはgithub上で行う．JiraではこのPR作成やマージ時にタスクステータスを`進行中`から`PR済`や`PR済`から`マージ済`に自動で変えることができる設定がある．

# Jiraの設定方法
Jiraでプロジェクトを作成するには，`プロジェクト`を押して`プロジェクトを作成`を押す．
![スクリーンショット 2024-06-04 17.33.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2c7b0bfc-df42-8f74-d794-54aace41801b.png)

プロジェクトのテンプレートを目的に合わせて作成する．
![スクリーンショット 2024-06-04 17.36.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/702e3cd7-ce3a-1766-53f9-a7c99c3721a2.png)

プロジェクト名とキーの設定とメンバーの設定ができる．

:::note info
キーはJiraのエンドポイントにつくプロジェクトを一意に識別するためのコード．英語大文字で管理する．
:::

![スクリーンショット 2024-06-04 17.36.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/b1b366f8-1fdf-f3fc-09e1-8708704d353b.png)

作成したプロジェクトページのショートカットボタンを押して，ConfluenceのリンクやGitHubのリポジトリのリンクを貼っても良い．
![スクリーンショット 2024-06-04 17.49.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/c55c3d18-1566-eb2d-f69c-f291ec267df9.png)


# Confluenceの設定方法
`スペース`を押して`スペースを作成`を押す．
![スクリーンショット 2024-06-04 17.43.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2be46032-554d-ba48-9394-023d1f1535a0.png)

スペースのテンプレートを目的に合わせて作成する．
![スクリーンショット 2024-06-04 17.44.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/0d170097-34e7-8ed2-f3e4-c4c8c6cc44a4.png)

プロジェクト名とキーの設定ができる．キーはJiraと同じにすると良い．
![スクリーンショット 2024-06-04 17.44.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/8afbeb9e-5298-4eeb-2a72-df5575578399.png)

この後`＋作成`ボタンからページを追加できる．
また`＋作成`ボタンでページした，コンテンツにページが追加されていく．
ショートカット欄には各種リンクを貼ることができる．`+`ボタンを押してJiraやGithubのリポジトリのリンクを貼っても良い．
![スクリーンショット 2024-06-04 17.46.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/c6610d3e-9194-de4b-3948-617e9f455f39.png)

# gitとJiraを連携する
Jiraの`アプリ`を押して，`アプリの管理`を押す．
![スクリーンショット 2024-06-04 17.52.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/93bdfc5f-5eca-720c-3291-da28db928a1f.png)

`Configure`を押してgithubアカウントでログインする．
![スクリーンショット 2024-06-04 17.54.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3b6f3a32-6074-c15c-089a-78859892d036.png)

`プロジェクト設定`を押して，`自動化`を押す．
![スクリーンショット 2024-06-04 17.58.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/f7a32ff2-548b-7583-910b-fdf240a8c79d.png)

![スクリーンショット 2024-06-04 17.59.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/cf3ab25c-bd6e-d0fb-9ec1-ace6b704fb89.png)

`テンプレート`を押して，GitのPRやマージをするとタスクステータスが変わるようにするものがあるので値を任意の形に変えて自動化を作成する．
![スクリーンショット 2024-06-04 17.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/b1dd14e2-0fa8-8c5b-4f37-38d7ab58bb6d.png)

例えばブランチを作成すると`未着手`から`進行中`に変える方法のルールは以下の通りに作成する．
![スクリーンショット 2024-06-05 10.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/0954e0dc-c38e-a740-115b-b569a5fa426b.png)



これでgit Jira confluenceが連携された．
このようにすればgitの使い方から，タスク管理まで一元管理することができる．

Unity，Java，Androidで別々のJiraプロジェクト，Confluenceの1つのスペース，Gitの1つのリポジトリで管理すれば良いだろう．あくまで一例として考えてほしい．

![スクリーンショット 2024-06-04 18.05.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/46a7ead3-8786-a16e-6aa5-536ffc5b5960.png)