SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
US進出でのAndroid開発
in メルカリ
Mercari Inc.
今井智章
自己紹介
• 株式会社メルカリ Android エンジニア(2014.3 )
!
!
!
!
!
!
• 以前はSIerでインフラ系DBエンジニア(たまにjava開発)
2
twitter: tomoaki_imai
github: tomoima525
qiita: tomoima525
フリマアプリの機能開発、USアプリ開発
Agenda
• 言語対応の罠
• デザインの罠
• 開発環境作りの罠
3
本日はメルカリUS版リリースにおけるAndroid開発で
はまった罠について話します
メルカリUS進出
• 2014年9月中旬にUSローンチ(C2Cとしては初)
• クライアント開発期間
- 1ヶ月半(2014年7月末から着手)
• 前提
- iOS版, Apiは先行して開発
- One Source Multiple Products
- 開発環境は Eclipse
4
Android開発でのUS対応
• 言語対応
• デザインリニューアル
• US, JP並行開発環境
の整備
5
old new
言語対応の罠
そもそもAndroidは言
語対応に強いよね?
リソースフォルダ/res/values-XX
で何カ国でも対応できるし…
そんな風に考えている時期が
俺にもありました
言語対応は甘くない
• ①表記の国、文化的違い
- 値段 小数点有りドル $ 1,200.00
- 日付 JP 2014/12/05 -> 12/14/2014
- マイナス表記 ☓ - $12 ⃝ ($12)
- バリデーション関連 (zipcode等) etc
!
• ②翻訳チームとの協業
- strings.xml操作にgithubはハードル高い
- エンジニアの翻訳取込負担も上げたくない
9
①表記の国、文化的違いへの対応
• ヘルパー関数の実装
10
public abstract class StringFormatHelper {
public abstract String formatPrice(int price); //JP,USで実装が異なるものはabstract
public static final StringFormatHelper getInstance(){
StringFormatHelper sfh;
switch (Config.LOCALE_ID) {
case Const.LOCALE_JP:
sfh = new StringFormatHelperJP();
break;
case Const.LOCALE_US:
sfh = new StringFormatHelperUS();
break;
default:
sfh = new StringFormatHelperJP();
break;
}
return sfh;
}
}
インスタンス化の際にクラスを呼び分ける
• ヘルパー関数の実装
11
US,JPの各Helperクラスでそれぞれの処理を実装
public class StringFormatHelperUS extends StringFormatHelper {
private static NumberFormat COMMA_FORMAT
         = new DecimalFormat("$#,###.##;($#,###.##)");
@Override
public String formatPrice(int price) {
 //USで必要な処理を実装
}
}
StringFormatHelper sfh = StringFormatHelper.getInstance();
String currentSalesStr = sfh.formatPrice(currentSales);
利用時はインスタンスを生成して利用
Android Studio ならGradleのflavorを使う手もある
共通メソッドを1クラスで書けるメリットはあり
①表記の国、文化的違いへの対応
②翻訳チームとの協業
• Transifexの利用
- ローカライゼーションサービス
- 翻訳者がソースコードに触れることなく翻訳できる
- コマンドラインで翻訳を取込む事が可能
12
github
engineer
translator
string.xml
*.json
コマンドラインでupload, download
$ cd .tx
$ tx pull -$a -f GUIで操作
②翻訳チームとの協業
• 良いところ
13
<!̶- value/strings.xml ̶>
<string name= format_address >住所1: %1$s 住所2: %2$s</string>
<!̶- value-en/strings.xml ̶>
<string name= format_address"> Address1:%1$s %2$s </string> //%2$sが不要でも必須
• もうちょっとなところ
- strings.xmlのformat数をUS,JPで合わせないとエラーがでる
- 変換に十分対応していないファイル形式(json等)がある
- 翻訳を当て込む作業が自動化され、ミスが軽減
- 訳した内容をその場で実機確認できる
続いて、デザインの罠
iOSファーストで開発してい
るから、デザインはそれほど
考慮ないよね?
iOSのデザインをそのままxmlで
組めばいいんでしょ…
そんな風に考えている時期が
俺にもありました
Androidのデザインガイドライン
を考慮する
17
• ユーザーは各OSでのUXに慣れている。異なるUX
で惑わせない
!
!
!
• 社内のiOS比率が高い場合は注意。ユーザー目線、
ガイドラインを武器に戦うべし
- テキスト入力
- アクション(戻るボタンを置かない等)
- iconデザイン etc.
- Design: Pure Android等を参考にする

https://developer.android.com/design/patterns/pure-android.html
18
トータルなデザインを踏まえ、ガイドラインに沿っていない部分もある
メルカリデザイン比較例
Android iOS Android iOS
出品画面 購入画面
続いて、開発環境作り
の罠
US, JPの開発は担当を
分けた方が効率的?
リソース切替って結構面倒だし…
そんな風に考えている時期が
俺にもありました
並行開発で気づいたこと
• 開発中も容易にUS - JP切り替えられるの超大事
- 開発する機能の多くは共通
- 常にUS, JP両方を確認できれば、後戻りが減る
• Eclipseで柔軟な環境切替は面倒
• が、全部のリソースを切替える必要はない
22
並行開発環境を整備する
• 切替が必要なリソースファイルを属性で分けて、
さくっと確認できるようにする
23
属性 リソースファイル 対応
ローカル開発中に環境を
切替えるためのファイル
- Config(APIの向先)関連
のjavaファイル
- マスターデータ(json)
コマンドラインで切替できる
シェルスクリプト実装
apk作成時に切替える
ためのファイル
- AndroidManifest.xml
- analytics.xml
- authkeys
- res/values
ビルド時にファイルを総入れ
替えし、ビルド後は元に戻す
スクリプト実装
更に気軽に切替できるように試みた
• デバッグモードでロケール切替の仕組み
- アプリ起動中にJP-USが切替えられる
24
public class ThisApplication extends Application {
private int mLocale = Const.LOCALE_JP;
public void setAppLocale(int locale){
mLocale = locale;
Locale l;
switch(locale){
case Const.LOCALE_JP:
l = Locale.JAPAN;
break;
case Const.LOCALE_US:
l = Locale.US;
break;
}
Locale.setDefault(l);
Configuration config = new Configuration();
config.locale = l;
getResources().updateConfiguration(config, null);
}
}
Application内で言語設定を切替える
仕組み
が、これは失敗…
• アプリがExceptionを出すと、
OSの言語設定が適用されて
しまう
!
• JP, USでApiの向き先が異な
るため、クライアント内のユー
ザー情報に不整合が起きる
25
こうして、試行錯誤の日々は続く…
まとめ:US進出で得た知見
• 言語周りは
26
• デザインは、ガイドラインに沿ったデザインを
心がける
• 開発環境は柔軟に多言語へ切替えられる仕組み
を作る
- 異なる表記を柔軟に受け入れられる実装を作る
- 翻訳チームがスムーズに開発に参入できる仕組みを作る
メルカリではAndroid/iOSエンジニア募集中!

Contenu connexe

Tendances

メディアへの寄稿をやってみて〜きっかけと仕事の流れ
メディアへの寄稿をやってみて〜きっかけと仕事の流れメディアへの寄稿をやってみて〜きっかけと仕事の流れ
メディアへの寄稿をやってみて〜きっかけと仕事の流れ
sugimoto1022
 
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
Toru Makabe
 
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
leverages_event
 
[Android]趣味プログラマーな非エンジニアにアプリ開発を教える
[Android]趣味プログラマーな非エンジニアにアプリ開発を教える[Android]趣味プログラマーな非エンジニアにアプリ開発を教える
[Android]趣味プログラマーな非エンジニアにアプリ開発を教える
ichigotake .
 

Tendances (20)

複数Redmine環境におけるユーザ管理の効率化
複数Redmine環境におけるユーザ管理の効率化複数Redmine環境におけるユーザ管理の効率化
複数Redmine環境におけるユーザ管理の効率化
 
もっと良くなるHTMLアプリケーション設計と実装
もっと良くなるHTMLアプリケーション設計と実装もっと良くなるHTMLアプリケーション設計と実装
もっと良くなるHTMLアプリケーション設計と実装
 
[社内向け]Titanium勉強会
[社内向け]Titanium勉強会[社内向け]Titanium勉強会
[社内向け]Titanium勉強会
 
メディアへの寄稿をやってみて〜きっかけと仕事の流れ
メディアへの寄稿をやってみて〜きっかけと仕事の流れメディアへの寄稿をやってみて〜きっかけと仕事の流れ
メディアへの寄稿をやってみて〜きっかけと仕事の流れ
 
GoogleAnalyticsを使った効果測定
GoogleAnalyticsを使った効果測定GoogleAnalyticsを使った効果測定
GoogleAnalyticsを使った効果測定
 
カテゴリのサブプロジェクト継承対応機能追加
カテゴリのサブプロジェクト継承対応機能追加カテゴリのサブプロジェクト継承対応機能追加
カテゴリのサブプロジェクト継承対応機能追加
 
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
インフラエンジニア エボリューション ~激変する IT インフラ技術者像、キャリアとスキルを考える~ at Tech Summit 2018
 
PHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよPHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよ
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいか
 
はじめてみよう! WordPress プラグイン・テーマ翻訳
はじめてみよう! WordPress プラグイン・テーマ翻訳はじめてみよう! WordPress プラグイン・テーマ翻訳
はじめてみよう! WordPress プラグイン・テーマ翻訳
 
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
 
[Android]趣味プログラマーな非エンジニアにアプリ開発を教える
[Android]趣味プログラマーな非エンジニアにアプリ開発を教える[Android]趣味プログラマーな非エンジニアにアプリ開発を教える
[Android]趣味プログラマーな非エンジニアにアプリ開発を教える
 
Android m finger print(public)
Android m finger print(public)Android m finger print(public)
Android m finger print(public)
 
iOSアプリエンジニアの最近
iOSアプリエンジニアの最近iOSアプリエンジニアの最近
iOSアプリエンジニアの最近
 
iOSエンジニアの最近 株式会社マネーフォワード
iOSエンジニアの最近 株式会社マネーフォワードiOSエンジニアの最近 株式会社マネーフォワード
iOSエンジニアの最近 株式会社マネーフォワード
 
FirefoxOS勉強会#7 カメラアプリの作り方
FirefoxOS勉強会#7 カメラアプリの作り方FirefoxOS勉強会#7 カメラアプリの作り方
FirefoxOS勉強会#7 カメラアプリの作り方
 
兄弟アプリのロジック共通化とビルド高速化の実験
兄弟アプリのロジック共通化とビルド高速化の実験兄弟アプリのロジック共通化とビルド高速化の実験
兄弟アプリのロジック共通化とビルド高速化の実験
 
20150118 firefoxos-handson-helloworld
20150118 firefoxos-handson-helloworld20150118 firefoxos-handson-helloworld
20150118 firefoxos-handson-helloworld
 
アプリエンジニアのデザインに対するこころがまえの話
アプリエンジニアのデザインに対するこころがまえの話アプリエンジニアのデザインに対するこころがまえの話
アプリエンジニアのデザインに対するこころがまえの話
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With Kotlin
 

Similaire à US進出でのAndroid開発inメルカリ Mercari US App Development

すまべんLite@関西#4
すまべんLite@関西#4すまべんLite@関西#4
すまべんLite@関西#4
Shin Ise
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
Yoichiro Sakurai
 
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
Hiroyuki Mori
 
論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10
Noritada Shimizu
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
Mitsuru Katoh
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
Yoichiro Sakurai
 
すまべんLite@関西#1
すまべんLite@関西#1すまべんLite@関西#1
すまべんLite@関西#1
Shin Ise
 

Similaire à US進出でのAndroid開発inメルカリ Mercari US App Development (20)

20140629 firefoxos-devenv
20140629 firefoxos-devenv20140629 firefoxos-devenv
20140629 firefoxos-devenv
 
すまべんLite@関西#4
すまべんLite@関西#4すまべんLite@関西#4
すまべんLite@関西#4
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
 
Cordova利用アプリ開発経験談
Cordova利用アプリ開発経験談Cordova利用アプリ開発経験談
Cordova利用アプリ開発経験談
 
iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流
 
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化2013 11-09 デスクトップ・アプリの価値を高めるモダン化
2013 11-09 デスクトップ・アプリの価値を高めるモダン化
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10
 
Android Wearアプリ プレビュー版→正式版への移植ガイド
Android Wearアプリ プレビュー版→正式版への移植ガイドAndroid Wearアプリ プレビュー版→正式版への移植ガイド
Android Wearアプリ プレビュー版→正式版への移植ガイド
 
AndroiderがFirefoxOSアプリの多言化をしてみたら
AndroiderがFirefoxOSアプリの多言化をしてみたらAndroiderがFirefoxOSアプリの多言化をしてみたら
AndroiderがFirefoxOSアプリの多言化をしてみたら
 
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
 
これからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れこれからのNOTESモバイルアプリはこう作れ
これからのNOTESモバイルアプリはこう作れ
 
マスコットアプリ─ キャラアプリ─ 開発 with Xamarin
マスコットアプリ─ キャラアプリ─ 開発 with Xamarinマスコットアプリ─ キャラアプリ─ 開発 with Xamarin
マスコットアプリ─ キャラアプリ─ 開発 with Xamarin
 
Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!Visual Studio Code でプログラムをデバッグしよう!
Visual Studio Code でプログラムをデバッグしよう!
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
 
すまべんLite@関西#1
すまべんLite@関西#1すまべんLite@関西#1
すまべんLite@関西#1
 
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
非エンジニアのためのIT勉強会 ハイブリッドフレームワーク
 
Silverlight+COMにチャレンジ
Silverlight+COMにチャレンジSilverlight+COMにチャレンジ
Silverlight+COMにチャレンジ
 

Plus de Tomoaki Imai

Plus de Tomoaki Imai (8)

Android development at mercari 2015
Android development at mercari 2015Android development at mercari 2015
Android development at mercari 2015
 
Tips for better CI on Android
Tips for better CI on AndroidTips for better CI on Android
Tips for better CI on Android
 
Debot android debugging library
Debot android debugging libraryDebot android debugging library
Debot android debugging library
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
Developing better debug_components
Developing better debug_componentsDeveloping better debug_components
Developing better debug_components
 
Development at Mercari
Development at MercariDevelopment at Mercari
Development at Mercari
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできること
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
 

Dernier

Dernier (10)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

US進出でのAndroid開発inメルカリ Mercari US App Development