未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

ローカル環境のRubyとAmazon S3でデータをやり取りする

昨日,UnityとS3を直接やり取りさせようとして失敗したので,とりあえずUnity→サーバ→S3で通信を行うことを前提に,撮影したスクリーンショットをサーバ上にアップして,そのURLをツイートする機能を実装しようと思う.

まずはローカル環境でS3と通信できるかどうか試してみて,サーバに書いたコードを移植する流れでやってみようと思う.

 

まずは自分がよく使ういつもの環境を整える.bundle initしてGemfileを作成し,Gemfileの中身を書いていく.今回は,aws-sdk, sinatra, slimの3つを使い,自動更新としてsinatra-contribを利用する.Gemfileは適当に書く.

 

SinatraRubyフレームワークの一つで,RailsのようにMVC全てが揃っているフレームワークとは異なり,ルーティングとWebサーバを立てるぐらいの機能しかない.SinatraのいいところはMVCを自由に組み合わせてアプリケーションを作成できるところで,Railsのように導入に細かい設定が必要ないところが大きな利点.

Slimはドメイン特化言語の一つで,特別な記号をそんなに使わずにマークアップを作成することができる.今回はSinatraとSlimの組み合わせでWebページをとりあえず表現する(動くの確認したらJSONに変更する).

 

とりあえず,rubyコマンド叩く前にルートディレクトリを整理する.最初に必要なライブラリをインストールしておく.その次にディレクトリの作成.基本的にmodelsやviewsはどのフレームワークでも共通したディレクトリなので,とりあえず作っておく.

gem install aws-sdk

gem install sinatra

gem install sinatra-contrib

gem install slim

gem install json

bundle init

mkdir views

mkdir models

touch views/index.slim

 

Sinatraはbundleコマンドで動かさず,rubyコマンドで動かす(bundleは何度やっても動かないため).凄い人はbundleで動かしてください.

Sinatraを動かす

 

S3を動かす方法については以下のリンクを参考にしてやってみた.

Ruby - aws-sdkを使って簡単S3操作 - Qiita [キータ]

 

ただ,AWS SDKは.NET版もそうだったけど,Ruby版も非常に簡潔で使いやすい.実際に使ったコードは4ステップぐらいでアップロードできるようになってしまった.

S3にテキストファイルをアップロードする

Credentialクラスは秘密鍵をしまっておくためのクラスなので適宜自作してください.

 

RubyAWS SDKも3種類で構成される.C#版とは異なり,AWSとの接続を行うクライアントと,バケット,オブジェクトの3つ.バケットの中にたくさんのオブジェクトがぶら下がっている構造になっている.

もし,バケットの中に存在しないファイルを呼び出した場合,とりあえず仮にオブジェクトが作られ,オブジェクトをwriteすると自動的にアップロードされる..NET版との違いは,Rubyっぽい書き方でS3を制御できるということ.これは非常にありがたい.

 

というわけで,ここまでできると画像のアップロードは非常に簡単で,適当にちょろちょろっとやってしまえば終わってしまいそう.記事がどうしても長くなりそうなので今日はこれぐらいにしておく.