VOYAGE GROUP エンジニアブログ

voyagegroup_techのブログ
VOYAGE GROUPエンジニアブログです。

2010年11月

Amazon S3 を PHP から使ってみた

こんにちわ。ECナビ事業本部の小林です。
9月からECナビに入社し、先日リリースした「ナビバリュー」の開発に携わってきました。

ナビバリューはECナビのサイト上で実施している人気の商品をどのECサイトよりも安く購入できるサービスです。現在のところ、毎週10種類の商品を数量限定で販売していますので、是非毎週チェックしてみてくださいね!!

さて宣伝はここらへんにしておいて、今回ナビバリューを開発するにあたって twitter、 bitly、Amazon Web Service など様々な外部のサービスを利用しています。
そのなかで今回は Amazon S3 を PHP から利用する方法について簡単に紹介をしていきたいと思います。

Amazon S3 って?
今更説明の必要はないかもしれませんが、Amazon が提供する従量制課金のストレージサービスです。詳しくは公式ページへ→ http://aws.amazon.com/jp/s3/

目的
ナビバリューの開発に合わせてユーザーが商品レビューを投稿する際に画像をアップロードできるようになりました。S3はアップロードされた画像の保管場所兼コンンツ提供サーバとして使用しています。自前でストレージを用意するよりは以下のようなメリットが挙げられます。
  • ディスク容量などの物理的な制限を気にせずに済む
  • 専用サーバを用意するより早い、初期コストが安く済む
実際に使ってみる
まず本格的にアプリケーションに組み込む前にファイルをアップロードする簡単なプログラムで試してみました。
  1. SDK
    PHP から利用するには amazon から提供されている SDK を利用させてもらいます。この SDK には PHP から Amazon S3 や EC2 などを使うのに便利な API が含まれています。
  2. 設定ファイル
    ダウンロードした SDK の中に config-sample.inc.php という名前のファイルが含まれており、これが設定ファイルの雛形になります。これを config.inc.php という名前でコピーして、必要な項目を記述していきます。設定に必要な情報は http://aws.amazon.com/ からアカウント→セキュリティ証明書で確認できます。この config.inc.php と SDK に含まれる sdk.class.php を include します。
    include_once "./sdk-1.0.1/sdk-1.0.1/sdk.class.php";
    include_once "./config.inc.php";
  3. バケットをつくる
    Amazon S3 ではバケットというディレクトリのようなものを作成し、そこにファイルをアップロードしていきます。ただしバケットの中にバケットを作ることはできません。また、バケット名は Amazon S3 のサービス内でユニークでなければなりません。ここでつけたバケット名はアップロードしたファイルを公開したときのURLに使われます。たとえば ecnavi-tech-blog  というバケット内に test.jpg というファイルを作成した場合は
      http://ecnavi-tech-blog.s3.amazon.aws.com/test.jpg
    でアクセスすることができます。 バケットを作成するには AmazonS3 クラスの create_bucket を使います。ここではリージョンやアクセス権の指定もできますが、テストなのでとりあえずデフォルトのままにしておきます。
    $s3 = new AmazonS3();
    $s3->create_bucket("ecnavi-tech-blog");
  4. ファイルをアップロードする
    ファイルをアップロードするには AmazonS3 クラスの create_object で、バケット名、アップロード先のファイル名、第3引数の配列でアップロード元のファイル名やアクセス権などを指定します。ここでは/tmp/foo.jpgという名前のファイルをtest.jpgという名前でアップロードしています。またhttp経由で誰でも見られるようにするために、アクセス権はACL_PUBLICを指定します。
    $s3->create_object("ecnavi-tech-blog", "test.jpg", array('fileUpload' => "/tmp/foo.jpg", 'acl' => AmazonS3::ACL_PUBLIC);
    これで3で書いた URL で画像が表示されると思います。
    TIPS
      公開URLを階層構造にしたい場合、アップロード後のファイル名(2番目の引数)を "testdir/test.jpg" などとすると下記のようなURLで公開できます。
      http://ecnavi-tech-blog.s3.amazon.aws.com/testdir/test.jpg
まとめ
アップロードの触りだけでしたが、ドキュメントとSDKに含まれているサンプルコードを一通りながめればその他の操作も特に難なくできると思います。ソフトウェアの開発期間が短かくなっている昨今、このように便利なAPIが用意されているとRESTやSOAPを直接操作することをしなくて済むので非常に助かります。

ad:tech 2010 に出展しました

fluct

みなさんはじめまして。株式会社adingoの小澤(@s_kozawa)です。 
adingoでは2010年10月28日、29日に開催されたad:tech Tokyo 2010に初めてブース出展をさせていただきました。このブログを読んでいただいている方の中にはお越しいただいた方もいらっしゃると思います。本当にありがとうございました。

 
ad:techは、その名にtechが付いていることからわかる通り、「アドテクノロジ」というものが1つのテーマになっています。

インターネットの情報量は莫大に増加し、広告手法もさまざまなものが出現し、「本当に効果的に広告を打つためにはどこに、どのような手法で広告を出せばいいのだろうか?」「自らの媒体収益性を最大限に高めるためにはいったいどのような広告をどのように掲載すればいいのだろうか?」その答えを導きだすことは非常に困難になってきています。まさに様々なプレイヤーや手法が入り乱れるカオスの世界です。

それを人々はテクノロジーの力を使って解決しようとしています。それがアドテクノロジーです。


一言でアドテクノロジーといっても、そのプレイヤーは大きく、

広告効果を最大化させることを目的とした広告主サイドのプレイヤー
広告収益を最大化させることを目的とした媒体社サイドのプレイヤー
中立的な立場でデータを提供するデータカンパニー

の3つに分かれます。

日本ではまだまだ始まったばかりの分野ですが、アメリカではクレジットカードの購買履歴情報と紐づけて広告配信をしたり、レコメンデーション機能を使って似たような人の行動から未来を予測して広告配信をしたりと、かなり進んだ分野になっています。(もちろんプライバシーの問題や、個人情報の問題があり、これらの行為そのものの是非についての議論はまだまだ存在します)

その中で今回のad:tech Tokyoは、ついにアドテクノロジーの波が日本にもやってきたなということを実感するカンファレンスとなりました。いままでは経験則や、人脈などでキャンペーンの内容や予算が決まっていたり、そもそもマスがあって、その補完としてのウェブ広告だったものが、インフラはクラウド化され、そのコストは限りなく安価になり、それにより膨大なデータ蓄積や高性能な集計処理が小さな規模の会社でも可能となり、それらのリソースを使って開発されたプロダクトがブラックボックスの仕組みの中で、最も効果が高いキャンペーンをはじき出して出稿される、最も収益性が高い広告をはじき出して掲載される、そんな世界がすぐそこまで来ています。

adingoもFluctという媒体社の収益最大化を目的としたプロダクトを先月リリースしました。裏側では、複雑な計算や膨大なデータを使った処理を高速で行うためにどのようにすればいいのか、秋葉原でパーツを買ってきてテストサーバーを組み立てたり、さまざまな新しい技術に関するテストを行ったりと、エンジニア同士の白熱した議論が日々行われています。まだまだ始まったばかりのこのアドテクノロジの分野は今後大きく成長する分野であることは間違いないでしょう。

実はECナビではajitoを使って定期的にアドテクノロジーに関する勉強会なども開催しています。興味がある方いらっしゃいましたら、一緒に議論できればいいなと思います。Fluctはまだまだリリースしたばかりの発展途上のプロダクトですが、より媒体社の方に使っていただけるようにすべく、開発を加速していきたいと思っています。

これからもadingoとFluctをよろしくお願いします。

【ミニセミナーの様子】

 

【当日の様子】

adtech_adingo_fluct12 adtech_adingo_fluct11
adtech_adingo_fluct10 adtech_adingo_fluct8
adtech_adingo_fluct7 adtech_adingo_fluct6
adtech_adingo_fluct5 adtech_adingo_fluct4
adtech_adingo_fluct2 adtech_adingo_fluct1

ECナビで勉強会

こんにちは, 株式会社ECナビ システム本部の春山(@haruyama)です.

2008年ごろに起こった勉強会ブームは衰える気配を見せず, エンジニアの間で勉強会に行くことが定着した感があります.

ECナビは勉強会の開催に適した設備を持っています.

100人以上収容可能な大会議室「パンゲア」
もちろんプロジェクタは常設されています. プロジェクタをもう1つ並べることも可能です.
  • 酒を含む飲料が無料な社内バー「ajito」
  • 懇親会のために居酒屋などの予約する必要がありません. また少人数の勉強会はバーで飲みながらできます.

    設備を活かして, 私を含むECナビ社員がいくつかの勉強会を開催しています. すべてが社員の主催というわけではなく社外の方が主催しECナビが会場を貸していることも多いです. 勉強会ネタがあるが適当な会場がないという方は, @haruyamaまでご連絡下さい.

     

    春山は, 以下の2つの勉強会の開催をしています.

     

    Solr勉強会

    ECナビでも利用している全文検索システムSolrの勉強会を数ヶ月に1度開催しています. 2010年11月19日に第4回Solr勉強会を開催予定です.

    神泉セキュリティ勉強会

    2010年10月26日に, 第1回神泉セキュリティ勉強会を開催しました.

    HASHコンサルティング株式会社徳丸浩(@ockeghem)さん『PHPカンファレンスでやった文字コードの話を再演できる適当な場はないかな。(略)』に飛びついてご講演をお願いしました. またサイボウズ・ラボ竹迫良範(@takesako)さん奥一穂(@kazuho)さんにもご講演していただきました. ご講演, ご参加いただいた皆様, ありがとうございました.

    当日の様子などは, 竹迫さんのブログによくまとまっています. TAKESAKO @ Yet another Cybozu Labs: 第1回神泉セキュリティ勉強会

    以下に講演のスライドを列挙します.

    プログラムを騙す10の方法 – シグネチャマッチを回避する攻撃と防御 | Flickr - Photo Sharing! 竹迫良範さん

    記事検索
    QRコード
    QRコード