2019/05/15(水)に行われた「potatotips #61 (iOS/Android開発Tips共有会)」のまとめです。
ハッシュタグは#potatotipsです🐦
イベントページはこちら↓
GitHubの管理ページはこちら↓
開場
- 時間:18:30-
今回の主催はWantedlyさんです。
Wantedlyさんは白金台にあり、周りにはおしゃれな建物しかありませんでした。トイプードルを散歩させている人もいました。
今日は初めて同じ会社の人(しかも同じチーム)と一緒に勉強会に参加しました。私にconnpassを教えてくれた恩人です。業務では特に広告周りの実装でお世話になっており、頭が上がらないです。
そんな中、白金台ではなく白金高輪で降りるという大失態をおかしました。
オレ「白金台に着きました!Wantedlyさんに向かいましょう」
先輩「Google MapにARナビ機能が付いたから、それで行ってみよう」
オレ「すげぇ!それで行きましょう」
〜数分後〜
オレ「なんか道おかしくないですか?」
先輩「あれ…」
オレ「…どうやら白金高輪で降りてしまったようです」
こうして5分ほど遅れて会場に到着しました。遅れてしまいすみませんでした。
会場の写真は撮っていないのですが、とてもおしゃれな空間でした。ひな壇みたいになっている箇所があり、映画とか観たくなります。
LT
- 時間:19:00-
Generating accessibility identifiers easily and consistently using Reflection API
- iOS
- 発表者:Kento Nagataさん(@ngtknt)
遅刻したので聞けませんでした…。
Nagataさんは以前Page Object Patternを紹介されており、とても勉強になったので、今回の発表を聞き逃したことは非常に残念でした。
スライドは絶対に後で読みます。
Clip, Elevation, ViewOutlineProvider
- Android
- 発表者:Ryo Sakaguchiさん(@wakwak3125)
wakwakさんの発表には間に合いました。
しかし、Android + 英語ということでほぼわかりませんでした…。
どうやらこういうことのようです↓
いつもpotatotipsのまとめ記事を書くときに思うのですが、Androidのお話にほぼ着いていけないのが本当に申し訳ないです。
Android開発も勉強したいのですが、iOS開発の勉強で手一杯なのです…。
環境変数をYAMLで管理する話
- iOS
- 発表者:417_72kiさん(@417_72ki)
環境変数をYAMLで管理できるようにしたお話でした。
ここでいう「環境変数」は、「PRODUCT_BUNDLE_IDENTIFIER」などのことでなく、例えばデバッグ環境と本番環境で異なるAPIのURIなどを指します。
私も所さんと同じく、古の「#if DEBUG」を使ってデバッグ環境と本番環境を切り替えています。Info.plistで管理する方法を知らなかったです。一般的なのでしょうか?
Info.plistで管理するとStringを使うから怖く、AndroidのBuildConfigのように管理できるライブラリを自分で開発されたとのことです。すごい!
発表後に伺ったところ、実際に業務に取り入れているとのことです。(むしろそのために作ったとのこと)
実績があり、実用性の高いライブラリなので、私も使ってみたいと思いました。
CameraXとMLKitの関係や如何に
- Android
- 発表者:Takao Sumitomoさん(@cattaka_net)
CameraXとMLKitのお話でした。
「CameraX」とはJetpackのサポートライブラリで、カメラアプリの開発を容易にするとのことです。
具体的な内容は着いていけなかったので割愛します。
ゴーファーが「パリイ!」しているデスクトップ画面?が映ったのが面白かったですw
「Codelabs」というサービスが勉強になるとのことです。
カメラアプリを開発されている方は参考になるスライドでした。
GoogleI/O 2019で直接確認した、FlutterでのiOS/AndroidのUI出し分け方法とUI検討指針
- iOS
- 発表者:amuさん(@yumatan8)
FlutterでAndroidとiOSのUIをどうするかについての発表でした。
AndroidとiOSの両OSでリリースしているアプリでは、どの程度UIを統一するか悩むので、Flutterを使っていなくても参考になりました。
amuさんが出した結論を私なりに解釈すると「Flutter for Webが発表されてモバイルプラットフォームからマルチプラットフォームへと進んだので、プラットフォーム側のガイドラインを気にせずユーザーにとって大切なUI/UXを考えるべき」ということでした。
そのため、「AndroidとiOSでUIの出し分けをする機会はあまりない」とのことです。
発表を最初に聞いたときは「え?Appleが提供しているHIGを無視してデザインを作るってこと?OSによって最適なUI/UXは異なるから、それはどうなんだろ…」と正直思いました。
ただ今は各OSのガイドラインに従うことが常識ですが、数年後にマルチプラットフォーム全盛になったらそれが当たり前になる可能性もあるので、未来を見据えた考えなのかもと思いました。
いろいろお話ししてみたかったのですが、懇親会前に帰られたようなので残念でした。(もしいらっしゃったらすみません🙇♂️)
現在のUI/UXの考えに一石を投じるスライドでした。
外部SDKのViewにマスク処理をする方法と罠
- Android
- 発表者:Keita Kagurazakaさん(@kkagurazaka)
外部SDKのViewにエフェクト(ぼかし)を入れるTipsの発表でした。
単純にそのViewの上にエフェクトを入れるだけでは実現できないとのことでした。
iOSではSDKのViewにかかわらず、そのViewの上にエフェクトをかけたViewを載せるだけで実現できる気がします。(違ったらすみません)
このように実務でつまづいた内容を解決策と共に発表していただけるのはありがたいです。
私もできる限り実務に役立つ発表をしようと心掛けています。(最新技術の発表もしてみたいのですが、LTできるまで落とし込むのは大変ですし、逆にみなさんの発表でキャッチアップできればいいかなと考えてしまいます…笑)
Androidで外部SDKのViewにエフェクトをかけたいかたは必見のスライドでした。
タッチジェスチャーとたたかう
- iOS
- 発表者:Nishiyama Nobuyukiさん(@5mingame2)
タッチジェスチャーとたたかった発表でした。
Nishiyamaさんが開発されているアプリ、パズモナがApp Storeの[ゲーム]タブに取り上げられたとのことです。おめでとうございます🎉
Nishiyamaさんの発表は以前にも聞いたことがあるのですが、相変わらず面白かったです笑
面白くて体が「聞こう!」という体勢になり、プレゼンもうまいので、内容が驚くほど頭に入ってきます。
スライド1枚の中に多くを詰め込み過ぎず、伝えたいテーマをシンプルに1つだけ決めているのもわかりやすい理由だと思いました。
プレゼンの参考になります。
みなさんにぜひ見てほしいのと、内容を伝えると面白さを感じづらくなるかもしれないので、ここに詳細は書きません。
ちなみにパズモナのソースは公開しているとのことです。
アニメーションの新しい選択肢 MotionLayoutが色々と面白い
- Android
- 発表者:dais-sasaさん(@DaisSasa)
MotionLayoutの使い方についての発表でした。
dais-sasaさんは初LTとのことでしたが、驚くほど落ち着いて発表されていてすごいと思いました。
MotionLayoutを一言でいうと、「今までよりアニメーションを簡単に書くことができるもの」とのことです。
Androidについてほぼわからない私でも、「MotionLayoutやばい」と感じるほどわかりやすい発表でした。
今まではα版でしたが、2019/05/09にめでたくβ版が公開されたとのことです。
MotionLayoutを使う際の参考になるスライドでした。
XcodeGenのバージョン指定問題を解決した話
- iOS
- 発表者:kamui_projectさん(@kamui_project)
XcodeGenがBitrise(CI/CD環境)でインストールできなくなった際の発表でした。
調査しても原因がわからなかったときに「XcodeGenの開発者に直接問い合わせる」というアプローチを取られていましたが、これは大事な手法だと思います。
使う側がどうしてもわからないこともありますし、わかったとしてもものすごい時間がかかることがります。
私が担当しているPJでもAppleやGoogleなどに問い合せることがよくあります。
今回の解決策は「Mintを使って」ということでした。
yonaskolb/Mint
A package manager that installs and runs Swift CLI packages - yonaskolb/Mint
github.com
Mintとは、Swiftのコマンドラインツールの管理ツールとのことです。
まさかのXcodeGenと同じ開発者の方だったので、それは親和性が高いですよね…笑
Mintは聞いたことがあるだけだったので参考になりました。
XcodeGenについてはTwitterで議論されていたので載せます。気になる方は追ってみてください。
XcodeGenを使う際は参考にしたいスライドでした。
あとこちらが気になりました↓
目の錯覚だったのかわかりませんが、ライトを当てた部分が光るのではなく、当てなかった部分が暗くなったようにみえました。何かのツールだったのでしょうか?
Google Play Consoleの時間指定公開の使い方
- Android
- 発表者:umechan_hikaさん(@umechanhika)
Google Playの時間指定公開でハマったポイントについての発表でした。
「時間指定公開」とは、指定した日時に公開される時限式ではなく、予めGoogle側のアップデート処理を済ませ、公開ボタンを押すとすぐにストアに公開される機能とのことです。
名前が紛らわしいですw
ハマったポイントを背景から説明し、結論を示す構成がわかりやすいです。サポートとのやりとりを会話形式で見せるのもわかりやかったです。
時間指定公開を使う際には参考にしたいスライドです。
Add dark mode to your apps.
- iOS
- 発表者:Kakkun a.k.a. fromKKさん(@fromkk)
iOSアプリをダークモードに対応させたお話でした。
最初のダークモードに入る魅せ方がおしゃれでした。笑いを取るだけでなく、こういったおしゃれを演出して引き込むプレゼン方法もあるのだと勉強になりました。
ダークモードはRxSwiftを使っていると簡単に実装できるとのことですが、RxSwiftを使わない実装方法を紹介されていました。
内容はあまり着いていけなかったので、ダークモードに対応させる際に読み返したいです。
今回紹介した方法でダークモードを実装されたアプリがこちらとのことです。
App Storeの「今日の APP」にも取り上げられていました。
RxSwiftを使わずにダークモードを実装する際に参考にしたいスライドです。
Recommend Widgetを作った話
- Android
- 発表者:mahiguchさん(@mahiguch1)
Recommend Widgetを自作されたお話でした。
広告は収益に直結する大事な実装であり、つまづくポイントも多いので、広告周りの知見を共有していただけるのはありがたいです。
「Recommend Widget」とは「おすすめ記事と広告をセットにしたもの」とのことです。ググってもそれらしいものがヒットしなかったので、造語なのでしょうか?
CTRを計測されていましたが、データの収集や分析までエンジニア主体でやっているのかが気になりました。私が担当しているPJでは、このあたりのデータ分析は企画の方に任せています。
CTRを手動で計測しているのもすごいと思いました。広告をGoogle Ad Managerで管理すればいけそうですが、広告の表示ロジックを自作しているので難しいかもしれません。そもそもAd Manager自体が複雑で使いこなせないです…。
Recommend Widgetを導入する際に参考にしたいスライドです。
Notification Content Extensionはどこまでできるのか?
- iOS
- 発表者:sato-shinさん(@sankakuButton)
通知に様々なViewを載せてみたお話でした。
「Notification Contents app extension」とは、iOS 10以降で使える通知用app extensionとのことです。
iOS 12からはさらにユーザーインタラクション(通知上のViewを操作)できるようになったとのことで、MapViewやSKViewなどを載せて遊ばれていました笑
SKViewとSCNViewは初めて聞いたので、公式ドキュメントを見てみました。
実装に関する公式ドキュメントだけではわかりづらいですが、sato-shinさんのスライドと併せてみると何となくどのようなViewなのかわかりました。
QuickTime Playerで実機をリアルタイムにキャプチャしてデモされていました。5分のLTでデモできるとかっこよく、思わず拍手したくなります笑
こういった遊び心が大好きなので、個人的には一番ワクワクした発表でした!
実際の業務にどう活かすかをぱっとは思いつかないので、そのあたりのお話も伺いたかったです。
通知をカスタマイズする際に参考にしたいスライドです。
Androidの開発とFlutterの開発を比較してみる
- Android
- 発表者:shogo.yamadaさん(@yshogo87)
AndroidとFlutterの開発を比較したお話でした。
GUIもコードも割と似ているようでした。
ただしサイズがFlutterの方が約2倍大きかったです。これはマルチプラットフォームなので仕方ないと感じました。
Androidアプリの開発者でFlutterにも手を出そうとしている方は参考になるスライドです。
Swiftでもapollo-iosで快適にGraphQL
- iOS
- 発表者:ymanyaさん
Swiftでapplo-iosというライブラリを使ってGraphQLを操作したお話でした。
GraphQLは高速化の一環として導入されたそうです。GraphQLは触ったことがないのですが、どうやらパフォーマンスの向上策として使えるようです。
「apollo-ios」はGraphQLのクライアントライブラリとのことです。
GraphQLの操作方法やTips、おすすめのツールなどを詳細に説明されており、これからGraphQLを触る方にはありがたい内容でした。
GraphQLを導入する際に参考にしたいスライドです。
Flutter 1.5 Features(Overview+Alpha)
- Android
- 発表者:Kenichi Kambaraさん(@korodroid)
Flutter 1.5の新機能についての発表でした。
Flutter for Webのデモを行ってくださり、最新技術を直に見れる貴重なLTでした。
詳細は理解が追いついていないので、スライドをご参照ください。
Flutterの最新動向を把握できる素晴らしいスライドでした。
懇親会
飲食はビール&ピザという最強の組み合わせでした。
Flutterにちなんで?鳥のビールを買ったとのことです。おしゃれ!
ちなみにカルディで売っているとのことです笑
懇親会では技術に関するお話をたくさん聞けて、充実しました。
気になった内容を抜粋↓
- iOSアプリの開発でXcodeでなくAppCodeを使っている方がいた
IBは使えないけどショートカットが便利とのこと
→PyCharmやAndroid Studioなど、JetBrains製のIDEに慣れている方は乗り換えてもいいと感じた - RE:Viewはエンジニアと相性がいい
→技術書を執筆してみたいので参考になった
おわりに
Flutterについての発表が3つもあったのが印象的でした。
Flutterは気になりますが、今のところ私は↓のスタンスでいきます。
カッコつけていますが、まず他のことを勉強する余裕がありません笑
今回も楽しいLT&懇親会でした。主催者の所さんや会場・飲食を提供してくださったWantedlyさんを始め、ありがとうございました!