Debuginfo

思考とアウトプット

React.jsを触ってみた。Railsとの相性は?

WebDB Press vol.86のReactによるフロントエンド開発を写経してreact.jsの勉強してみた。 Reactive ProgramingやVirtual DOMを意識せずに書けてしまいました。

個人的な観点からは、やはりAnother JS Frameworkという感じ。 AngularJSのようにフロントでグイグイやるアプリには、react.jsはオプションの一つになるのではないでしょうか?

Fluxは来月号で解説するようですが、FrameworkなのでカオスになりがちなJSのコードを綺麗にできる。DOM操作を考えずにコードできるというのがメリットのようです。 デメリットとして、JQueryとの相性、デザイナーとの共同作業が難しくなるということがあるみたいです。

Railsとの相性は?

Railsの哲学はなるべくJSを書かないというようなものだと思ってます。 react.jsに限った話ではないのかもしれませんが、JSフレームワークとの相性は良くないように思います。 APIに特化したRailsサーバには良いと思います。 なので、会社の規模が大きくなって、分業できるリソースがあって、チーム全体がreact.jsを使えるようになればproductionに導入できると思いますが、リソースがないスタートアップでこれを選ぶのはやや難しいかなと思います。

react.jsがフロント開発のオーソリティになればいいですね。まじで。

SwiftでFacebook Messenger SDKを導入する

f:id:shoheik:20150328114955j:plain f:id:shoheik:20150328115002j:plain

二日ぐらい前にF8で発表されたやつですね。 アプリの表現力が上がるのは間違いないので実装しました。

Good Design InteriorというインテリアのECサイトを作ってます。 これに入れ込みます。商品を友達と相談して決める機能を追加するかたちになります。

とりあえず、Basicで。(Optimizedはガイドラインと合うか調べる必要がありそう)

1. Install Facebook SDK

2015年3月28日時点で、Cocoapodsに対応していないのでSDKをダウンロードしてきてインストールする

2. Facebook SDKをプロジェクトに取り込む

Xcode->Project->General tab->"Linked Frameworks and Libraries" -> '+' -> Add Other -> ~/Documents/FacebookSDK/FBSDKMessengerShareKit.frameworkを選択

3. ヘッダーファイルに下記を追加

(ヘッダーファイルの作り方は省略)

#import <FBSDKMessengerShareKit/FBSDKMessengerShareKit.h>

4. Info.plistに追加

f:id:shoheik:20150328115008p:plain f:id:shoheik:20150328115012p:plain

5. コードを書く

ボタン設置

UIViewをストーリーボードで設置してそこに差し込みました。

@IBOutlet weak var btnView: UIView!
override func viewDidLoad() {
       var fbBtn = FBSDKMessengerShareButton.rectangularButtonWithStyle(.Blue)
        fbBtn.addTarget(self, action: "_shareButtonPressed:" , forControlEvents: .TouchUpInside)
        //setting for fbBtn if needed
        self.btnView.addSubview(fbBtn)
        ...

ボタンが押されたイベント追加

FacebookのサンプルでAND(&)をとっててこれをSwiftにするのに時間を使いました。 sharingImageはUIImageオブジェクトです。差し込みたいImageを入れます。

    @IBAction func _shareButtonPressed(sender: AnyObject) {
        let result = FBSDKMessengerSharer.messengerPlatformCapabilities().rawValue & FBSDKMessengerPlatformCapability.Image.rawValue
        if result != 0 {
            // ok now share
            if sharingImage != nil {
                FBSDKMessengerSharer.shareImage(sharingImage, withOptions: nil)
            }
        } else {
            // not installed then open link. Note simulator doesn't open iTunes store.
            UIApplication.sharedApplication().openURL(NSURL(string: "itms://itunes.apple.com/us/app/facebook-messenger/id454638411?mt=8")!)
        }
    }

感想

はやくSwiftでサンプルが欲しいですね。 関数を探り探り感覚で実装する感じになってます^^;

今のレビューが終わったら早速バージョンを更新します! なのでアプリに入るのは4月上旬かな。

参考

サインアップ(ユーザ登録完了)後にGoogle AnalyticsのイベントをRailsから送る

flashを使ってやりました。

Registrationのコントローラ側にflashをセットして,

# Users::RegistrationsController < Devise::RegistrationsController
flash[:first_sign_up] = true

Viewで発火。

<% if flash[:first_sign_up] %>
<script>ga('send', 'event', 'signup', 'done')</script>
<% end %>

参考: * user2371191氏のエントリ javascript - How do I use Google Analytics custom events inside my rails controller? - Stack Overflow

Swift XCTest - Use of unresolved identifier

大きな声じゃ言えませんが、iOSアプリのテストを書いてません。 速さ重視でやってきたので、そろそろ安定性と仕様周りを固めるためにテストを書くことにしました。

が、、テストを動作させるのにめっちゃハマりました。計5時間。。

 Use of unresolved identifier

が出まくって、どう解決するかがググっても出てこない。。 というより、いくつか情報があるけど解決しなかった。 おそらくxodeのバージョンとの組み合わせがあるのだろう。

で私のケースの解決方法は簡単で、

ヘッダを追加して。

f:id:shoheik:20150308173841p:plain

ターゲットに追加するだけ。

f:id:shoheik:20150308173917p:plain

Swiftのつらさは情報が少ないことか。。

あとXCTestの情報自体少ない。XCTestでテスト書いてないのかなー。