Google ColabでSVGガントチャートを作成する方法

## はじめに

こんにちは！この記事では、Google Colaboratory（以下、Colab）を使って、ソフトウェア開発プロジェクトのガントチャートをSVG形式で作成する方法をご紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/b5381e09-d61b-e106-3e59-57c8beb03e00.png)

ソフトウェア開発プロジェクトの管理において、フェーズやタスクの可視化は非常に重要です。今回は、以下の特徴を持つガントチャートの作成方法をご紹介します：

- SVG形式での出力（高品質な画像）
- 日本語フォントの適切な表示
- ソフトウェア開発フェーズに最適化されたデザイン
- Google Colab上で簡単に実行可能

## 環境準備

まずは必要なライブラリのインストールと基本設定を行います。

```python
# 必要なライブラリのインポート
!apt-get -y install fonts-noto-cjk
import matplotlib.pyplot as plt
from matplotlib import font_manager
import matplotlib.patches as mpatches
import pandas as pd

# 日本語フォントの設定
font_path = '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'
font_prop = font_manager.FontProperties(fname=font_path, size=14, weight='bold')

# カラーパレットの定義（ソフトウェア開発フェーズ用）
planning_color = '#a3d9a5'    # 企画フェーズ用
spec_color = '#87ceeb'       # 仕様フェーズ用
design_color = '#f4c542'     # 設計フェーズ用
dev_color = '#ff9999'       # 開発フェーズ用
test_color = '#dda0dd'      # テストフェーズ用
```

## ガントチャートの基本構造

ソフトウェア開発プロジェクト向けのガントチャートは以下の要素で構成されています：

1. タイムライン（X軸）
2. 開発フェーズとタスク（Y軸）
3. 進捗バー（フェーズごとに色分け）
4. 凡例（各フェーズの説明）

## 実装コード

```python
def create_software_gantt_chart(tasks, start_dates, end_dates, phases):
    """
    ソフトウェア開発プロジェクト用のガントチャートを作成する関数
    
    Parameters:
    -----------
    tasks : list
        タスク名のリスト
    start_dates : list
        開始日のリスト（datetime形式）
    end_dates : list
        終了日のリスト（datetime形式）
    phases : list
        開発フェーズのリスト
    """
    # フェーズごとの色を定義
    color_dict = {
        '企画': planning_color,
        '仕様': spec_color,
        '設計': design_color,
        '開発': dev_color,
        'テスト': test_color
    }
    
    # プロットの設定
    fig, ax = plt.subplots(figsize=(15, 8))
    ax.set_facecolor('#f7f7f7')
    fig.patch.set_facecolor('#f7f7f7')
    
    # Y軸の設定
    ax.set_ylim(-1, len(tasks))
    ax.set_yticks(range(len(tasks)))
    ax.set_yticklabels(tasks, fontproperties=font_prop)
    
    # X軸の設定（月表示）
    ax.grid(True, axis='x', linestyle='--', alpha=0.7)
    
    # ガントチャートの描画
    for i, (start, end, phase) in enumerate(zip(start_dates, end_dates, phases)):
        ax.barh(i, (end - start).days, left=start, 
                height=0.3, color=color_dict[phase], alpha=0.8)
    
    # 凡例の作成
    legend_elements = [mpatches.Patch(facecolor=color, label=phase)
                      for phase, color in color_dict.items()]
    ax.legend(handles=legend_elements, prop=font_prop)
    
    # タイトルの設定
    ax.set_title('ソフトウェア開発プロジェクト工程表', fontproperties=font_prop, pad=20)
    
    return fig

# 使用例（標準的なソフトウェア開発プロジェクトの場合）
tasks = [
    'プロジェクト計画策定',
    '要件定義',
    'システム設計',
    'データベース設計',
    'フロントエンド開発',
    'バックエンド開発',
    '単体テスト',
    '結合テスト',
    'ユーザーテスト'
]

start_dates = [
    pd.to_datetime('2024-04-01'),
    pd.to_datetime('2024-04-15'),
    pd.to_datetime('2024-05-01'),
    pd.to_datetime('2024-05-01'),
    pd.to_datetime('2024-05-15'),
    pd.to_datetime('2024-05-15'),
    pd.to_datetime('2024-06-15'),
    pd.to_datetime('2024-07-01'),
    pd.to_datetime('2024-07-15')
]

end_dates = [
    pd.to_datetime('2024-04-14'),
    pd.to_datetime('2024-04-30'),
    pd.to_datetime('2024-05-14'),
    pd.to_datetime('2024-05-14'),
    pd.to_datetime('2024-07-14'),
    pd.to_datetime('2024-07-14'),
    pd.to_datetime('2024-06-30'),
    pd.to_datetime('2024-07-14'),
    pd.to_datetime('2024-07-31')
]

phases = [
    '企画',
    '仕様',
    '設計',
    '設計',
    '開発',
    '開発',
    'テスト',
    'テスト',
    'テスト'
]

# ガントチャートの作成と保存
fig = create_software_gantt_chart(tasks, start_dates, end_dates, phases)
plt.savefig('software_gantt_2024.svg', format='svg', bbox_inches='tight', dpi=300)
plt.close()
```

出力したsvgの例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/4ecfb0ec-2b38-6ece-d7ec-3568b285fcaf.png)

## カスタマイズのポイント

### 1. フェーズごとの色調整
開発フェーズに応じて視認性の高い配色を設定しています。各フェーズが一目で分かるよう、コントラストの高い色を選択しています。

### 2. タスクの粒度
タスクの粒度は以下のように調整可能です：
- 大きめ（フェーズレベル）: 企画、設計、開発など
- 中程度（機能レベル）: ユーザー認証、データベース、APIなど
- 詳細（タスクレベル）: DB設計、API実装、単体テストなど

### 3. 期間の調整
`figsize`パラメータを変更することで、長期プロジェクトや短期プロジェクトに対応できます。

## 出力結果の活用

生成されたSVGガントチャートは以下の場面で活用できます：

- プロジェクト計画書への添付
- チーム内での進捗共有
- スプリントプランニングでの使用
- 顧客向けプレゼンテーション

## まとめ

Google Colabを使ったソフトウェア開発向けガントチャート作成の利点：

1. プロジェクトの全体像を視覚的に把握可能
2. フェーズごとの色分けで進捗状況が分かりやすい
3. SVG形式で高品質な図が作成可能
4. データの更新が容易

## 参考リンク
- [Matplotlib公式ドキュメント](https://matplotlib.org/)
- [Google Colab](https://colab.research.google.com/)