無料でGitHubにQiitaの記事を自動バックアップ

Qiitaの記事をバックアップしていますか?

記事を誤って消してしまった時に備えて，GitHubに自動でバックアップをとってみました．

技術的に言えば，GitHub Actions(GitHubの提供するCI)を定期実行してQiitaのAPI経由で投稿を取得して保存しています．

# 用意するもの

- GitHubアカウント x1
    - GitHubリポジトリ x1
    - GitHub Actions (特別な設定は不要)
- Qiitaアカウント x1
    - Qiita API トークン x1

# 手順

## [1] GitHubにバックアップ先リポジトリを作成

GitHubにアクセスして右上のメニューから「New repository」を選んでリポジトリを作ります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/99fdd814-fbf8-3088-af4e-8deaa213bd9b.png)

リポジトリ名と公開の有無を指定します．下書き記事や非公開記事もバックアップされるのでPrivateを選びました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/872cdfe0-fc5d-1be3-40f6-1e8f3bde7173.png)

「Create repository」を押します．

## [2] QiitaでAPIトークンを作成

右上にあるメニューから「設定」を選びます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/da389ccc-928a-784f-2c0d-b8240a93c3de.png)

サブメニューから「アプリケーション」を選びます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/57624749-143b-4990-ec86-9efa3de1a53b.png)

個人用アクセストークンから「新しいトークンを発行する」を選びます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/5fe180fd-5ddb-4770-214d-4fdcb29751dc.png)

わかりやすいトークンの説明を入力して，スコープに `read_qiita` を選びます．「発行する」を押してトークンを発行します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/f10e6e19-5ccb-074d-1d76-1d07061cf3cb.png)

表示されたトークンをテキストエディタに貼り付けてメモしておきます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/b6423a27-c5ce-2607-d56f-2237d9e54811.png)

## [3] GitHubリポジトリにトークンを登録

手順1で作成したGitHubリポジトリにアクセスして，メニューから「Settings」を選びます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/0108a329-22cf-faa7-7554-72956b7b2f8e.png)

サブメニューから「Secrets」を選びます．「New secret」を選んで先程取得したQiitaのAPIトークンを登録します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/86f4528f-dfaa-0263-df0c-9378991fb669.png)

トークン名を `QIITA_ACCESS_TOKEN` に設定して，先程取得したトークンを貼り付けます．「Add secret」を押します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/a7c40363-49e0-f67c-6f2c-1ba7a97fc304.png)

## [4] GitHubリポジトリに設定ファイルを追加

リポジトリのトップから「creating a new file」を選びます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/a3988837-1dc1-4b54-a5f0-30f4464a53df.png)

ファイル名に `.github/workflows/backup.yml` を指定してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/9662c684-2e3f-8371-4989-753512861086.png)

以下の設定ファイルを貼り付けます．

```yaml
name: QiitaBackup

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
  schedule:
    # * is a special character in YAML so you have to quote this string
    - cron:  '00 00 * * *'

jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v2-beta
      with:
        node-version: '12'
    - run: npx qiita_export_all
      env:
        QIITA_ACCESS_TOKEN: ${{ secrets.QIITA_ACCESS_TOKEN }}
    - uses: EndBug/add-and-commit@v4
      with:
        add: 'items/ img/'
        author_name: 'Auto Backup Bot'
        author_email: backup@example.com
        cwd: '.'
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```

「Commit new file」を押すと自動でバックアップが開始されます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/957cba29-cc51-484d-3d61-37752129df78.png)

## [5] GitHub Actionsをチェック

毎日0:00(UTC)に自動で定期的にバックアップが実行されます．9:00(JST)にバックアップが出来ているか確認してみてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/51ec7976-99bb-4cbb-5237-0ed17f2ec6df.png)

快適なQiitaライフを！