Home

それはBlog

[Rails] carrierwave と fog で Amazon S3 をストレージとして使う

Rails のプラグイン carrierwave と fog を使って、Amazon S3 をストレージとして使う方法のメモです。

使用環境

  • Rails 3.2.1
  • carrierwave 0.6.0.beta
  • fog 1.1.2

carrierwave のインストール

gem install carrierwave

config の書き方

initializers に carrierwave.rb というファイルを作成し、以下のような設定を書きます。

#-*- encoding: utf-8 -*-
 
unless Rails.env.test?
  CarrierWave.configure do |config|
    config.storage                          = :fog
    config.fog_credentials                  = {
        :provider              => 'AWS',
        :aws_access_key_id     => ENV["AWS_S3_KEY_ID"],
        :aws_secret_access_key => ENV["AWS_S3_SECRET_KEY"]
    }
    config.fog_directory                    = ENV["AWS_S3_BUCKET"]
    config.fog_public                       = false
    config.fog_authenticated_url_expiration = 60
  end
else
  CarrierWave.configure do |config|
    config.storage = :file
  end
end

ENV["AWS_S3_KEY_ID"] にはユーザアクセスID、ENV["AWS_S3_SECRET_KEY"] にはシークレットアクセスキー、ENV["AWS_S3_BUCKET"] にはバケット名をそれぞれ設定する。

各値は、Amazon S3 の設定画面で確認できる。

この設定を行い、carrierwave で Uploader を作成して、ファイルをアップロードすると、S3 にファイルを置くことができる。また、S3 上のファイルの URL には、60秒のタイムアウト設定を掛けており、アプリからのアクセスでのみ参照可能なURLが表示されるようになる。(config.fog_public = false、config.fog_authenticated_url_expiration = 60 の設定)

『のほほんビレッジ〜みんなのカフェ〜』の御礼

携帯向けの GREE ソーシャルアプリ『のほほんビレッジ〜みんなのカフェ〜』を遊んでくださっている皆様、本当にありがとうございます。

のほほんビレッジは、株式会社Edivaさんと共同で製作したゲームです。

紹介ページテスト05.jpg

公式コミュニティの方にもあげられていますが、皆様からの要望はすべて目を通しています。

要望の中から少しずつですがプログラムを実装して、今後も皆様にお届けしていきたいと思います。

致命的なバグに関しては出来る限り早く、要望の実装は定期メンテナンスで導入という感じで運営していますので、末永くお付き合い下さい。

今回の定期メンテナンスで導入されなかった機能も、次回のメンテナンスには導入されるかも!?というような楽しみ方もしていただけると。。。

のほほんビレッジ〜みんなのカフェ〜(携帯用アプリトップ)

携帯向けソーシャルアプリ『のほほんビレッジ〜みんなのカフェ〜』をリリースしました。

紹介ページテスト05.jpg紹介ページテスト06.jpg紹介ページテスト07.jpg

携帯向けの GREE ソーシャルアプリ『のほほんビレッジ〜みんなのカフェ〜』をリリースしました。

このゲームは、のほほん王国を舞台に、自分のカフェを作って仲間を作って生産して調理してデコってクエストしてっていう、
とにかくやれることを盛り込みすぎてしまった、そんなゲームです。

のほほんビレッジは、株式会社Edivaさんと共同で製作したゲームです。

ゲームの内容は遊んでみてほしいのですが、ゲームの裏側の宣伝を一つ。

このゲームは、よくある Flash ゲームではなく Web のまんまつくっています(Rails を使ってつくりました)。

他のゲームとの差別化として、クエストの概念を強力に取り入れているのと、memcached をキャッシュとメッセージング(全体メッセージの配信)に使っているところをちょっと強調したいところです。

まぁ、初めてソーシャルゲームを作りましたが、まだまだ納得していないところもあり、いろいろな経験をさせてもらったアプリになっているので、興味があれば遊んでみてください。

のほほんビレッジ〜みんなのカフェ〜(携帯用アプリトップ)

[iOS] Game Center を使った対戦プログラミングの手順メモ

iOS 4.1 から、正式に Game Center が使えるようになりました。Game Center を使うと、ゲームに簡単に対戦やスコア、達成目標などの機能を追加できます。

Game Centerは、プレー中のゲームについての情報をプレーヤー同士で共有したり、ほかのプレー ヤーと一緒にマルチプレーヤー対戦に参加できるソーシャルゲーミングサービスです。Game Center は、ワイヤレスネットワークと携帯電話ネットワークのどちらからでもサービスを提供できます。 Game Centerの主な機能は、次の通りです。

  • 認証 - プレーヤーはGame Centerでセキュアなアカウントを作成し、iOSベースのデバイスでGame Centerにアクセスできます。
  • 友だち - プレーヤーはGame Centerのほかのプレーヤーを友だちとして登録できます。友だちは、最近遊んだゲームなどプレーヤーの詳細情報を確認できます。
  • Leaderboard - プレーヤーのスコアをGame Centerに記録したりGame Centerから取得したりできます。
  • アチーブメント(Achievement、成績) - そのゲームでのプレーヤーのアチーブメントを管理します。アチーブメントは、Game Centerサービスに記録され、Game Centerアプリケーションとゲームの中で閲覧できます。
  • オートマッチ - Game Centerを介して複数のプレーヤーとつながるネットワークゲームを作成できます。プレーヤーは友だちを招待したり、まだ会ったことのないプレーヤーと接続して対戦できます。プレーヤーは、ゲームを実行していないときでも対戦への招待を受信できます。その場合、ゲームが自動的に起動し、招待が処理されます。
  • ボイス - 対戦に接続されたプレーヤー間で音声通信を行うことができます。

『Game Kit プログラミングガイド』より

Game Center を使うためのプログラミングは形式的ながら、視点が二つ(自分と対戦相手)あるため、どの機能が何に当たるのかを理解していないと混乱しがちです。

本記事は、自分で Game Center を使ったアプリを作ったときの、メモをまとめたものです。

開発時の環境

iOS SDK バージョン
4.3
クライアント iOS バージョン
自分: iOS 4.3.2   対戦相手: iOS 4.3.5

続きを読む - [iOS] Game Center を使った対戦プログラミングの手順メモ

docomo のユーザエージェントからiモードブラウザ1.0かどうかを判断する方法

docomo 携帯のユーザエージェントから、iモードブラウザ1.0かどうかを判断する方法

  • UA が DoCoMo/1.0 で始まっている
  • UA が DoCoMo/2.0 <機種名>(c100; で始まっている

DoCoMo/1.0 で始まっているのは、PDC 端末。DoCoMo/2.0 で始まっているのは FOMA 端末になります。

FOMA 端末のうち、iモードブラウザ1.0 なのは、キャッシュサイズが 500KB ではないものになります。ドコモのユーザエージェント一覧を見る限り、キャッシュが 100KB のものは iモードブラウザ1.0 と判断できます。

Ruby の正規表現で書くとこんな感じ?

def imode1_0?
  request.user_agent =~ /^DoCoMo\/1.0/ ||
  request.user_agent =~ /^DoCoMo\/2.0[^(]+\(c100;/
end

jpmobile と kaminari を使ったときに invalid byte sequence in Shift_JIS が表示される対応

jpmobile と kaminari を組み合わせたときに invalid byte sequence in Shift_JIS が表示される問題の原因と対策です。

環境

Rails
3.0.7
jpmobile
0.1.6
kaminari
0.12.4

続きを読む - jpmobile と kaminari を使ったときに invalid byte sequence in Shift_JIS が表示される対応

kaminari の paginate_array が便利

will_paginate に代わるページングのライブラリ、kaminari ですが、ページングが scope 扱いで配列に対して使えなかったのでちょっと不便なときがあったのですが、なんと paginate_array なるものを発見しました。

環境

kaminari
0.12.4

続きを読む - kaminari の paginate_array が便利

Rails のコントローラの中で View の画像URLを取得する方法

コントローラの中で、ビューの image_tag 等で表示される画像の URL を取得したい時があります。

そんな時は view_context が使えます。

環境

Rails
3.0.7
Ruby
1.9.2-p180
Paperclip
2.3.11

続きを読む - Rails のコントローラの中で View の画像URLを取得する方法

Ruby から Gmail を受信する(マルチパート編)

Ruby1.9.2 で mail を使って Gmail から添付ファイルやメール本文を受信する方法のメモです。

かなり力技的なところがあるので、もっといいプログラムになると思いいますが、メモということで。

バージョン

Ruby
1.9.2
Rails
3.0.4
mail
2.2

続きを読む - Ruby から Gmail を受信する(マルチパート編)

Titanium 非公式 BBS がオープンしました。

公式の Titainum 掲示板の公開が遅いので、@masuidrive さんが非公式ながら BBS をオープンしてくださいました。

日本の Titanium Developer のみなさん、Titanium の質問はこっちにすると親切丁寧な回答を期待できるかも!

非公式 Titanium BBS

Titanium BBS(JP unofficial)

[Titanium] JSDeferred を使って現在位置の取得を順次処理する

Titanium で、JSDeferred を使って順次処理するサンプルです。

JSDeferredはJavaScript上の,あらゆる非同期処理を扱うライブラリです。<中略> JSDeferredは,このようなコールバックの入れ子による非同期処理を,オブジェクトの連鎖による表現に変形させてあげることで,半分同期処理のような感覚で書くことができるようにします。

JSDeferredで,面倒な非同期処理とサヨナラ - gihyo.jp

バージョン -- 追記(2011/03/23)

Titanium
1.5.1
JSDeferred
0.4.0

Titanium 1.6.1 で動かない問題は、@Seasons さんがパッチを書いてくださいました。感謝!! パッチが公開されたらリンクします!

Seasons.NET

@hamasyou どもです^^ 0.4.0を使おうとしたところJSのコンパイルで止まってしまったのでJS初心者ということもあり色々と調べてました^^; ラベル付きブロックが使えない(正しく動作しない)みたいで、repeatの実装のところでJSコンパイルが止まってしまってました。

twitter より

サンプルコード

Titanium.include(Titanium.App.appURLToPath("app://lib/jsdeferred.js"));
Deferred.define();
 
var currentLocation = null;
(function() {
  var deferred = new Deferred();
  Titanium.Geolocation.addEventListener("location", function(e) {
    currentLocation = e.coords;
    deferred.call();
  });
  return deferred;
})().
next(function() {
  alert(currentLocation);
});
 
alert("ここは必ずしも、alert(currentLocation)の後に呼び出されるとはかぎらない!");

alert(currentLocation) としているところに現在位置を取得した後のコードを記述することで、現在位置を取得して何か処理をするというのを順序を保証して処理することができるようになります。

ただし、next の外側の処理は非同期で進んでしまうため、必ずしも、alert(currentLocation) との順序は保たれません。

Titanium Mobile - appcelerator

JSDeferred

Titanium で include でファイルを読むときのテクニック

Titanium.include(Titanium.App.appURLToPath("app://lib/jsdeferred.js"));

上記の様に、 app: プロトコルを使用して、appURLToPath メソッドでファイルを読み込むことで、Titanium のResources フォルダからの相対パスで書けるようになります。

Index of all entries

Home

Search
Feeds
access

access counter

Return to page top