garumとmeteoriteと私 3nd edition ver0.04
TRANSCRIPT
GarumとMeteoriteと私3nd EDITION Ver0.04
オープンソースライブラリ研究会
About me
• Shinobu Okano(@operandoOS)
• Mercari, Inc.
• Android Framework Code Reading の勉強会運営
• Android最高!!(遠い目…
※いつもどおり 釣りタイトルです
なぜライブラリを作るのか??
なぜライブラリを作るのか??
• 既存の仕組みや作業がクソすぎる
• 当然楽したいから
• キレイ事言ってる場合じゃねぇぞ!!
ライブラリを作るときに大事にしてること
• ライブラリ名は提供する機能に準じない
• RailsのKaminari
• SwiftのAlamofire
• AndroidのDagger
• キラキラname最高!!(子につけるのは別...
ライブラリを作るときに大事にしてること
• Github上で公開してるならGithub Pagesを作る
ライブラリを作るときに大事にしてること
• Github上で公開してるならGithub Pagesを作る
ライブラリを作るときに大事にしてること
• Github上で公開してるならGithub Pagesを作る
全然アクセスない
Androidのライブラリ作成で気をつけたいこと
• ProGuard
• 導入のしやすさ(Mavenでいっぱつ導入)
• Bintray便利
• 導入方法とUsageを書く
• Licenseの表記
• Sample Code or Wiki
Androidのライブラリ作成で気をつけたいこと
• Javadoc
• NDK使うなら対応してるcpufeatures
• ARM,x86,MIPS
• UIライブラリなら動きのanimation gifとか貼ってあげよう
• 動きを確認できるアプリをGoogle Playに上げるケースもある
Androidのライブラリ作成で気をつけたいこと
• Androidはライブラリが標準API化されることがある
• DEPRECATEDって書いてあげよう
Garum
Garumってどんなライブラリ??
Annotation style SharedPreferences
https://github.com/operando/Garum
Shared Preferences
The SharedPreferences class provides a general framework
that allows you to save and retrieve persistent key-value pairs
of primitive data types.
Shared Preferences
SharedPreferences pref = getSharedPreferences("FilaName", MODE_PRIVATE);SharedPreferences.Editor editor = pref.edit();editor.putString("key", value);editor.putInt("key int", valueInt);editor.commit();
Shared Preferences
• たったこれだけなのにアンチパターンが多すぎる
• 使い方が複雑すぎる
SharedPreferences Anti Pattern
• getSharedPreferencesが色んなところに書いてある
• 何でもかんでも一つのPreferenceに保存する
• セキュアじゃないMODE使ってる
• Key名がベタ書き→定数化してない
• グローバルな変数格納用に使用される
• などなど・・・
Garumはどのようにして生まれたのか?
• Android 開発アンチパターン勉強会 #1でLTすることになった
• http://connpass.com/event/10028/
• http://www.slideshare.net/shinobuokano7/shared-preferences-anti-pattern
• Androidのアンチパターンなんて腐るほどあるわ
• Shared Preferencesへのイライラが限界だった...
Garum - Initialize
Garum.initialize(getApplicationContext(), true);
Garum - Model
@Pref(name = "app_status")public class AppStatus extends PrefModel {
@PrefKey public String appName;
@PrefKey public int startupCount;
@PrefKey public boolean showNotification;}
Garum - Save
AppStatus appStatus = new AppStatus();appStatus.appName = "Garum";appStatus.startupCount = ++appStatus.startupCount;appStatus.showNotification = true;appStatus.save();
Garumの思想
• よりオブジェクトを意識した設計に
• 直感的な操作
Meteorite
Meteoriteってどんなライブラリ??
This library provides the ability to upload a screenshot
of your app to Slack.
Meteoriteはどのようにして生まれたのか?
• Roppongi.aar #2とpotatotips #23で発表することになった
• アプリのデザイン崩れとかのフィードバック方法に悩みを感じてた
• 隕石という名のスクリーンショットをSlackに落下させる話
• http://www.slideshare.net/shinobuokano7/slack-55455661
• Upload a screenshot to Slack
• http://www.slideshare.net/shinobuokano7/upload-a-screenshot-to-slack
スクリーンショットどうしてたか
QA
Engineer
スクリーンショットどうしてたか
QA < 画面崩れてまーす
Engineer
スクリーンショットどうしてたか
QA < 画面崩れてまーす
Engineer スクリーンショット REDMINEに貼ってくださーい>
QA何かしらの方法でスクリーンショットを取って貼る
スクリーンショットどうしてたか
Engineer
QA何かしらの方法でスクリーンショットを取って貼る
< 貼りましたー
スクリーンショットどうしてたか
Engineer
QA何かしらの方法でスクリーンショットを取って貼る
< 貼りましたー
Engineer見まーす
ありがとうございます!>
スクリーンショットどうしてたか
クソすぎる
• スクリーンショット撮りたい画面でNotificationをタップをタップして、必要な情報入れてSlackにPostする
• https://github.com/operando/Meteorite
Meteorite
Demo
Meteoriteの思想
• より素早いフィードバックと簡単な操作感
• 自分たちが好きなツールを限界まで使い倒す
• 1Post1URLが発行されるのでチケットにそれはる
• オープンなフィードバックとエビデンス
• 誰かの仕事を楽にしたいという気持ち
私
私ってどんなライブラリ??
• PDD(Presentation Driven Development)でライブラリを作ってきた
• 誰かの仕事を楽にしたいという気持ちがとても強い
• ユーザ目線を重視したものづくり
• 誰かが感じている不便さや疑問をそのままにしない
ライブラリ作りはProduct作りと同じ
• 自分の哲学をのせる
• 使う人のことを考えて設計する
• ライブラリ一つ管理できねーやつが
いいProduct作れるとは思えない(なんかごめん…
もらったissue達…
管理できてねー
Thanks!!