Parseの移行検証: DB切り替え(mLab)


#概要
Parseの移行を実際にリリースしているアプリで検証してみようと思います。
今回の検証は<b>「データベースのmLabへの移行」</b>となります。
検証終了後、データベース以外はParseで動き続けます。Parse Serverの移行も後日検証するのですが、既によい投稿があるようですので、私も投稿するかは未定です。。。

##想定移行パターン
想定する移行パターンは、データベースをmLab, Parse ServerをHerokuが担当する移行パターンです。Parseが推奨する移行パターンのうちの１つとなります。
今回の検証対象はデータベースのみの移行で、移行先はmLabとなります。
mLabへ移行するパターンも少なくとも２つの方法があります。

0. HerokuからmLabをアドオンして移行
0. Herokuを使わずに（Herokuにアカウントがなくても）mLabに移行

今回はHerokuを使わない方法でして、こちらもParseが想定するやり方の１つとなります。
「とにかくデータベースは移行する！」「サーバーの移行先はまだ確定したくない！」場合は、こちらの方法の方がよいかと思います。

- <b>mLab + Heroku移行パターン</b><br>

| データベース | サーバー | 補足 | 
|:---|:---|:---|
| Mongo DB  | Parse Server  | mLabは旧Mongo Lab |   

また、検証に使う人柱的アプリは[<b>nicome</b>](http://urx.blue/sP1L)というiPhoneアプリとなります。
Parseの利用が限定的で、移行時に問題が発生してもあまり影響を受けないアプリです。ニコニコ動画のプレーヤー的暇つぶしアプリなのですが、DL数がないに等しい(2016/3/24現在)ので、せめてここで活躍させてあげようかと...

- <b>アプリのParseの利用範囲</b>

| Parseの機能 | アプリでの用途 | 補足　|
|:--|:--|:--|
| ユーザー管理 | ニコニコ動画ユーザーと連動 | 個人開発者はニコニコOAuthシステムを使えないので、ParseのUserを使っている。|
| カスタムオブジェクト | アプリ情報のバックアップ | データベースとして利用 |

#事前作業
- [mLab](https://mlab.com)へサインアップ＆ログイン

#移行作業： mLabの準備
Qiitaへの投稿は今回が初めてでして、ファイルのアップロードサイズの上限(2M)があるため、画像のアップロードがあまりできません。１度投稿すると上限が大幅に増えるようですので、不足画像の挿入は後日致します。

1. ダッシュボードにて"Create new"をクリックする。
![mLabへ移行01.jpg](https://qiita-image-store.s3.amazonaws.com/0/28445/3c8fc2e0-6a1e-a5bc-70b9-07c965417484.jpeg)

1. 以下のように選択。データベースに名前を付けて、"Create new MongoDB deployment"をクリック<br>ここでは無料のサンドボックスを選択している。
![mLabへ移行02.png](https://qiita-image-store.s3.amazonaws.com/0/28445/85f9101f-9573-9595-4fb8-e4dc939bcbdd.png)
1. 成功したメッセージとともに、データベースが出来ていることを確認。そのデータベースをダブルクリックする。
![mLabへ移行03.png](https://qiita-image-store.s3.amazonaws.com/0/28445/6fe114a6-0bfd-e47b-6e00-245c06d6ddf8.png)

2. データベースユーザーが必要だよ！という英語のメッセージが出ているので、Click hereをクリックする。
![mLabへ移行04.png](https://qiita-image-store.s3.amazonaws.com/0/28445/9238917b-24ab-e3b0-24d2-7af105e4bb26.png)

3. "Add new database user"というポップアップ画面が出てくるので、usernameとpasswordを入力して"Create"ボタンをクリックする。※Make read-onlyはチェックしない。
![mLabへ移行05.png](https://qiita-image-store.s3.amazonaws.com/0/28445/a844fcfe-7b22-8196-131a-ded559fb43d7.png)

4. Database Usersに、データベースユーザー名が作成されていることを確認する。
![mLabへ移行05_2.png](https://qiita-image-store.s3.amazonaws.com/0/28445/690407a4-936e-b087-e92c-6effec50bd14.png)

5. "To connect using a driver via the standard MongoDB URI:"以下の１行をコピーする。尚、コピーした文字列の\<dbuser\>の部分は先ほど作成したデータベースユーザー名を、\<dbpassword\>にはそのパスワードを入れて使用することになる。
![mLabへ移行06.png](https://qiita-image-store.s3.amazonaws.com/0/28445/7f25fe59-1a8c-39c1-a860-9737be1b559b.png)

ここまででmLab側の準備が整いました！

#移行作業：Parseでの移行作業

0. Parseにログインして、ダッシュボードを開いておく。（新しい方のダッシュボード）
1. サイドメニューの"App Settings"をクリックする。もし"General"が選択されていない場合は"General"をクリックする。
![parseからmLab01.png](https://qiita-image-store.s3.amazonaws.com/0/28445/6cd1172d-da11-17fc-3a06-262715bf95fd.png)

2. 少し下にスクロールすると、"App Management"があるのでそこまでスクロールする。
![parseからmLab03.png](https://qiita-image-store.s3.amazonaws.com/0/28445/9ea3a904-0b6c-aa2e-45a3-aca4579e3ef2.png)

3. "Migrate to external database"の、"Migrate"ボタンをクリックして、移行作業を開始する。
4. すると"Migrate app"というタイトルのポップアップウインドウが表示され、データベースへのconnection stringを聞いてくる。
5. ここに、mLabの準備でコピーしておいた文字列をペーストし、\<dbuser\>と\<dbpassword\>もデータベースユーザー名とそのパスワードを指定する。
![parseからmLab04.png](https://qiita-image-store.s3.amazonaws.com/0/28445/25cf7acb-1034-90c8-7de5-150165329b5a.png)

6. 準備が出来たら、"Begin the migration"ボタンをクリックする。
7. 移行作業が開始されると、"Copy Snapshot", "Sync", "Verify"という３つのステップの状態が表示される。
![parseからmLab07.png](https://qiita-image-store.s3.amazonaws.com/0/28445/f5c8dfd1-e543-9942-031c-7a4ad5b0ffb0.png)
8. "Sync"が終了（チェックマークが入り、色がグリーンになる）するまで待つ。相応の時間がかかるので、別の事をするか休憩する...
![parseからmLab08.png](https://qiita-image-store.s3.amazonaws.com/0/28445/ff0bae74-93e7-d1a2-cec1-7d9c613cac36.png)

9. "Sync"が終了したら、とりあえず、<b>「何もしない！」</b><br>
表示されているボタンはまだ押さない！<br>
"Sync"終了時点で既に、移行が終了し、mLabが使われている状態となっている。ただ、Parseのデータベースの方も使用されている状態で、２重に管理されている。
11. アプリケーションをテストし、mLabとの連携がうまくいっていることを確認する。
12. 問題なければ、"Finalize"ボタンをクリックする。（キャンセルしたい場合は、"Stop the migration"ボタン）<br>
Finalizeすると、Parse側のデータベースは使用せず、mLabのみ使用するようになり、移行終了！