読者です 読者をやめる 読者になる 読者になる

Konifar's WIP

親方!空からどらえもんが!

potatotips #22 に参加してきたのでざっくりまとめてみる

モバイルアプリの知見共有会であるpotatotipsに初めてブログまとめ枠で参加してきました。

connpass.com

potatotipsはビックリするくらい人気になっていて、一般枠の倍率が4〜5倍、発表枠でも抽選に漏れてしまうこともしばしば。ですが実はブログまとめ枠はなぜかいつも空きが出るくらいスカスカで、ちょろっと申し込んだら普通に通りました。

ブログまとめ枠は5人もいるみたいですし、資料はいつものGitHubリポジトリに上がると思うので、Androidの発表を聞いて自分が考えたことをメインにざっくりまとめたいと思います。

CIと実行時間

@tomoaki_imaiさんによる、メルカリでやっているCIに関する知見の共有でした。

www.slideshare.net

最近はCIツールが充実しているので、手軽にツールで導入するところも多いと思います。Travis、CircleCIが有名ですが、メルカリさんでは実行時間を考慮して、 TravisとCircleCIの両刀使いという形をとっているらしいです。

今自分のいる会社では正直CIの時間がそこまでクリティカルな問題に感じていなくて、速くなった方がいいなぁとは思いつつ目を背けている感じでした。こういうCIまわりの改善ってのは日々の開発に追われて後回しになりがちなので、自分も見習って改善していかないといけないなぁと身が引き締まりました。

CIを2つ立ててパラで動かすっていうのはわりと現実的でよさそうだなぁと感じたので、もしかしたら真似させてもらうかもしれません。

また、本筋とは関係ないんですけど、build flavourが jpus で分かれているのが非常に興味深かったです。

正規表現の闇

@KeithYokomaさんによる、Android正規表現に関する知見の共有でした。

speakerdeck.com

一言でいうと AndroidJavaではない。実は正規表現が全然違う」って話でした。

これは必ずしもすべての人にとって困ることではないと思うんですけど、例えばテストでRobolectricを使っている場合、RobolectricはJVM上で動くのでテストがこける可能性がありますし、そもそも動きが違うのキモいっていう気持ちはわりとたくさんの人が持っているところだと思います。

内部のコードをみると一目瞭然で実装が全く違っていて、動きが違うのは知っていたけれど中のコードまで読んでいなかったのでとても勉強になりました。ただ、依然として どうしてこうなった感は強く残っているので、経緯も知りたいなぁと思ったりもしました。

2015/10/14(水)10:24追記

@KeithYokomaさんが記事を書いて補足してくれました。ありがとうございます! qiita.com

なぜ違うのか 一つにはライセンスの問題がありそうです。また、ICU は独立したプロジェクトとして、Unicode 標準を常にトラッキングしていたり、パフォーマンスのチューニングが施されていたりすることもありそうです。実際どの程度 Java のエンジンとくらべて良いかは測定できていませんが……

なるほど、こういう事情があったんですね。

groovyでテスト

@izumin5210さんによる、groovyのフレームワーク使ってテスト書いたら最高だったよという共有でした。

speakerdeck.com

素晴らしい点の1つとして、パラメータまわりのテストをいい感じに実行できるというのをあげていました。正直、自分は結構ゴリゴリ書くかぁって感じで思考停止していたので非常に興味深かったです。groovyはテストフレームワークとして昔から使われているものではありますが、Javaだけでなく色々な言語を触っているからこそ選択肢の幅が広がっているんだろうなぁと思いました。自分も見習いたいものです。

Javaのテストコードを最初に見せて、こういうところめんどくさいよね大変だよねという話をした上でSpockだとどう書けるかという流れの発表だったので、よい点がとてもわかりやすかったです。やっぱりコードメインの発表は見ていて面白くていいですね。

関係ないですけど、最初の自己紹介で 「うさみみ東大院生でググると出て来ます」って言ってたのは地味にすごいなと思ったので、自分もどらえもんでググって出て来るように目指していこうと思いました。嘘です。

sketch3の素晴らしさ

@androhiさんによる、sketch3入門の発表でした。

speakerdeck.com

sketchは初心者にも優しくて最高だよ という話でした。ざっとデザインしたりベクターデータに切り出したり、個人開発の時にかなりできることが広がりそうだなぁと感じました。AndroidはVectorDrawableがサポートされ、下位バージョンに関してもVectorCompatがそろそろ出るはずなので非常によさそうです。CLIが公式でサポートされているというのも、エンジニアにとっては嬉しいポイントかもしれません。

個人的にエンジニアとデザイナーさんはもっとお互いのことを理解していく方が幸せになると思っているので、エンジニアからの歩み寄りの第一歩としてもsketch3はよさそうだなと感じました。

自作CrashReport

@petitvioletさんによる、自作CrashReportを作ったよという話でした。

speakerdeck.com

ライブラリ起因のクラッシュだけ取りたいという問題を起点にして、 UncaughtException をいい感じにハンドリングして実現したとのことでした。

自分はCrashlytics使っていて、正直そこで拾っているエラーもちゃんと潰せていないので何とも言えないんですが、 ライブラリ起因のクラッシュだけ区別したい というのは要望としては普通にありそうなので、Crashlyticsでも対応してくれないかなぁと他責なことを考えたりしました。

画像サイズの縮小

@rejasupotaroさんによる、画像サイズの縮小に関する知見の共有でした。

自分も海外ユーザーメインのアプリを開発しているんですが、ネットワーク環境は日本とは比べものにならないくらい悪い地域があります。また、Androidの場合は1000円くらいの廉価端末が出回っていたりするので、CPUやメモリもかなり小さかったりします。インドネシアのユーザーがオフィスに遊びに来たことがあったんですが、Facebookアプリを開くのに10秒かかっていて唖然としました。

上りで制限がかかる場合は画像のリサイズをするしかないんですが、サイズ縮小は画質とのトレードオフが発生するので、どのくらいのサイズまで縮小するのが適切なのかという見極めが必要になります。

今回の発表では、インドネシアを例にして具体的な数値をもとに1080pxを基準にしていると話していて、とても興味深かったです。

地域によってそれらの基準値というのは変わってくるはずなんですが未だにそこの最適化はできていないので、少しずつでも対応していきたいなぁと思いました。

concealで暗号化

@ksk_kbysさんによる、@concealを使った暗号化の話でした。

speakerdeck.com

一番安全なのはデータを保存しないことと話していたのが印象的でした。正直暗号化については全然わかっていなかったので、ちゃんとやろうとすると大変だけどライブラリがあるよ、という話だけでもかなり役に立ちました。詳しくはQiitaにまとまっています。 qiita.com

普段自分が全然手がつけられていないところの発表を聞くと、何かやろうとした時の引き出しになるのでいいですね。もちろんそれがそのまま知識になるわけではないですが、まずは知ることが大事だったりするので来てよかったです。暗号化の話でこんなこと言ってると怒られそうですが。。。頑張ります。

まとめ

potatotipsは勉強会の中でも発表のレベルが高くて、どの発表も非常に勉強になりました。

ブログまとめ枠での参加は初めてでしたが、めっちゃ疲れました。毎回まとめてる人は本当すごいなぁと思います。感覚的には普通に参加するより3倍くらい神経使った気がします。いつも発表枠で参加して自分の発表以外はハッシュタグで色々つぶやきながら見れるのって幸せなんだなぁと思いました。

最後は発表とは全く関係ないところですが、飯は最高にシャレオツで美味かったです。

f:id:konifar:20151013212902j:plain

エントランスももちろんシャレオツでした。

f:id:konifar:20151013213000j:plain

何より会場がすごかったです。

f:id:konifar:20151013213029j:plain

ちょっと後ろを見ると、広大な土地が広がっていました。

f:id:konifar:20151013213056j:plain

人が増えるにあたりオフィスを広げるそうで、半端じゃない広さでした。メルカリさんさすがですね。

現場からは以上です。