# Wiplock - 作業途中の Pull Request を間違えてマージするのを防止する

*2016-09-23*

> 未完了のタスクやタイトルに `WIP` という文字列を含む Pull Request からメインブランチを保護する Wiplock をリリースしました。

![](screen.gif)

## TL;DR

未完了のタスクやタイトルに `WIP` という文字列を含む Pull Request からメインブランチを保護する **Wiplock** をリリースしました。

よかったら試して下さい。

https://wiplock.com

ソースコードを公開しています。Go と React + Redux で開発しました。

https://github.com/ngs/wiplock

<!--more-->

## 動機

日々の GitHub を使った開発フローで、作業途中 (WIP) の Pull Request を作成し、同僚と実装に関する議論に役立てたりします。

これらの Pull Request を、タスクが未完了のままマージしてしまったり、タイトルに `WIP` を付けたままマージしてしまい、紛らわしいマージコミットを作成してしまいます。

このようなミスオペレーションを防止するため、**Wiplock** という、小さな Web アプリケーションを開発しました。

## 使い方

### 1. GitHub でサインインする

[Wiplock] を開くと、黒い _Sign in with GitHub_ ボタンがあります。

これをクリックして、次の画面で承認を行って下さい。

組織で利用する場合には、組織の _Grant Access_ ボタンをクリックし、アクセス権を付与して下さい。

### 2. リポジトリーを見つけてスイッチをオンにする

![](switch.gif)

GitHub でのサインインが完了すると、Wiplock に自分のリポジトリー一覧が表示されます。

利用したいリポジトリを見つけてスイッチをオンにして下さい。

### 3. 動作確認

![](pending-status.png)

リポジトリページを開き、`WIP` という文字列をタイトルに含む Pull Request を作成、または編集して下さい。

タイトルを編集すると、Pull Request のステータス表示が _Pending_ になります。

### 4. ブランチを保護する

![](protect-branch.png)

`Settings > Branches` 画面を GitHub のリポジトリページで開き、_Require branches to be up to date before merging_ チェックボックスをオンにします。

## 自分の Wiplock をつくる

他者の管理するアプリケーションに権限を付与したくない場合は、Heroku や Docker ホストに自身の Wiplock を起動することができます。

### 必要なもの

GitHub で自身の OAuth アプリケーションを作成する必要があります。

https://github.com/settings/applications/new

### Heroku

Wiplock リポジトリの README にある、Heroku Button をクリックするだけで、簡単にご利用いただけます。

https://github.com/ngs/wiplock#heroku

### Docker

起動するには、Redis サーバーが必要です。

まだ、お手持ちの環境にインストールされていない場合には、公式 Docker イメージを使うことで、簡単に導入できます。

```sh
docker pull redis
docker run --name wiplock-redis -d redis
```

Wiplock の Docker イメージをダウンロード (Pull) します。

```sh
docker pull atsnngs/wiplock
```

そして、`REDIS_URL` を起動した Redis コンテナの名前を使って指定し、Wiplock を起動します。

```sh
docker run --name wiplock -p 8000:8000 -d --rm \
  --link wiplock-redis:redis \
  -e GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID} \
  -e GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET} \
  -e SECRET=${SECRET} \
  -e REDIS_URL="redis://redis:6379" \
  atsnngs/wiplock
```

ローカルホストで Wiplock の起動が確認いただけます。

http://localhost:8000

## Milestones

- `in progress` ラベルがついている Pull Request も保護する
- リポジトリルートにある、`.wiplock.yml` を使って保護条件を設定できる

みなさんの開発フローを安全に保つのにお役に立てれば幸いです！

[wiplock]: https://wiplock.com


