Introduction of Backend as a Service

はじめまして、こんにちは
Im Roy Xue, the new intern from China.

Today, Im going to introduce BaaS. Cloud platform is getting popular around the world. Previously, Azure and AWS provide IaaS and PaaS services[1], it provides great convenience to developers. As now, companies like Parse, LeanCloud start to provide BaaS service which makes App development easier than before.

BaaS is Backend as a Service, is a model for providing web and mobile app developers with a way to link their applications to backend cloud storage and APIs exposed by back end applications while also providing features such as user management, push notifications, and integration with social networking services.[2] Developers can use this service inside their apps via SDK or API.

BaaS has 4 main aspects.

1. Storage

App developers don’t need to worry about building backend anymore. BaaS will provide server and backend structure which apps needed. Storing data is schema-free, app only need to use JSON format to store data, and developers can use CDN to speed up file storage. This storage SDK support all platforms, including:iOSAndroid、Window Phone、Unity 3D、Cocos2D-x and JavaScript

iOS examples from LeanCloud[3]

AVObject *gameScore = [AVObjectobjectWithClassName:@"GameScore"];
[gameScore setObject:[NSNumber numberWithInt:1337]  forKey:@"score"];
[gameScore setObject:@"Steve" forKey:@"playerName"];
[gameScore setObject:[NSNumber numberWithBool:NO]   forKey:@"cheatMode"];
[gameScore save];
2. Message

App inside message system with safe authentication mechanism, convenient push service, and SMS authorization service.

3. Analysis

Analysis plays an important role in nowadays app development, by data analysis, we can know more details about user, and how to improve app services. BaaS provide easy way to run analysis on databases and return results on website.

4. App Modules

Feedback, In-App Search, Event API, OAuth Login can be done in several lines.

BaaS Demo provided by LeanCloud(中國語)
https://github.com/leancloud/ios-simple-demo

日本語のBaaS Docs
https://www.parse.com/docs/jp/

Some BaaS Service Provider:
LeanCloud:https://leancloud.cn/features/modules.html
Parse: https://www.parse.com/

References:
[1]: http://en.wikipedia.org/wiki/Cloud_computing
日本語: http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0

[2]: http://en.wikipedia.org/wiki/Mobile_Backend_as_a_service

[3]: https://leancloud.cn/docs/ios_os_x_guide.html

非エンジニアがいきなりRuby on Railsの勉強を始めてみた、第1回目

非エンジニアの@zippo_mです、こんばんは。
最近会社ではtwitterとかfacebookの広告をまわしまくっています。

開発部エンジニアの@return_right34さんを筆頭に営業部の@w_k0925と不定期で勉強会を退社後に始めたので、記録しようと思います。
やっと開発ブログで開発らしいブログデビューができた:D

使っている本

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

背表紙にちっこく機械オウムのイラストがあるのが気になります。
1回目はp29ページにのってる構造を見ただけです。

まずは、とりあえず環境を整えよう

Ruby on Railsってなに?っていうか今からなにやるんですか?それって社内でよく聞くけどHTMLとかCSSみたいなものなのか、PhotoshopとかIllustratorみたいなツールなんですか?
@return_right34『ま、とりあえずなんか検索して、てきとうに設定してみて』

ということで、ポカーン状態ですが検索してそれ通りにやってみた。

1.Railsを使う前にまず環境を整えよう
Rubyソースコードをダウンロードし、自分でビルドとインストールを行う
・HomebrewやYumなどのパッケージマネージャーを利用してRubyのインスートールを行う
複数のバージョンのRubyを管理するrBenvやRVMを利用してインストールを行う
(パーフェクト Ruby on Railsより)

最後にメモしたけどこれを読んだのはこの日の最後。

第1回目やったこと:設定編

使っているPC: MacBook Pro(社用) MacBook Air(使用)
かかった時間:2時間30分くらい
場所:FREEMAN CAFE/渋谷
電源・WiFiカフェ特集☆『FREEMAN CAFE』編 | sibch.tv

MacBook Air(使用)はまっさらなので、始めから設定

0.XcodeをAppStoreからダウンロード
(*時間がかかるから誰かに教わるときは先にダウンロードしておくといいよ)

1.ターミナルを開く

2.Homebrewのインストール
とりあえず検索してみて!って指示をもらったので検索。
以下がひっかかったのでその中のHomebrewのインストール、をターミナルにコピペ&実行
Homebrew — OS X用パッケージマネージャー

途中でエラーとかがでたら、それもエラー文章をコピペ&検索。
エラーかも分からなかったら、分からない文章をとりあえずコピペ&検索。
こちらも参考にさせていただきましたm(_)m

MacにHomebrewをインストールする - Qiita

3.ターミナルでいろいろ打ち込んでインストール(?)
gcc
rbenv
rbenvを入れたいからbrewもいれよー
brew install ruby-brew
rbenv install -l
rbenv install 2.2.0 ※数字の後ろになにもついてないやつ、何かついてたら開発中かバク直し中
rbenv global 2.2.0
rbenv rehash
これでだめだったから
http://qiita.com/issobero/items/e0443b79da117ed48294
ここにもどって、rbenv やりなおし。とばしちゃってた
rbenv version   バージョンの確認、2.2.0になってたから
rbenv rehash   リハッシュして
ruby -v      ルビーのバージョンを確認 :arrow_right:2.2.0になってた!わーい

私のメモにはこんなのがあったので、あとで見返すよ。
まっさらなMacなはずだし、人と同じことしてもパソコンによって思い通りに行かないみたいです。

MacBook Pro(社用)は以前上記のものをやったので、違う設定をしました。


最終的にLaunchpadにVirtualBoxが入ったのですが...すっかりそれまでの手順を忘れてしまいました...
明日聞いてまた更新します。

やったこと2:実行編

設定が一通り終わったところで、『rails newで新しくアプリをつくってください』という指示が来ました。

出来上がっているのは私のフォルダはこんな状態です
zippo>rails>game>沢山なにか入ってる 
このgameってフォルダの中に自動で沢山のフォルダや文章?(参考書.p29)が入っています。

railsってフォルダは既にあるのでTESTにして、思い出して今やってみました。

f:id:techinterfirm:20150304211638p:plain

あれ、、できあがったファイルは
zippo>TEST>todo>空っぽ...

そうでした。mkdir (メイクディレクトリー)はたしか"フォルダをつくる"...
これもどうやって作ったか忘れちゃったので、また明日。。。

今回わかったこと

  • わからないことはとにかくググってみる
  • とりあえずやってみるの精神
  • すすめられるがままにブログ書いてみたら、どこ分かってないかが分かってよかった


Xcodeってなに?Ruby on Railsってなに?もまだ分かんないですが、徐々に理解していきます。

楽にCIを実装したかったのでMagnumCIを使ってみた

最近社内のソースもみんなテストをしっかり実装してくれるようになっていて,嬉しい限りです.
@h3_potetoです.


Railsのアプリケーションがほとんどなので,テストはよくRSpecを使っています.
みんな慣れてきて,ちゃんとテストが通るソースを上げてくれるようになりました.

まぁ当たり前なんですけどね.



というわけで,そろそろCIを構築したくなったため,いい感じのCIサービスを探してみました.


ただし,インターファームの開発で使えるという条件は絶対に外せないので,以下の様な制約がかかります.

■ Gitlabに対応していること
■ プライベートリポジトリに対するビルドが行えること
■ 対応言語はRuby
■ お金はかかってもいい

候補にはいらないもの

以下のサービスは基本的にGithubでないと使えない,という理由のみで却下.

・TravisCI
・CircleCI

候補だったもの

Jenkins

老舗だしいいなぁとは思うわけなのですが,これってサービスではなくて自前でEC2インスタンスを用意して,CI用のサーバーをメンテナンスしなければならない.

これが非常に悩みどころで,「そこまでインフラ部分に工数をかけるのか」という問がつきまといます.


何はともあれ,OpscodeにてChefが公開されているので,OpsWorksに流し込んでみたわけですが……

opscode-cookbooks/jenkins · GitHub



うまくいかない.

これはなんか手こずりそうな上手く行かなさで,どうにもJenkinsがどうのというより,このChef自体を変えていかないといけない.


おそらく構築工数が結構かかりそう…….



あと,この手法のもう一つイヤなところとしては,CIのスピードはすべて自分で用意するEC2インスタンスのスペックに依存するってことですね.
そんなに手間かけて金かけてやるかなぁ……?


MagnumCIが大変便利


Magnum CI - Hosted Continuous Integration and Continuous Deployment Platform


以下の様な特徴があります.

Github,Gitlab,BitBucket,Beanstalk,その他カスタムのGitリポジトリに対応
■ 今のところ無料
■ HipChatやSlackとの連携


カスタムリポジトリに対応しているというのはすごく魅力的ですね.
適当なgitサーバーでもいけそう.

MagnumCI側の設定

プロジェクトを作ります.

f:id:h3poteto:20150107172414p:plain


この段階で,テストビルドができるので,一応ビルドしてソースが取得できているのかどうかの確認くらいはしておいたほうがいいかもしれません.

f:id:h3poteto:20150107172409p:plain

WebHookの設定が出てくるので,次はGitlab側を設定します.


ちなみに,ビルドはWebHookを受け取るところにフックしているようで,その他の設定は見当たりませんでした.

Gitlab側の設定

ビルドしたいプロジェクトの設定を開いて,DeployKeysと,WebHooksの設定をします.


Gitlab側は,WebHookのイベントとして,
・Push
・Tag push
・Issues
・Merge Request

が対応しているので,とりあえずPushとMerge ReqeustでWebHook設定しました.

f:id:h3poteto:20150107172417p:plain

.magnum.ymlの設定

一般的なRailsアプリケーションであれば,実はなにも設定しなくてもビルド,テストは行ってくれます.

$ bundle install --path .
$ bundle exec rake db:create
$ bundle exec rake db:schema:load
$ bundle exec rspec spec/

というのが自動実行されます.
Magnum CI - Hosted Continuous Integration Platform for Private Repositories



ここをカスタマイズしたい場合には,Railsアプリケーションのルートディレクトリに.magnum.ymlというファイルを作ります.

ここに以下のように記述することで,各種コマンドを上書きできます.

ruby: 2.0.0

install:
  - bundle install --path=vendor/bundle

before_script:
  - bundle exec rake db:create
  - bundle exec rake db:migrate RAILS_ENV=test

script:
  - bundle exec rspec spec/


ちなみにビルド時に実行するスクリプトについては,MagnumCIのプロジェクトの,Build Configurationからも変更できます.

f:id:h3poteto:20150107172421p:plain

定義できるタイミングは,

・before_install
・install
・before_script
・script
・after_script

です.

あとは,これらのファイルを追加して,GitlabにPushすると,同時にMagnumCIがビルドを実行してくれるので,ログを見守りましょう.




参考


プライベートリポジトリ無料のCIサービス「Magnum CI」を使ってみた - atskimura-memo