採択
2022/09/11 15:30〜
Track A
LT(5分)

Bluetoothでレゴをリモートプログラミングしよう

ooba 大庭 慎一郎

プログラミング可能なロボットキットである「LEGO BOOST」の発売以降、Bluetoothによるリモートプログラミングに対応しているレゴのセットがたくさん発売されています。その数はなんと20以上!

その中にはプログラミングできることをアピールしていないセットも多くあります。プログラミング=マインドストームではありません。あなたがお持ちのセットも実はプログラミング対応しているかもしれませんよ?

本トークでは、レゴ社が公開している「LEGO Wireless Protocol」を中心に、どんな種類のレゴブロックがどんな感じでプログラミングできるかについてお話しします。あなたのレゴ作品をiPhoneやApple Watchとつなげて、思う通りに動かしましょう!

レギュラートーク(20分)

Maintainability Indexを計測することでiOSプロジェクトのコードの保守性を改善した話

tk108gabalian toya108

iOSアプリ開発に限らず、コードを保守しやすい状態に保つことはとても重要です。
では保守が難しい箇所を特定するにはどうすればいいでしょうか。また、リファクタリング後に何をもって保守がしやすくなったと判断すれば良いでしょうか。
その方法の一つにMaintainability Index(保守容易性指数)の計測があります。
Maintainability Indexとはその名の通り、コードがどれくらい保守しやすいかを表す指標のことであり、VS Codeでは一部の言語で計測することができます。

このトークでは以下のトピックを話します。

  • Maintainability Indexとは
  • SwiftSyntaxを用いた計測方法について
  • 計測してみてどんな気付きがあったか
  • どのように保守性が改善されたか

このトークがみなさんのコードの保守性の改善のお役に立てば幸いです。

6
採択
2022/09/10 16:40〜
Track B
レギュラートーク(20分)

施策基盤としてのディープリンク 〜なめらかにアプリが開く体験のために〜

n_atmark あつや

SNSにおけるプロモーションや、Webのユーザーをアプリユーザーに転換させるような施策を実施したい場合にディープリンクを利用したいケースはよくあるでしょう。

ディープリンクを利用してユーザーをアプリに連れてくる際「ユーザーが文脈を理解できている状態」というのは重要で、ユーザー状態に応じたフローを組むだけでは施策の効果を十分に発揮できない可能性があります。

このセッションでは、滑らかな体験でアプリにユーザーを連れてくるために「ディープリンク」を効果的に活用する方法やその仕組みについて紹介します。

話すトピック
・概念としてのディープリンクおよび、ディープリンクを実現するための機能紹介
・アプリのインストール状況や初回設定状況などのユーザー状態に応じた適切な遷移方法
・ユーザーに文脈を理解した状態のままアプリに来てもらうために活用できる仕組み
・コンバージョンの計測方法

採択
2022/09/12 13:55〜
Track B
レギュラートーク(20分)

モバイルアプリの行動ログの「仕込み」を快適にする

yujif_ Yuji Fujisaka

ここでの「行動ログ」とは、特定の画面の表示、ボタンのタップなど、ユーザー操作を起点に送信するものを指します。集めた行動ログは、サービス開発上の分析や実態把握に役立ちます。

アプリ開発者は、そのログを仕込む役割を担いますが、しばしば課題にぶつかります。

  • いざ分析するとき「ログが足りない!」
    • 「QA時にログ送信、網羅した?」
    • そもそもログ要件が十分に練られていない……
  • ……

本セッションでは、行動ログにまつわる悩みの種のうち、ログ実装の「仕込み」にフォーカスして、ミスを防ぐ仕組みや工夫の事例をご紹介します。

トピック

  • ドキュメントをベースにした型安全なログ実装コード自動生成
  • iOS 14以降で使いやすくなった Logger APIの活用
  • QA作業を踏まえたログ実装網羅チェッカー

など

LT(5分)

やってみてわかった! Managed App Configuration対応のコツ

ooba 大庭 慎一郎

MDMの機能の一つである「Managed App Configuration」を使うと、MDMで配布したアプリごとに個別の設定ができるようになります。会社や教育現場において、全端末に設定を一括で行ったり、アプリの動作を強制変更させたりすることができる、大変便利な機能です。

Managed App Configurationは、アプリ開発者から見るとその仕組みや実装はとても簡単なのですが、MDMを使える環境がないと動作の確認やデバッグが難しいという難点があります。そのため、個人の開発者が対応をするのはなかなか難しいかもしれません。

本トークでは、教育現場でも使われているScratch専用ブラウザアプリ「Scrub」をManaged App Configurationに対応させた経験から、その実装方法や動作確認のやり方、デバッグ、対応のコツなどをお話しします。

3
レギュラートーク(20分)

Toilを除去して開発者体験を向上させていく

razpy01 raz

iOSアプリの配布や、リリース作業のように、
「手作業で繰り返し、自動化が可能で、長期的な価値がない、サービスの成長に比例して増加する」作業は、SREの原則の中でToil(トイル)と呼ばれています。
Toilは、機能開発に集中していたりすると、中々手が回らなかったり、作業への慣れや習慣化によって改善が行われにくくなります。

Toilに対して、よく考えずに自動化を行ってしまうと、システムが複雑化していくことで、その自動化を行った人しか理解できずに属人化が起こります。
そのため、日頃から作業が持つ本質的な価値にフォーカスして整理し、シンプルかつ誰でもメンテナンスできるようにしておくことが大切です。

このトークでは、チームの開発者体験を向上させるために、実際に観測したToilを例に、どのようにカイゼンの試行錯誤を行っていけばよいか、また具体的にどんなカイゼンしたのかをお話しします。

8
レギュラートーク(40分)

Toilを除去して開発者体験を向上させていく

razpy01 raz

iOSアプリの配布や、リリース作業のように、
「手作業で繰り返し、自動化が可能で、長期的な価値がない、サービスの成長に比例して増加する」作業は、SREの原則の中でToil(トイル)と呼ばれています。
Toilは、機能開発に集中していたりすると、中々手が回らなかったり、作業への慣れや習慣化によって改善が行われにくくなります。

Toilに対して、よく考えずに自動化を行ってしまうと、システムが複雑化していくことで、その自動化を行った人しか理解できずに属人化が起こります。
そのため、日頃から作業が持つ本質的な価値にフォーカスして整理し、シンプルかつ誰でもメンテナンスできるようにしておくことが大切です。

このトークでは、チームの開発者体験を向上させるために、実際に観測したToilを例に、どのようにカイゼンの試行錯誤を行っていけばよいか、また具体的にどんなカイゼンしたのかをお話しします。

7
レギュラートーク(20分)

多言語対応アプリにおける継続的ローカリゼーションの実践

tion_low ションロー

世界中のユーザーへ向けてサービス展開する場合、システムのグローバリゼーション及びローカリゼーションが必要です。

ローカリゼーションではまず「特定言語への翻訳対応」が行われますが、その結果としてアプリの開発フロー内で継続的な「翻訳データの管理」と「テキストの翻訳作業」が必要になってしまいます。

日本語、英語の2言語までは「なんとなくスプレッドシートで管理してみる」が通用しなくもないのですが、対応言語数が増えるほど翻訳データ自体と翻訳タスクの管理コストが増え、結果として運用や品質に対して悪影響が出やすくなっていきます。

本トークでは、12言語に対応している「REALITY」アプリの事例をもとに翻訳フローをどのように構築したか、対応言語を増やした結果どのような問題が起きたか、その問題にどう対処しているか、現状の課題は何で今後どうしようと考えているか、などをお話します。

5
レギュラートーク(20分)

Go言語での実用例に見る!AsyncChannelとスレッド間通信チャネル概説

CreatorQsF たふみ

高度な並行アルゴリズムを提供するSwift Async AlgorithmsにAsyncChannelというものがあります。チャネルとはスレッド間でメモリを共有する手法の1つで、特にGo言語での採用により近年一般的になっています。
本発表ではGo言語での使用例を用いてチャネルの概説を、そしてAsyncChannelとの差異に思いを馳せチャネルについて簡単な認識を持つことが目的です。
スレッド間のメモリ共有は、共有メモリを使い危険領域を排他制御等で保護する手法が一般的ですが、チャネルを使うと同期が入出力としてより素直に表現できます。Go言語にはDo not communicate by sharing memory; instead, share memory by communicatingという格言がありますが、 他方、チャネルとバグの研究を取り上げ現実についても触れたいと考えています。

3
レギュラートーク(20分)

小さく始めるSwiftUI移行

rizumi_jp izumi

SwiftUIが発表されてから約3年が経過し、最近ではプロダクトでの採用例も見られるようになってきました。
しかしながら、SwiftUI登場以前から運営しているアプリを完全にSwiftUIへ移行するのは簡単なことではありません。
そこで、小さなComponentから徐々にSwiftUI化を行っていくというのは効果的な移行戦略の1つです。
小さな単位で移行を行うことによって、SwiftUIへ移行する上での課題を素早くキャッチし、改善サイクルを徐々に回しながら移行できるというメリットなどがあります。

本トークでは

  • 小さくSwiftUI移行を行う手法
  • 小さく移行をする場合のメリット / デメリット
  • 移行時の勘所やハマり所

について、実プロダクトで移行を続けている中で得られた知見や具体例と共に解説します。

2
LT(5分)

モバイルアプリのPMF検証をReact Native for Webで高速化する

flat_42 川根一誠

株式会社JMDCでは、新規モバイルアプリの立ち上げに向けて企画・開発を進めています。

PMF達成前のプロダクトフェーズでは、優先すべき仮説からコンパクトに素早く検証を行う必要がありますが、時にストアの審査基準がプロダクトフェーズを進める足枷になることもしばしば...

そんな時React Native for Web(RNW)を使えば、モバイルアプリ開発用のリソースをそのままWebに転用し、Web上で高速なイテレーションを回すことができます。本セッションでは、RNWの紹介と、RNWを使った成長戦略を紹介します。

  • React Nativeの採用基準
    • プロダクト要件
    • チーム体制
  • React Native for Webの紹介
    • 導入方法の概要
    • 気をつけたところなど
  • PMF検証後の成長戦略
LT(5分)

iOS1ミリもわからん技術広報がiOSDCにプロポーザルをエンジニアに出してもらうナレッジLTトーク〜まずはお前が出すんだよ!〜

luccafort luccafort

このLTはiOSコミュニティといままで関わったことがない技術広報がなぜプロポーザルを出したのか。そしてどうやって社内のiOSエンジニアを巻き込みプロポーザルを出すに至ったのか。多くの企業が「自社から登壇やプロポーザルが出されない」課題を抱えています。登壇に関する情報発信のノウハウを共有することで多種多様な企業、プロダクトの発表が増え、iOSコミュニティ全体の活性を促進することを期待しています。非エンジニアのかたにとってコミュニティとの関係性を構築していくエッセンスをお届けします。

1
LT(5分)

YouTubeの動画をmacOSの壁紙にするハック術

ダイナミックデスクトップが登場してから早4年。
動く壁紙というのは、身近な存在になってきているのではないでしょうか?
AppStoreにも動く壁紙を設定できるアプリはちらほら存在します。

どのように実装しているのかは謎ですが、壁紙をハックするのはなんだか夢があって楽しそうですよね。

そんな方のために、このLTではmacOSの壁紙に関するハック術を紹介します。
YouTubeの動画も壁紙にできちゃうかもしれません!

この機会にあなたの壁紙をパワーアップしてみませんか?

1
採択
2022/09/10 18:45〜
Track C
レギュラートーク(20分)

ChaChaPoly and You, CryptoKit Explained

monolithic_adam Adam Henry

「え、CryptoKitを使いたいけど、いつ、何を使うべきかわからない。。。」の方はもう心配いらない。このトークで一緒にCryptoKitの謎を解きましょう!

ユーザーのデータを暗号化しないといけない開発案件が出てきて「CryptoKitを使うチャンス!」を思って調べてきました。それでみんなにそのKnowledgeを共有したいと思っています!みんなCryptoKitマスターになりましょう!

Content

  • CryptoKitでできること
  • CryptoKitを使った対象鍵暗号(Symmetric Encryption)について
  • いつそのEncryptionを使うべきか
  • 実装方法

データセキュリティーのために知っておきましょう!

LT(5分)

.env と Xcode Run Script で環境変数をビルド時にアプリに組み込む

satococoa 海老沢聡

API が絡む開発を行う際、大抵以下のような複数のビルド設定が必要になるかと思います。

  • 開発環境 (ローカル)
  • ステージング環境
  • 本番環境

今回 .env と Xcode の Run Script を使って各環境ごとに異なる API 接続用の値をビルド時にアプリに組み込む方法で開発を行ったのでその方法について共有します。

1
レギュラートーク(20分)

iOS アプリ開発プロジェクトで最初に整えておきたいこと

satococoa 海老沢聡

2021年12月、弊社 ROUTE06 においてとある新規アプリの開発プロジェクトがスタートしました。
今振り返ってみて、初めに整えておいて良かったなと思うことをお話しします。

以下のような内容を予定しています。

  • 環境 (ローカル、ステージング、本番) 別のビルド設定を .env を使って行う
    • API の向き先や Firebase の設定ファイルなどをどのようにビルドプロセスに組み込んだのか
  • codemagic で CI/CD を整える
    • どのようなパイプラインを組んだのか、ブランチ戦略とともにお伝えします
  • 開発版のアプリを TestFlight を使って配布する
    • Ad hoc は使わずに TestFlight のみを用いた開発版のアプリ配布を行いました
1
LT(5分)

1人でも出来る!OpenAPIでAPI実装をリファクタリングする方法

simorgh3196 simorgh3196

弊社アプリは長い開発期間の中で多くの負債を抱えていますが、複雑な依存関係や少ない開発リソース(現在iOS開発は1人)で通常施策の実装を行いながら改善する余裕がない等の理由でコアな部分の実装には手を入れられず放置されてきました。

負債の一つとして、弊社アプリには神(オブジェクト)がいらっしゃいます。
そこに含まれている内の一つ、API関連の機能はCodableも無い時代に作られているために現在メンテされていないライブラリに依存をしており、以前から改善したい機能として挙げられていました。

本トークではなんとなくで使われていたOpenAPIドキュメントをコード生成が正しく行えるように整備し、そこからコード生成を行い開発フローに組み込んだ方法について紹介します。

レギュラートーク(20分)

Firebase InApp-Messagingをカスタムする

simorgh3196 simorgh3196

Firebase InApp-Messagigng(以下FIAM)は、Firebaseを導入していれば特別な実装をすることなくAnalyticsのイベントを利用して細かく表示タイミングの制御したり、配信先ユーザーのターゲットを細かく絞って配信することが出来とても便利です。

ただデフォルトの機能のままだとFIAMで表示される画面のデザインがアプリとは合わない、利用できるデザインに制限があるなどしっかり運用しようと思うと物足りない部分があります。

弊社アプリでは、コンテンツをよりよく見せるために動画を再生できるようにしたり、WebP画像を使って通信量を削減するといったカスタマイズを行いました。

本トークでは実際の実装経験をもとにどのようなカスタマイズが出来るのか、どのように作るのか、その他Tipsを紹介します。
また実際にFIAMを利用してどのような効果があったかをお話しします。

LT(5分)

TabularDataを使ってデータ処理をしてみる

n_atmark あつや

TabularDataはiOS 15/macOS 12から追加された、機械学習モデルの学習に使う表形式データを閲覧したり、加工したり、書き出したりするための新しいフレームワークです。

このセッションではオープンデータとして公開されているデータをTabularDataを使ってデータ処理する方法について紹介します。

以下のような内容を紹介する予定です

・TabularDataのAPIの紹介
・表形式データからのサマリー抽出について
・非構造化データの変換
・表形式データの結合

1
採択
2022/09/11 13:35〜
Track B
レギュラートーク(20分)

Swift Concurrency時代のリアクティブプログラミングの基礎理解

banjun ばんじゅん🍓

リアクティブプログラミングは非同期プログラミングの手段として使われることがありますが、本来は非同期データストリームをうまく扱うためのものです。Swift Concurrencyが導入された今こそ、Combineなどの具体的なライブラリから一歩距離を置いて、リアクティブプログラミングそのものを学習しておきましょう。

このトークでは、リアクティブプログラミングがデータフローの記述方式であるということを基本からおさらいします。リアクティブプログラミングを図的に理解でき、UIや通信のイベント配送設計も自在にできるようになります。

非同期はリアクティブプログラミングの外の世界と接続するときや内部実装には必要です。両者のポジションの違いを整理し、Concurrencyの機能をそのまま使うべきところと、リアクティブプログラミングでデータフローを記述すべきところが、よく分かるように説明します。