今年もiOSDC2019に参加しました。あいにく今年は、2日目に予定がありるため、前夜祭と1日目午後のみ参加になりました(ランチも食べられなかった……)。ちなみに、前夜祭で聞いたセッションの感想はこちら → 前夜祭の感想。このポストでは、1日目(9月6日)に私が聴講したセッションの感想をまとめます。

※ 参加記録としての位置づけなので、ここから先を読むという方は、見出しだけチェックするのがおすすめです。


1日目で聴講したセッションは以下の通りです。

  • 画像処理における、UIImageとCGImageとCIImageの効果的な使い分け(@kotetuさん
  • FatViewControllerを安全に書き換える方法が見つからなかったので、どういう痛みを許容するか考えた(@ktanaka117さん
  • LTセッション
    • 日本のサマータイムに苦しめられた話(@the_uhooiさん
    • Property Delegatesがもたらす新しいSwiftプログラミング(@darquroさん
    • LLDBデバッガで不具合の原因を特定して開発速度を上げよう(@Qoo_Rusさん
    • Core MLで実現する爆速のARサイズ計測(@kokoheiaさん
    • 1ヶ月半でプッシュ通知許諾率を17%から40%にあげた話(@sky_83325さん
    • 完全に同じ開発環境を素早く用意できる(もしくはできない)技術(@Soltiさん
    • もし文系卒の女子エンジニアが 5年もののiOSアプリにユニットテストを導入しようとしたら(@Ni5_21maimaiさん
    • AR Quick Lookを家具ECサイトに導入した話(@nesskazuさん
    • 個人開発のアプリが輝くために(@ahiru_starrrさん
    • GitLabRunnerで始める自前CI環境(@ikichiemonさん
    • Swiftでつくるファミコンエミュレータのススメ(@zetta1985

LTセッションは、2会場あるので毎回選ぶのが難しい……。


iOSDCに参加した意義みたいな部分を強調していきたいので、見出しはセッション名ではなく、学んだこと・得た知識の要点を記載していきます。

Core Image Frameworkには、リサイズアルゴリズムやフィルタが充実しているとわかった

栗山徹さん(kotetuさん)の発表は、名刺管理アプリの名刺認識処理を改善するプロセスで理解した、UIImage・CGImage・CIImageの使い分けの話でした。そもそも普段使う画像クラスはUIImage・CGImageあたりしか知らず、CIImageは初めて知りました。Core Image Frameworkには、リサイズアルゴリズムなどフィルタ処理が充実しており、またレンダリングするときまで画像処理は遅延する特徴もあるそうです。

いま私は画像系のアプリ案件も受けているので、すぐに活かせそうな内容でした。

FatViewController改善時は、一時的に手動テストで折り合いをつけつつ、ユニットテストを導入していく

ダンボー田中さんの、FatViewControllerをどうやって安全に改善していくかの話。あいにくスライドが見当たらないので、感想のみ。 テストがあれば安心してコードを書き換えられるけど、テストを入れるにはコードを疎結合に書き換えないといけないといった、いわゆるデッドロックしている場合の話。BDDなどいくつかテストも考えられるわけだけど、出した結論は、一時的に手動テストする痛みを我慢するというもの。シチュエーションによって、とりうるテストは変わるし、全てをテストすることはできない。すぐに完璧なものはできない。最低限できていないところに1つ、テストを入れようと。

時間は連続したものではない、サマータイムが開始する年月日をDateに変換すると、nullになる

uhooiさんの発表は、日本で過去に実施されていたサマータイムに苦しめられた話。 いま日本ではサマータイムが導入されていないので、00:00:00〜00:59:59が存在しない一日を経験することはまずありません。時間は連続したものだと、無意識に信じています。しかし、 1951/05/06 00:00:00 JST をDateに変換すると、なんと null。サマータイム開始日の00:00:00〜00:59:59は、nullになるようです。とくに、年月日だけをもとにDateオブジェクトを作成するときは、午前0時のDateが作られるので、nullになる可能性があり注意が必要。

Property Wrappers、まだ理解できていないけど超便利そう

darquroさんの発表では、Swift 5.1から追加されるProperty Wrappersの話。Property Delegatesと言われていたとのこと。いわゆるその名の通り、プロパティのextentionのようなイメージ。説明できないから、改めてキャッチアップしておきたい。特に、UserDefaultsをラップして扱いやすくするなど、便利な使い方ができそうなので、試してみたい。

LLDB、po以外に ‘p’ ‘v’ も使える

クウルスさんの発表では、Xcode LLDBで使えるコマンドの紹介。popvがあること、それぞれの特徴を紹介していました。 いままで po しか使ったことしかありませんでした。今度からは、vやpも使うようにしたいです。

画像認識で服のサイズを計測、魅力的な技術の適用

iPhoneの定規アプリでは、矩形平面の面積や物の長さを調べることができます。Kohei Araiさんは、Core MLを使用して、服のサイズを推定する処理を爆速にした話をしていました。服の出品作業の手間を楽にするような、こういう形で機械学習を適用していくのはとても魅力的。こちらもスライドが見当たらないので、感想のみ。身幅や着丈は5cm程度の精度で推定できるようで、袖の長さは10cm程度の誤差があるようです。肩の位置の推定が難しいんだそうです。

初回起動の動線の中で、通知許諾をとるべし

プッシュ通知許諾は、自然な流れで、機能の意義を伝える。これも大事なんだけど、akutsuさんの発表によると、初回起動の動線の中で行うことがもっと重要のようです。たしかに、初回の動線で許諾を取ることができないと、初回以降離脱してしまった休眠ユーザーを起こすことができなくなってしまいます。Rep…社の人も、「起動時にいきなり許諾画面を表示する手法で、効果が出ることもあります」なんて言ってたのを思い出しました。

テストは、まず1つでも書き始めることが大事

Matsui Maiさんは、1年前までテスト0行の5年ものアプリでも、まずテストを書いてCIで動かそうという話でした。そして、新しい機能は必ずテストをつける、というのを徹底していくことで、テストを書く習慣が生まれると。スライドの中のkishikawaさんのツイートは、保存もの。

AR Quick Lookよりも、Blenderが使えることがすごいと思った

NESSさんは、AR Quick Lookを家具サイトに導入したという話。機能の使い所が、まだイマイチ理解できていないけど、いわゆる3DオブジェクトをAR表示できる機能。機能をどう効果的に使うかが課題になるわけだけど、こんかいは適用先が家具サイトだったと。

なんだけど、それ以上に、Blender使ってモデル作っているという話がすごいと思いました。自分もBlenderに挑戦した過去があって、独特な操作に慣れることができず、断念した苦い思い出があります。AutodeskのFusion360でのモデリングは、操作はしやすかったんですよね。とはいえ、結局いま続いていないので、自分にはまだ早かったか、向いていないのかもしれない……。

個人開発アプリは、ASOをしっかりやること

これはぜひスライドを公開してほしい。100万ダウンロード目前の個人開発者が、これまでにやってきたことの集大成。結論としては、アプリの個人開発が輝くにはASO(キーワード検索の対策)をちゃんとやろうという話でした。 「タイトルサブタイトルにメインワードを入れる(世間に広く認知されているアプリ以外は、アプリ名だけにするのは厳禁)」 「キーワードには、ひらがな・カタカナ感じなども含めて、表記ゆれの検索対策」 「レビュー動線を設けて、高評価してくれそうなユーアーに「だけ」レビューを依頼するようにしよう」 「起動回数・コンバージョンなど指標は何でもいいけど、高いエンゲージメントの人に向けて、SKStoreReviewController、action=write-reviewを活用しながら、良いコメントを書いてもらおう」 個人だけでなく普通の企業アプリだって、ASOしっかりやらないとダウンロードされないので、みんなASOやろう。


まとめ

iOSDC2019の1日目、聴講したセッションの感想をまとめました。明日からすぐに使えそうなもの、自分の理解が足りないもの、いろいろありました。

このようなイベントは、自分への種まきみたいなものですね。参加した効果が出てくるのは数日、数ヶ月、数年先かもしれません。 iOSの開発者としては5年目になりますが(ブランクも除くと通算3年目くらいなので)、まだまだ知らないことだらけです。こういう機会は積極的に活用して、自分の成長につなげていかなければなりません。今年もiOSDC、行ってよかったです。来年も、参加したいと思います。来年は、前夜祭+2日間、全て参加したいです……!