セキュリティとデータの取り扱い

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. 1

    GitHub 側で認可を取り消す

    GitHub の Settings → Applications → Authorized OAuth Apps から Code Tempo の認可を取り消します。取り消した時点でアクセストークンは無効になり、Code Tempo は GitHub のデータを取得できなくなります。

  2. 2

    有料プランを契約している場合は解約する

    認可の取り消しだけでは請求は止まりません。設定の課金画面にあるサブスクリプション管理から、解約の手続きを行ってください。

  3. 3

    保存済みのデータの削除を依頼する

    削除のご依頼は customer@praisefirst.jp で受け付けています。プライバシーポリシー第 6 条のとおり、ご依頼から 30 日以内に消去します(法令により保存が義務付けられている情報を除きます)。

GitHub の認可設定を開く

今後の方針

repo スコープの強さは、OAuth Apps という仕組みそのものに由来します。GitHub App に移行すれば contents: read のような細粒度の権限を選べるため、書き込みを含めずにプライベートリポジトリを読めるようになります。移行の検討を進めていますが、時期についてはお約束できる段階ではありません。

個人情報の取り扱い全般はプライバシーポリシーをご覧ください。