さくらのクラウドのオブジェクトストレージを Vim プラグインから使う

## さくらのクラウドのオブジェクトストレージについて

さくらのクラウドではオブジェクトストレージを提供しています。

* [オブジェクトストレージの仕様・料金 | さくらのクラウド](http://cloud.sakura.ad.jp/specification/object-storage/)
* [【さくらのクラウド】オブジェクトストレージ導入ガイド](http://www.slideshare.net/sakura_pr/sakuracloud-object-storage)

上記リンクに記載のとおり、さくらのクラウドのオブジェクトストレージは、Amazon S3 互換の API を備えています。
拙作で恐縮ですが、Vim から [s3cmd](https://github.com/s3tools/s3cmd) を操作するプラグインを開発しましたので、

[blp1526/storage.vim](https://github.com/blp1526/storage.vim)

この Vim プラグインを利用してさくらのクラウドのオブジェクトストレージを使ってみたいと思います。
以下、さくらのクラウドで作成したサーバから Vim で作業をするという想定で手順を記載します。
画像は2016年12月4日現在のものとなります。

## さくらのクラウドのオブジェクトストレージの作成手順

最初に、さくらのクラウドのホーム画面から「オブジェクトストレージ」に移動します。

<img width="841" alt="cloud_home.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/6915/815c590b-4364-0dd9-f24e-3c0c947de8c4.jpeg">


次に、オブジェクトストレージのバケットを作成します。

<img width="572" alt="create_bucket.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/6915/ca6bec97-a8bf-e98d-c97f-492eb43c820a.jpeg">


最後に、s3cmd の設定で利用するため、バケットのアクセスキー ID とシークレットアクセスキーを控えておきます。

<img width="936" alt="manage_bucket.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/6915/77fe463f-6354-2dac-6377-3b8be2975738.jpeg">


## さくらのクラウドからサーバの作成

今回は CentOS 7.2 でサーバを作成することにします。

<img width="611" alt="create_centos7.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/6915/c760eebc-a017-918f-504c-da13b49ee24d.jpeg">

サーバの作成の完了後、 ターミナルからの ssh もしくはさくらのクラウドのコンソールのタブからログインします。

<img width="766" alt="server_console.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/6915/7dcc0235-cc4d-3283-b9f9-b923da146a37.jpeg">

## s3cmd のインストールと設定

### s3cmd コマンドのインストール

CentOS 7.2 であれば、`/etc/yum.repos.d/` に存在する下記ファイルの enabled を 1 に変更することで s3cmd がインストールできます。

```epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
```

s3cmd と一緒に Vim もインストールしてしまいましょう。

```
# yum install s3cmd
# yum install vim
```

### s3cmd の設定ファイルの作成

下記コマンドを実行してください。

```
# s3cmd --configure
```

様々な項目を対話的に入力しますが、最初に、先ほど控えておいたバケットのアクセスキー ID とシークレットアクセスキーを入力します。

* `Access Key` にはアクセスキー ID を入力
* `Secret Key` にはシークレットアクセスキーを入力

その他の項目はデフォルトで構いません。
また、`Test access with supplied credentials? [Y/n]` と、テストをするか確認されますが、`n` で問題ありません。
最後に確認される `Save settings? [y/N]` で `y` を選択し、設定を保存します。
この時点で `~/.s3cfg` というファイルが作成されます。

### 作成された `.s3cfg` ファイルの編集

さくらのクラウドのオブジェクトストレージ用に、設定ファイルの下記の箇所を、コメントなしの箇所のように編集します。

```
# host_base = s3.amazonaws.com
host_base = b.sakurastorage.jp
# host_bucket = %(bucket)s.s3.amazonaws.com
host_bucket = %(bucket)s.b.sakurastorage.jp
# signature_v2 = False
signature_v2 = True
```

## Vim プラグインのインストール

ここでは、blp1526/storage.vim の README.md の [Installation](https://github.com/blp1526/storage.vim#installation) に記載の、Vim プラグインマネージャを利用しない手順でプラグインをインストールしてみます。

```
# git clone https://github.com/blp1526/storage.vim.git ~/.vim/bundle/storage.vim
```

でリポジトリのクローン後、`~/.vimrc` ファイルを作成し、下記を記載します。

```.vimrc
set runtimepath^=~/.vim/bundle/storage.vim
```

また、こちらは任意ですが、下記を Vim 起動時に入力することによってヘルプタグファイルの作成も可能です。

```
:helptags ~/.vim/bundle/storage.vim/doc
```

## Vim からの s3cmd の操作

それでは、実際に storage.vim を利用してみます。
仮に、今回作成したバケットに `foo.md` というファイルを作成するとしましょう。
ターミナルから


```
# vim s3://bucket_name/foo.md
```

を入力します。
すると、

```
download: 's3://bucket_name/foo.md' -> '/tmp/xxxxxxx/0.md'  [1 of 1]
ERROR: S3 error: 404 (Object Not Found)
```

のように 404 が返ってくると思います。
先ほどバケットを作成したばかりでまだオブジェクトが作られていないので当然です。
ここで、適当な文章を入力し、`:w` で保存しますと、

```
"s3://bucket_name/foo.md" uploaded
```

と、`uploaded` という結果が返ってくると思います。
ここでいったん Vim を閉じまして、再度

```
# vim s3://bucket_name/foo.md
```

を実行しますと、先ほど保存した文章が表示されます。
また、

```
# vim s3://bucket_name/
```

と入力しますと、そのディレクトリに存在するディレクトリやファイルが Quickfix List として表示されます。

## まとめ

Vim にはもともと [Netrw](http://vim-jp.org/vimdoc-ja/pi_netrw.html) という、scp などネットワークを通してファイルを扱うことができる機能が標準で備わっています。
Netrw を利用して

```
vim scp://hostname/path/to/file
```

と Vim を使う感覚で s3cmd を利用できますので、s3cmd を活用されている方には便利なのではないでしょうか。
以上、[さくらインターネット Advent Calendar 2016](http://qiita.com/advent-calendar/2016/sakura)、5日目の @blp1526 からでした。