---
# System prepended metadata

title: Danger検討会

---

# Danger検討会

機密情報は書かないでください

## モチベーション

- 機械的にPRの定量的なチェックをしたい

## 要件

- 以下の項目に対してPRの内容をチェックする
    - PRタイトル (`JIRA-XXX TITLE`)
    - LOC
    - ファイル数
    - テストの有無
    - マイグレーション必要なPRにラベルをつける

## HOW

- CIでDangerを実行する
    - https://github.com/danger/danger
    - `Dangerfile`という定義ファイルを作りラベル付け、PRにコメント等ができる

### Sample

```ruby=
class Danger::FileList
  def modified?(str)
    !!self.index do |f|
      f.include?(str)
    end
  end
end

def changes?(str)
  added = git.added_files.modified?(str)
  modified = git.modified_files.modified?(str)

  return added || modified
end

#
# マイグレーション
#
migration_changes = changes? "migrations"

if migration_changes
  message "マイグレーションファイルが変更されています"
  auto_label.set(github.pr_json["number"], "Migration", "FBCA04")
else
  auto_label.remove("Migration")
end

#
# テスト
#
model_changes = changes? "models"
test_changes = changes? "tests"

if model_changes && !test_changes
  warn "テストが変更されていません"
end

#
# LOC
#
LOC_LIMIT = 500
big_loc = git.lines_of_code > LOC_LIMIT

if big_loc
  warn "変更が#{LOC_LIMIT}を超えています"
end

#
# PRタイトル
#
TICKET_REGEX = %r{\A(?<num>\w+-\d+)}

if (ticket = github.pr_title.match TICKET_REGEX)
  markdown "Ticket: https://AAA.atlassian.net/browse/#{ticket[:num]}"
else
  warn "PRタイトルにTicket番号を含めてください"
end
```

## 決めたい

- CircleCI or Actions
- しきい値を決める
    - LOC
    - ファイル数
    - テストの有無
