GarumとMeteoriteと私 3nd Edition ver0.04

Post on 10-Feb-2017

1.053 views 0 download

Transcript of GarumとMeteoriteと私 3nd Edition ver0.04

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!!