セキュリティとデータの取り扱い
Code Tempo は GitHub の開発活動を読み取って分析します。どの権限を、何のために使うのか。何を保存し、何を保存しないのか。導入の判断に必要な事実をここにまとめています。
GitHub に要求する権限
- read:user
- ログインしたユーザーの GitHub プロフィール(ID・ログイン名・表示名・アバター)を取得します。
- user:email
- アカウントの作成と、サービスに関するご連絡のためにメールアドレスを取得します。
- repo
- 分析対象に選んだリポジトリのコミット・プルリクエスト・Issue・レビューを取得します。プライベートリポジトリを分析するために必要です。
- read:org
- 所属している Organization と、その配下のリポジトリ一覧を取得します。
- read:project
- GitHub Projects の項目とステータスを取得し、プロジェクトの進捗を分析します。
なぜ repo スコープが必要なのか
repo は、読み取りと書き込みの両方を含むスコープです。強い権限であることは事実なので、まずそのまま書きます。
GitHub の OAuth Apps には、プライベートリポジトリを読むためだけのスコープが用意されていません。公開リポジトリに限れば public_repo で足りますが、プライベートリポジトリを分析対象にする場合、選べるのは repo だけです。
Code Tempo が GitHub API に対して行うのは参照だけです。コミット・プルリクエスト・Issue の作成や変更、リポジトリ設定の変更は実装していません。
保存するデータ
- アカウント情報
- GitHub の ID・ログイン名・表示名・メールアドレス・アバター URL・最終アクセス日時を保存します。
- 招待コード
- 招待制で提供している期間の、招待コードと利用状況を保存します。
- 契約と請求
- Stripe の顧客 ID・サブスクリプション ID・プラン・契約期間・アドオンの数量、および Stripe から届いた通知を保存します。カード番号は Stripe が保持し、Code Tempo のサーバーを通りません。
- 分析対象の選択
- どのリポジトリ・どの GitHub Projects を分析対象に選んだかを保存します。保存するのは選択したことを示す識別子で、中身ではありません。
- 組織とメンバー
- 組織名、メンバーの権限、招待の状態を保存します。
- 表示設定
- 工数の単位など、画面の表示に関する設定を保存します。
- 操作記録
- 課金や設定変更などの操作について、種別・対象・日時・IP アドレス・User-Agent を保存します。
保存しないデータ
- ソースコードの本文、diff、パッチ
- コミットメッセージ、プルリクエストや Issue の本文、レビューコメントの本文
- GitHub のアクセストークン(データベースには保存せず、暗号化された HttpOnly Cookie の中のセッションにのみ保持します)
- クレジットカード番号(Stripe が保持します)
分析に使うデータは、画面を開くたびに GitHub API から取得しています。データベースには保存していませんが、同じ問い合わせを繰り返さないよう、取得したレスポンスは一時的にキャッシュしています(現在の設定では最長 24 時間)。
連携を解除するには
- 1
GitHub 側で認可を取り消す
GitHub の Settings → Applications → Authorized OAuth Apps から Code Tempo の認可を取り消します。取り消した時点でアクセストークンは無効になり、Code Tempo は GitHub のデータを取得できなくなります。
- 2
有料プランを契約している場合は解約する
認可の取り消しだけでは請求は止まりません。設定の課金画面にあるサブスクリプション管理から、解約の手続きを行ってください。
- 3
保存済みのデータの削除を依頼する
削除のご依頼は customer@praisefirst.jp で受け付けています。プライバシーポリシー第 6 条のとおり、ご依頼から 30 日以内に消去します(法令により保存が義務付けられている情報を除きます)。
今後の方針
repo スコープの強さは、OAuth Apps という仕組みそのものに由来します。GitHub App に移行すれば contents: read のような細粒度の権限を選べるため、書き込みを含めずにプライベートリポジトリを読めるようになります。移行の検討を進めていますが、時期についてはお約束できる段階ではありません。
個人情報の取り扱い全般はプライバシーポリシーをご覧ください。