iTunes で管理する楽曲や動画を AWS S3 にオフロードして大量データを扱えるようにする

## 概要
Mac の iTunes で管理する楽曲や動画を S3 にオフロードして大量データを扱えるようにする

## はじめに
iTunes は便利ですね。
iPhone/iPad上のメディアファイルを管理するには、実際には iTunes は唯一の手段となります。
しかしながら、メディアファイルの増加に伴い、ローカルのディスクは増加の一途を辿り、高価なSSDの領域を埋め尽くしてしまいます。
そこで、低価格で無限に使える AWS S3 を、iTunes のストレージとして使うようにする手順のご紹介です。

※こんな面倒なことしなくてもできる方法をご存知の方は是非ご教授下さい！！

## 戦略
* S3 をローカルにマウントし、シンボリックリンクを張る
* S3 のマウントには 「FUSE for OS」 と 「goofys」 を使用する
* 取り込みや編集はローカルで行い、安定したら、 S3 にアップロード
* アルバム単位で管理

## インストール

1. 「FUSE for OS X」 インストール 
http://osxfuse.github.io/

1. 「Go」 インストール  

     ```
$ brew install go
```

    ```:.bash_profile
export GOROOT=/usr/local/opt/go/libexec
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/Documents/Go/third-party:$HOME/Documents/Go/my-project
export PATH=$HOME/Documents/Go/third-party/bin:$HOME/Documents/Go/my-project/bin:$PATH
```
1. 「goofys」 インストール

    ```
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys
```


## 設定
1. AWS
    2. S3 にバケットを作成  
      (例では、東京リージョン(ap-northeast-1) に 「exabugs-itunes」というバケットを作成した)  
      (バケット名は世界で唯一である必要がある)  
      (この際、バケット名に . が入ると SSL証明書がうまく機能しないので注意!!)
    1. IAM にアカウントを作成  
      先に作成したバケットにフルアクセス可能なアカウントを作成し、認証情報(アクセスキーとシークレットキー)を取得する。  
      (例では、「itunes」というアカウントを作成したが、名前は重要ではない。)
    1. ローカルの credentials ファイルに 上記 IAM の認証情報を記載する。  
      (例では、「itunes」というプロフィール名で参照できる)  

    ```:~/.aws/credentials
[itunes]
aws_access_key_id=AKIAxxxxxxxxxxxxV3OA
aws_secret_access_key=OMqdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdtgN
```

1. goofys
    1. ローカルにマウントポイント(空ディレクトリ)を作成  
      (例では、「itunes」というディレクトリを作成した)  
    1. goofys 起動  
      マウントポイントのあるディレクトリに移動して

    ```
$ goofys -f --profile itunes --region ap-northeast-1 exabugs-itunes itunes
```
 - -f  
   フォアグラウンドで動作する。Ctrl+C で停止する。  
   動作が安定したらこのオプションを外してバックグラウンドで動作させればよい。
 - --profile  
   AWS credentials ファイルに記載したプロフィールを指定する
 - --region : バケットの存在する 東京リージョン(ap-northeast-1) を指定
 - マウントポイント
     - exabugs-itunes : S3バケット名  
     - itunes : ローカルのマウントポイント(存在する空ディレクトリ)
1. iTunes
  iTunesから見たディレクトリ構成は以下 イメージ図 のようになります。
    - マウントポイントとバケットを、 goofys でつなぐ
    - CD(ディスク)単位で、 シンボリックリンク でつなぐ

### イメージ図
![スクリーンショット 2016-05-03 11.54.29.png](https://qiita-image-store.s3.amazonaws.com/0/69410/6abd99f3-d171-0bda-00a0-26fb271048c3.png)
この例では、以下の設定・状態を表しています。
 - 「iTunes Media」ディレクトリは「~/Music/iTunes/iTunes Media」
 - ローカルマウントポイントは「itunes」
 - CD2-2 はまだローカルに存在し、S3 にアップロードしていない

## 手順

### 取り込み手順

CD取り込み直後は、ローカルディスク上にファイルが保存されます。
S3にアップロード後、同名のフォルダ名になるように、シンボリックリンクを作成します。

  1. iTunesでCD取り込み
  1. S3にアップロード
  2. シンボリックリンク作成

【ワンポイント】
動画(ホームビデオ)は通常はファイル単位での扱いですが、「メディアの種類」を「ミュージックビデオ」に変更すれば、フォルダで管理できるようになります。
https://discussionsjapan.apple.com/thread/10162276?start=0&tstart=0

### 修正手順

アップロード前に、CDタイトルの変更等については済ませてしまいましょう。

どうしてもアップロード後に修正が必要になった場合は、S3上のファイルを直接は編集できないので、以下の手順で一旦ローカルにコピーして、修正後に再度アップロードします。

  1. シンボリックリンクを削除
  1. 同じ場所に実ファイルをコピー
  3. 編集
  4. 再アップロード
  5. シンボリックリンク作成


## おわりに
 - iTunes に限らず、goofys を使うと実用的な速度で S3 を扱うことができそうです。
 - goofys では、ざんねんながら、まだ 新規作成 がうまく動作しません。  
   そのため、今回は読み込み専用として S3 バケットを使う構成にしています。

## 参考

* s3をマウントできる goofys を Mac で試す  
http://rochefort.hatenablog.com/entry/2016/02/02/080000
* s3fsよりも高速に使えるgoofysを試してみた  
http://dev.classmethod.jp/cloud/aws/how-to-use-s3fs-goofys/