Google Cloud PlatformでElasticsearchを起動してHerokuから接続する方法
はじめに
今回は自分の運営するamazonの家具を寸法と価格から検索できる「家具サイズ検索」のコスト削減のためにElasticsearchに変更したので備忘録として記事にしておきます。 これまではアドオンのHeroku Bonsai Elasticsearchを利用しており、10万レコードまでで$10かかっておりGCPに移行することにしました。(GCPはf1-microなら月額$4.49以上)
起動方法
今回はGoogle Cloud Platformのこちらのテンプレートを利用します。
ここで好きなセッティングにしてください。 Herokuから接続するのであればサーバの位置をusに設定しておきます。はじめ設定されているasiaは高いのでレスポンス時間がシビアでないならusをオススメします。
自分は$1ほど高くなりますが、検索スピードを担保するために一応SSDに変更に変更しています。 計測した所一応0.3secあるかないかですが検索時間が早くなりました。 また10Gまでストレージ容量も増やすことができたので10万レコードのリミットもなくなりました。
デプロイが完了すると以下の画面でuser名、パスワード、IPを確認します。
あとはRailsでsearchkickを使っているのであれば以下のようにheroku configを設定する。
heroku config:set ELASTICSEARCH_URL='http://[user]:[passwd]@[IP]/elasticsearch/' heroku run rake searchkick:reindex
ちなみにrakeするときが最もCPUを食うみたいで200%つまり2つインスタンスが立ってしまう? なのでbachサイズを小さくするため、app/models/product.rbに以下の設定を足して2インスタンスが立ち上がるの防いでいます。(本当に2インスタンス立ち上がるのかは不明です...)
searchkick batch_size: 100
1ヶ月分(1月1日~1月31日まで)のコスト
参考になるかわかりませんが自分のサービスの1ヶ月運用したコストも公開しておきます。検索数が多くなるとネットワーク料金がかかるはずなので参考程度にしてください。
内容 | 金額(日本円) |
---|---|
Compute Engine Sustained Usage Discount [ Currency conversion: USD to JPY using rate 117.68 ] | -210 |
Compute Engine Micro instance with burstable CPU running in Americas: 743.967 時間 | 700 |
Compute Engine Network Internet Egress from Americas to Americas | 41 |
Compute Engine SSD backed PD Capacity: 10.333 Gibibyte-months | 200 |
合計 | 731 |
プチビジネス1ヶ月レポート 11月号
はじめに
今回の1ヶ月レポート対象は、9月15日にリリースしたamazonの家具を寸法と価格から検索できる「家具サイズ検索|Amazon家具を価格と寸法(幅x奥行x高)から検索!」です。
furniture-size-search.herokuapp.com
学生の内にサービス立ち上げ経験を得たくてプチビジネスとして初めた。 作るのは非常に楽しいのですが冷静に分析する機会を作らないとなかなか難しいので、分析を行う。理由とその時何を考えていたかのログをとる意味で書いていくつもりです。 学生の内にサービス立ち上げや運営してみたい人の参考になればいいなー
サービスの目標
家具が一番売れるのは 3~4 月位だと思うので「 3~4月に1年間の運営費を稼げるサービス 」にしていくことです。具体的には、現在の 1 ヶ月運営費用が 17 $ 位なので 2万円 を 3~4 月に回収すること。
注意事項
Google analyticsの詳細なデータの開示が利用規約違反にあたるので四捨五入した値を公開することにします。 Amazon アソシエイトは大丈夫そうなので生の値で公開します。 なので全て約〇〇だと思って見ていただければ幸いです。
11月
行ったこと
- google analyticsコンバージョンにアソシエイトを設定
- SEO対策
- モバイルUIの改善
- はてブボタンの設置
- アソシエイトリンククリックをgoogle analyticsのコンバージョンに設定
- DBを変更しコストダウン
- ソート機能の実装
データ・ユーザ分析
Amazon アソシエイト
- UU:64→127
- amazon商品ページ移動数:261→291
- 注文数:4→8
- 売上:約17,000円→39,000円
- 利益:約470円→1,170円
- コンバージョン率:1.53%→2.75%
見られていた商品
- ラック :74
- デスク:39
- テーブル:32
- 棚 :25
- ボックス:15
- チェスト:12
失敗と反省
ロングテールキーワードにおける対策は残念ながら結果に結びついていない。これは「テーブル 120cm」などの検索順位を上げられておらず引き続きSEO対策を行うことで改善していきたい。しかし難しいことも分かってきたので「テーブル 120 40」などへの変更も同時に検討中。
忙しいことを言い訳に結局コンバージョン設定やkibanaの導入ができていない。効果測定の精度をあげるためにも今月中には導入し計測する必要がある。
プチビジネス1.5ヶ月運営レポート
はじめに
今回の1ヶ月レポート対象は、9月15日にリリースしたamazonの家具を寸法と価格から検索できる「家具サイズ検索」です。 学生の内にサービス立ち上げ経験を得たくてプチビジネスとして初めた。 作るのは非常に楽しいのですが冷静に分析する機会を作らないとなかなか難しいので、分析を行う。理由とその時何を考えていたかのログをとる意味で書いていくつもりです。 学生の内にサービス立ち上げや運営してみたい人の参考になればいいなー
サービスの目標
家具が一番売れるのは 3~4 月位だと思うので「 3~4月に1年間の運営費を稼げるサービス 」にしていくことです。具体的には、現在の 1 ヶ月運営費用が 23 $ 位なので 2万7千円 を 3~4 月に回収すること。
注意事項
Google analyticsの詳細なデータの開示が利用規約違反にあたるので四捨五入した値を公開することにします。 Amazon アソシエイトは大丈夫そうなので生の値で公開します。 なので全て約〇〇だと思って見ていただければ幸いです。
9月( 15 ~ 30日)
行ったこと
- コンセプトと使い方の動画をニコニコ動画にアップロード
- google search consoleを導入
- google analytics を導入
- SEO対策
- キーワード調査
- キーワードへの最適化
- URL設計の見直し
データ・ユーザ分析
- Google Analytics
- UU:80
- PV:720
- 直帰率:50%
- Amazon アソシエイト
- amazon商品ページ移動数:31
- 注文数:0
- 売上:0
- コンバージョン率:0%
失敗と反省
- サービスを5時間程止めてしまった...
- 単純な機能の追加でdev環境をすっ飛ばして導入してテストをきっちり行わなかったことが原因自分で決めたフローはだるくてもやろう
- URLを適当につけた...
10月( 1 ~ 31日 )
行ったこと
新規サイト紹介メディアに掲載してもらう
トップページの検索欄を見やすく改善する
- SEO対策
- とりあえずサイト名で検索して上位に表示されるようにキーワード変更をやってみる
- 被リンクを増やす
- メディア等に掲載してもらう
- つぶやく
- 自分の運営サイト(我々のPC部屋)にリンクをはる
データ・ユーザ分析
顧客セグメントを分けると以下に分類できる。
- 直帰した人:60%
- 検索した人:40%
- 検索して商品ページに飛んだけど買わなかった人:45%
- 検索して商品ページに飛で買った人:1.42%
その他に注目すべき点は
- どんな商品を見たのか? (261)
- テーブル:32
- デスク:32
- ラック:32
- チェスト:30
- ソファ:10
- 本棚:5
- ベッド:2
- テレビ台:2
- 収納:40
- どんな検索を行ったのか?
- ログ取ってなかった
失敗と反省
ブログ以外のサイトでAmazonアソシエイト審査に通すためにやった対策まとめ
はじめに
Amazon アソシエイトの審査もっとちょろいと思ってたんですが20回近く落ちたと思います。
検索すればブログの審査の通過例はたくさんありますが,逆にブログでないサイトの審査に関してはほとんど情報がありませんでした。
その為,Google Analyticsのアクセスとにらめっこしながら何度も申請し直す日々が続いていました。
ついに承認されたので何をやったのか記録を残す意味で書いていきたいと思います。
申請したサイト概要
一言で言えば,Amazonの家具をサイズ検索できるサービスです。家具サイズ検索
Amazonで家具を探すときに幅〇〇cmとか検索してもいい感じに検索できずイライラしたのがきっかけでした。
そこでProduct Advertising APIを使って商品情報を取得して正規表現で商品説明からサイズを取得してDBに保存して検索できるようにしています。
対策
Product Advertising APIで取得した年月日を表示する
価格や在庫数などを表示する場合必ず必要になるらしいです。
(例)山善(YAMAZEN) テレビ台 幅80 ダークブラウン YWTV8030(DBR3BK)は3238円です。(2016年 09月 12日時点の情報)yahooメールからGmailに変更する
関係あるかわかりませんがなんとなくGmailに変更しました。プロバイダのメールの方がいいらしいのでできる方はそっちを使った方が良いと思います。しかし今回はGmailで審査を通りました。住所・電話番号に全角文字列がないか確認する
今回確認の為にamazonのアドレス帳を編集して住所を編集した後,一応買い物しました。ファビコンとmetaタグのauthor,description,keywordsを設定する
サイトが未完成ではなくちゃんと完成しているように見せるためにエラーなどもすべて潰しましょう。サイトにAmazonアソシエイト・プログラム参加者と明記する
自分のサイトでは,「当サイトは、amazon.co.jpを宣伝しリンクすることによって、サイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムに参加しています。」と表記しました。アソシエイトへの申請フォームでサイトの説明を頑張って書く
これも効果があったのか無かったのかはわかりませんができることはすべてやるつもりで頑張って紹介文を書きました。footerに連絡先をできるだけ入れる
メールアドレス(amazonに登録されている)、電話番号を記入してサイトの信用度を上げる。申請URLをコンテンツのあるページにする
これが決定的だったようです。Analyticsを見ているとトップページを数秒間しか見ていないことが気になったので検索結果のページを申請URLとして申請した所審査を無事通過することができました。
結論
Amazonアソシエイトの審査スタッフの方に親切にすれば審査に通る。ページ遷移してサイトを審査するような手間を審査スタッフにかけさせてはいけない。
Amazonの家具サイズ検索サイトを作った
はじめに作成したサイト
一言で言えば,Amazonで家具を幅、奥行き、高さ、価格の範囲指定してサイズ検索できるサービスです。
今ではバージョンアップして,楽天,Yahooショッピングの家具も寸法から検索できるようになりました。 家具の情報は日々自動で更新・追加されています。 ぜひ使って見てください。
作ったきっかけ
棚をAmazonで探す場合、「棚 150」とかで検索すると思います。
しかし検索結果にはサイズは表記されません。
そのため幅150cmと思ってクリックすると違った大きさのものだったりするのが非常にイライラされられます。
他にも高さや奥行きなどの要素も含んだ検索はAmazonでは現状不可能です。 またmmとcmと表記が統一されておらずいい感じに検索できません。
しかもカテゴリを選択しないと価格の絞込さえできません。
そこでAmazonの家具を幅、奥行き、高さ、価格を範囲指定して検索できる家具サイズ検索サイトを作ろうと思いました。
使い方
詳細の使用感などは下の動画で
こちらは古いので使い方に関しては以下のページをご覧ください
利用技術
Product Advertising APIを使って商品情報を取得して正規表現で商品説明からサイズを取得してDBに保存して検索できるようにしています。
検索には、elasticsearchを利用しており高速な検索を実現しております。
最後に
利用した感想ご意見などは以下のフォームで送っていただけると幸いです。
皆様にぴったりサイズの家具との出会いがありますように!
Heroku 新料金体制
6月2日にHerokuからメールが来ていたので見てみると新料金体制になったらしいので少し読んでみた. すでにメールが来てから2日経っているので同様の記事が大量にあるだろうけど気にしない.
月1000時間まで無料枠
大きく変わった点は、クレジットカード情報を登録することでアカウント毎に月1000時間まで無料枠が割り当てられるようになったこと.
クレジットカード情報を登録されていないアカウントは、月550時間まで無料枠が割り当てられるようだ.
これによって24*31=750なので1つのアプリであれば無料枠内で24時間稼動が可能になった.
しかしながらアカウントごとに割り当てられるので複数のアプリケーションを動かす場合は注意が必要です.
なぜならすべてのアプリケーションの実行時間の合計が1000時間に収まるように時間を割り振ってやる必要があるためです.
まとめ
何はともあれ24時間稼動ができるようになったので喜ぶ人も多いのではないでしょうか?
Raspberry pi + Theta s + mjpg-streamerでストリーミング
概要
Raspberry piでTheta sとmjpg-streamerを使った360度ストリーミングしよう!
ほとんどやり方はこちらの記事を参考に行いました.
今回はストリーミング以外行わないのでDockerを使いません.
Viewer導入までを行います.
mjpg-streamerのインストール
ラズパイへのOSインストールはこちらを参考にRASPBIAN JESSIE LITEをインストールしました.
次にカメラを使えるようにします. 以下のコマンドを実行し,5 Enable Cameraを選択して次の画面でEnableを選びます. 最後にfinishで終了します.
sudo raspi-config
mjpg-streamerのForkプロジェクトであるjacksonliam/mjpg-streamerをインストールします.
sudo apt-get update sudo apt-get install -y apt-utils curl sudo apt-get install -y wget unzip sudo apt-get install -y libv4l-dev imagemagick sudo apt-get install -y libjpeg8-dev make gcc sudo apt-get install -y cmake sudo apt-get install -y g++ cd && wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip && unzip master.zip cd mjpg-streamer-master/mjpg-streamer-experimental/ && make
Theta Sの電源ボタンとカメラボタンを同時に押してライブモード(Theta Sの表面に青くLIVEと表示される)にしてUSB接続します.
その状態で以下のコマンドを実行すればストリーミングが開始されます.
cd LD_LIBRARY_PATH=mjpg-streamer-master/mjpg-streamer-experimental/ mjpg-streamer-master/mjpg-streamer-experimental/mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so -w mjpg-streamer-master/mjpg-streamer-experimental/www/ -p 8080"
ホスト名:8080で下のような画面が見えれば成功です.
360度見えますね!
Viewerの導入
上の画像でわかるようにそのまま配信しても見づらいのでViewerを導入しましょう!
ViewerとしてGitHub - shokai/theta-viewer.js: Animate multiple-Photos taken by Ricoh THETAを利用させていただきます.
apt-get install git vim cd mjpg-streamer-master/mjpg-streamer-experimental/www/ git clone https://github.com/shokai/theta-viewer.js.git mv theta-viewer.js theta-viewer cp theta-viewer/lib/* ./ cp theta-viewer/theta-viewer.js ./ vim theta_viewer.html
あとは以下のようなtheta_viewer.htmlを作成します.
<html> <head> <title>ThetaViewer.js - Animate multiple Photos taken by Ricoh THETA</title> <style> body, div { margin: 0px; padding: 0px; } #viewer { width: 100%; height: 100%; } </style> </head> <body> <a href="https://github.com/shokai/theta-viewer.js"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/82b228a3648bf44fc1163ef44c62fcc60081495e/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png"></a> <div id="viewer"></div> <script src="./async.js"></script> <script src="./three.js"></script> <script src="./OrbitControls.js"></script> <script src="./theta-viewer.js"></script> <script> var viewer = new ThetaViewer( document.getElementById("viewer") ); viewer.images = ["http://" + location.host + "/?action=snapshot"]; viewer.load(); function load(){ viewer.load(); setTimeout('load()',500); } setTimeout('load()',500); </script> </body> </html>
先ほど同様のコマンドを実行してストリーミングを開始します.
ホスト名:8080/theta_viewer.htmlで下のような画面が見えれば成功です.