Furyu
[フリュー公式]

Tech Blog

フリュー株式会社の技術ブログです

2018年12月21日

araki

Firebase A/B TestingでアプリのABテストをしよう!

この記事は フリューAdvent Calendar 2018の12/21分です。

こんにちは。ピクトリンク事業部開発部の荒木です。普段はピクトリンクというアプリのAndroid版を開発しています。世間ではスマブラの話が多いなかで、まだスプラトゥーンをやってます。ウデマエはエリアのS+が最大なので、まだXに到達してません。知り合いの子供(ガチホコのウデマエX)に「エリアでS+ならすごいよ。僕はエリアはA+だし。」とフォローされて心が折れそうですが、Xになるまで頑張りたいと思います。

今回は、Firebase A/B Testingをピクトリンクアプリに導入した話を書きたいと思います。

Firebase A/B Testingとは?

https://firebase.google.com/docs/ab-testing/?hl=ja

Firebase A/B Testingを使うと、Remote ConfigまたはNotifications Composerを使ってアプリの画面や通知に関するABテストの実施ができます。A/Bパターンの振り分けはもちろん、結果の分析も実施され、Firebaseのコンソール上で見ることができます。

今回は、Remote Configを使ったABテストについて説明します。

Remote Configを使ったABテスト

テストの作成

ここからは、テスト作成の手順について説明します。画像多めでやっていきます。

① コンソールの左ペインからA/B Testingを選択

左ペインのABTesting

②「テストを作成」を選択

テストを作成

③ Remote Configを選択

RemoteConfigを選択

④ 基本情報の入力

④基本情報の入力

これが、Remote ConfigによるABテストの作成画面です。まずは、テスト名とテストの説明(任意)を入力してください。
今回は、ボタンの色を変えるテストを想定して「ボタンの色」としてみました。

⑤ ターゲット設定

⑤ターゲット設定

テスト対象となるユーザーを設定します。

ターゲットユーザー  アプリのIDやバージョン、ユーザープロパティによって対象を絞ります。
ターゲットユーザーの割合  ターゲットユーザーのうち、何%がテスト対象になるかを設定します。
100%ならターゲットユーザー全員が対象になります。
アクティベーションイベント
(任意)
 このFirebaseイベントが送信されることで、ユーザーがテスト対象になります。
たとえば、特定の画面に遷移したイベントなどを指定します。

⑥ 目標設定

⑥目標設定

コンバージョンの設定をします。

メインとなる目標としてFirebaseのイベントを1つ選択します。このイベントの送信が、コンバージョンとしてカウントされます。また、別のFirebaseイベントを追加したり、推定収益やクラッシュフリー率などを目標に設定することができます。

 ⑦ バリアントの設定

⑦バリアントの設定

次は、バリアントの設定です。バリアントの設定をすることで、Remote Configで取得できる値が変化します。「パラメータ」の部分には、Remote Configのパラメータキーを設定します。「値」の部分にはパターンごとにRemote Configが返す値を設定します。

今回は、 ab_test_param キーで、コントロールグループ(Aパターン)ではBLUE、BパターンではREDを返すような設定にしました。

この設定をしておくと、アプリ側でRemote Configを使って ab_test_param キーで値を取得するとBLUEまたはREDのどちらかが50%の確率で取得できます。

④〜⑦の設定が終わったら画面下の「確認」ボタンを押します。

⑧ テストの開始

⑧テストの開始

テストの内容を確認したら、「テストの開始」を押すとテストが開始します。

ちなみに、「テスト端末を管理」を押すと特定の端末でABパターンを固定する設定ができます。

テスト結果の確認

2週間ほど待つとテストの結果がでます(十分なサンプル数がない場合は終わらないかもしれません)。

下の画像のように、最も効果的なパターンが表示され、コンバージョン率や改善率も提示されます。

ABテストを終了する際に、オリジナルのパターンに固定するか、最も効果的なパターンに固定するかを選択することができます。

テスト結果①

テスト結果②

さいごに

この記事では、Firebase A/B Testingの導入方法と結果の確認について説明しました。Firebase A/B Testingを使うことで、とても簡単にABテストを実施することができます。

ABテストを上手く活用しながらどんどんサービス改善をしていきたいと思います!


2018年12月17日

adachi

Reactive Swift に Completable 的なものを導入した話

こんにちは。
ピクトリンク事業部の足立です。

ピクトリンクはプリントシール機で撮影した画像データを使ったコミュニケーションツールで、私はそのiOS版のアプリの開発を担当をしてます。

 

最近は、12/10に遅ればせながら、スマブラSPを買いました👋
一応ほぼ全作やっているので、使命感に駆られるように、大乱闘を繰り広げる毎日でちょっと寝不足気味です😪
アドベンチャーモード、ふつうレベルでも意外に難しく苦戦しています。楽しいです✨

 

では、本題に入りたいと思います。

 

この記事は フリュー Advent Calendar 2018 の 12/17(月) の記事になります。
今回はピクトリンクアプリの開発で導入している Reactive Swift をプロジェクト内でカスタマイズしたお話です。

 

きっかけ

ある日のPRレビューを実施していた時のことです。
 
足立
  「ここ SignalProducer<Void, HogeError> なんですけど、呼び出し元が observer.sendCompleted() しかしていないので then(_:) で繋げないと動かないと思いますよ」

メンバーM
  「え、そうなんですか? I/Fの定義だけだとわかりにくいし、なんとかならないんですかね」
 

的な会話が繰り広げられていました。

たしかに、SignalProducer<Void, HogeError> だけを見ると completed イベントしか通知されるとは思いませんよね。
実装をするたびに、関数の中を調べるなんて時間の無駄ですし、そんなわかりにくい設計は無くすべきです。

 

ということで Completable 的なものを導入する

「じゃあ、どんな感じにしようか?」
 

と、設計しているときに「完了のみの通知だし Completed? Completable? 的な感じですかねー」と進んでいき RxSwift 的には似たような機能はないのか?
と調べ始めました。
 

ありました。RxSwift / Completable

Completable についての詳しい説明はここではしませんが、 Completable そのものを返却できるような設計のようです。
Reactive Swift でそこまでのカスタマイズをするとなると、とてもじゃあないですが大変です💦
 

そこで、弊社iOSアプリ開発チームでは 専用のオブジェクトを通知することで Completable のような扱いにする としました。

 

やったこと

  • 通知に使う専用のオブジェクトを作成
  • Completable の時に使わないメソッドの非推奨化

 

通知に使う専用のオブジェクトを作成

こんな感じで Completable を定義しました。

`Completable` の時に使わないメソッドの非推奨化

通知されるイベントが completed のみになるので、間違った実装にならないために、 SignalProducerSignal などで定義されている幾つかのメソッドを利用させないようにします。
ReactiveSwift / UninhabitedTypeGuards.swift を参考にしました。
 

主に startWith***flatMap など value イベントの通知で使用するメソッド周りです。
以下は SignalProducer 周りの定義を抜粋しています。

 

使い方

基本的には通常の Reactive Swift の実装通りです。
Value の指定を Completable にするだけです。

 

まとめ

導入した結果としては、とても良かったと思います。
きっかけ でも触れましたが、PRレビューの際の
 

  • completed イベントのみしかこない実装ではないか?
  • value イベントが通知される前提の実装になっていないか?
     

などの、メソッドの定義をだけでなく実装の中身まで遡って見る必要がなくなったと思います。
   = PRレビューでの不要な指摘も減る(する側もされる側もハッピー😉)
 

実装するときも CompletableTypeGuards.swift の設定のおかげで間違った実装を防げるのも地味に良かったりします。
慣れていけば 使えない ことはわかっていきますが、プロジェクトにJOINしてきた人たちにとってはWarning表示という目に見えるカタチで知らせてくれるのも良い感じです。
 

と、ここまで良かった点を書いてきましたが、念のために。
Completable の使用にあたっては用法/用量をまもって欲しいと思います。
便利だからといって 「本当に Completable の通知で良いのか?」 という「その機能の責務」を考えずに実装を進めることは、その時は良くても数週間後、数ヶ月後にタイヘンなことになるかも・・・😇

 


2018年06月25日

furusin

フリュー主催の勉強会(京都Devかふぇ#2)を開催しました!

こんにちは。ピクトリンク事業部の古川です。

前回に引き続き、フリュー主催の勉強会を開催しましたのでご報告します。

前回のレポートはこちらから

京都Devかふぇ#2 〜WWDC & Google IO総復習会〜

今回も30名以上とたくさんの方々にご参加頂きました!

新たな取組みとして「突発LTやりたい人がいたらどうぞ!」としてみました。

実際には手は上がらず私が登壇しましたが、発表における門扉を広くできたらなと考えています。

 

勉強会の様子

15分発表枠

トップバッターは弊社の足立より、WWDC 2018 のまとめを発表しました。

IMG03135

WWDCの情報は日本語では意外と多くなく、情報を欲している方が多かったようで、皆さん食い入るように聴かれていました。

発表資料はこちら

 

2人目は @kwmt27 様より、Google IO 2018で発表されたNavigation Architecture Component についての発表でした。

Navigation Architecture Component(京都Devかふぇ バージョン) from Yasutaka Kawamoto

実際にGoogle IOに参加されただけあって、非常にわかりやすく、かつ深く解説されていました!

XcodeのStoryboardに似ており、注目されているコンポーネントです。

 

3人目は@AkihiroTokai 様より、実際にGoogle IO 2018に参加されたレポートの発表でした。

現場の写真をたくさん見せて頂き、当日の臨場感をたくさん感じられる発表でした!

LT大会

1人目は弊社の森嶋より、WWDCで発表されたiOS12におけるUITextContentTypeについての発表でした。

IMG03137

ユーモアを交えた発表で、会場からは笑いがあり、LT大会ならではな感じがあってとてもいい雰囲気でした!

UITextField iOS12 from kenta morishima

最後は私がGoogle IOでも会場で実際に触る場所が設けられた、Google Codelabsを実際に触ってみた感想について発表しました。

意外とハマり所もありますが、非常に良いツールですので皆さんにも触ってみて頂きたいです。

Google Codelabsをやってみた from furusin

 

懇親会の様子

 

簡単ですが食事を用意し、前回に引き続き好評頂きました!

IMG_20180615_195730749

IMG_20180615_195711721

今回から、ティーンズやソフトドリンク派な皆さん向けにステッカーを用意しました。

IMG_20180615_200501595

これで間違ってお酒を勧めてしまい「あああ・・・すみません・・・」を減らす対応ができました。

まとめ

参加した皆さんもたくさんTwitterでツイートしてくださり、とても盛り上がった勉強会となりました!

懇親会でお話した方から「とても楽しいからまたやってほしい!」というお声を頂きましたので、

是非ともまた開催したいと思います!


2018年06月4日

furusin

フリュー主催の勉強会を開催しました!

IMG02937

 

こんにちは!ピクトリンク事業部サービス開発2課の古川です。

5/25(金)に、先日告知していました勉強会を開催しました。

30名程度集まれば大成功かな、と思っていたところに55名もの方が参加してくださり大盛況となりました。

また、ハッシュタグ #KyotoDevCafe でもたくさんツイートがありました。

今回はそのレポートをお送りします。

勉強会の様子

大盛況となったことから、多少席が詰まってしまったことは申し訳ない限りです。

ですが皆さん発表者のお話を食い入るように聞かれていました!

こちらは始まりの挨拶の様子です。

IMG_20180525_190353

初めてAndroidアプリを作ってみた話やiOSのニッチな話、

Swiftをアプリからサーバサイドまで使い倒した話まで幅広く発表いただきました!

懇親会の様子

簡単ですが弊社よりケータリングを用意しました!

IMG02949

カツサンドが非常に好評でした!

運営メンバーも美味しくいただきました。

また、懇親会中に弊社荒木より突発的LTがありました!

IMG_7554

このLTは本当に突発的でしたが意外とウケていたようで、非常に好評でした!

最近流行りのVRに関した発表で、Daydreamを持ってきて装着していました。

 

全体を通して

今回は「モバイル」という少し広めのテーマでの開催となりましたが、Android/iOSのバランスがが丁度よく、開場も盛り上がっていました。

また、難易度もコアな発表から初心者向けのものまで幅広く、多くの方に楽しんで頂ける内容になり、

運営として非常に嬉しい限りです。

初めての開催でしたので拙い部分もあったかと思いますが、どんどん回数を重ねてより良い勉強会にしていきたいと思っております。


2017年01月30日

adachi

try! Swift Tokyo 2017 に協賛します!!

こんにちは
コンテンツ・メディア第1事業部の足立です。
ピクトリンクというプリントシール機で撮影した画像データを使ったコミュニケーションアプリのiOS版の開発を担当しています。

 

弊社は2016年に引き続き3月2日から行われる try! Swift というイベントにシルバースポンサーとして協賛させていただきます。

 

try! Swift

HP: https://www.tryswift.co/tokyo/jp
スケジュール: https://www.tryswift.co/tokyo/jp#schedule

「try! Swift」はプログラミング言語Swiftに関するコミュニティ主催のカンファレンスです。
ベストプラクティス、アプリケーション開発、サーバーサイドSwift、オープンソースSwiftなど、Swiftに関する技術情報とコミュニケーションを目的に2017年3月2日〜4日の3日間にわたって開催されます。

 

去年は3日間全て講演でしたが、今年は3日目は参加者によるハッカソンを行うようです。
また、登壇者の講演とは別に、try! Swift の参加者によるライトニングトークセッションも用意されています。

 

登壇者による講演もですが、ライトニングトークでどの様な発表を聴けるか楽しみですね

 

Swiftを使用した開発について

弊社の手掛ける ピクトリンク というiOSアプリ(Android版, Web版あります)では、 Swift を使用して開発を進めています。

 

2014年のWWDCで Swift のBeta版が発表された頃、アプリの全面的なリニューアルを行っていました。
その頃に思い切って「Swiftへ移行しましょう。今変えないでいつ変えるんですか」的なことをチーム内で提案したのを覚えています。
発表まもないうえに初めての言語でしたので、 Objective-C からの作り変えに楽しくも辛い(?)日々が良い思い出です。

 

SwiftVersion 1.0, 2.0 そして Version 3.0 と約2年をかけてバージョンアップされて来ました。
バージョンアップによる言語仕様の変更などに伴う修正などは覚悟してしていましたが、大幅な仕様変更には泣かされました。
ですが Objective-C から Swift へ移行することで、Optional・Optional Chainning などを利用できる様になり、開発効率や可読性などが大幅に上がりました。
今ではあの頃に Objective-C から Swift へ移行しておいて本当によかったと思っています。

 

まだ、Swift が怖くて手が出せてない方や、Objective-C からの移行コストを気にして Swift に移行できていない方がいるとおもいますが、
今、この Tech Blog を見た瞬間から1行、1機能でも良いのでぜひ Swift で実装してみてはいかがでしょうか!?

 

みなさんもぜひ try! Swift してみませんか。
Swift 楽しいですよ!!

 

去年の記事: try! Swiftに協賛します