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

Flutter アプリおけるテスト戦略の見直しと自動テストの導入

ostk0069 おさたく

私たちのチームでは品質維持のためにテスト戦略を見直し、その結果、自動テストを導入しました。
半年が経過した現在、自動テストのシナリオ数は35を超えていますが、その過程で多くの課題がありました。

  • どのようなフロー・タイミングで自動テストを実行するのか
  • 成熟したプロジェクトでどの機能から自動テストを導入するのか
  • 自動テストを実施するか否かの判断をどうするか
  • 不安定なテストシナリオへの対処法

上記で挙げた課題に対して行ったことの紹介はもちろん、以下のことについても話します。

  • テスト戦略の見直しを行った背景
  • テスト戦略の見直しから自動テストの選定までの流れ
  • 受けられた利益やデメリット

技術選定にFlutter、integration_testを使用したプロジェクトのトークになりますが、トーク内容はモバイルアプリ全般に適用できる内容です。

4
採択
ポスターセッション

研究iOS!個人アプリのソースコードぜんぶ見せる大作戦

the_uhooi uhooi

私は以下の構成で個人アプリを開発しています。

  • UIの実装: SwiftUI
  • アーキテクチャ: MVVM
  • ソース管理: Swift Package

サードパーティ製のフルスタックフレームワークは使わず、SwiftUIを純粋に使ってきれいなコードになるよう心掛けています。
アーキテクチャはAndroidの公式ドキュメントを参考に設計し、可読性やコードを書くときの迷わなさを高めています。
Viewの分割も読みやすい粒度で適切に行っているつもりです。

ただ自分のコードが本当に読みやすいかは、実際に他の人に読んでもらわないとわかりません。
そこで 個人アプリのREADMEとソースコードをできる限り印刷して公開します

持てる限りの知見を共有するので、みなさんはぜひゴリゴリにコードレビューしてマサカリをぶん投げてください。
よりよいコードを作り上げ、一緒に成長しましょう。

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

SwiftUIで名刺をデザインする

Kyomesuke Kyome

SwiftUIは強力なUI構築手段ですが、アプリ開発にだけ利用するなんて勿体無いと思いませんか?

本トークではSwiftUIで名刺をデザインする方法について、実践的な手順を紹介します。

  • SwiftUIで名刺をデザインするメリット
  • ベクターデータをSwiftUIで取り込む方法
  • SwiftUIのViewをベクターデータとして出力する方法
  • 名刺を発注する際に必要なベクターデータに沿った注意点
  • etc.

SwiftUI製の名刺を作ってiOSエンジニアとしてのスキルアピールや個人ブランディングに役立てましょう!!

8
ルーキーズLT(5分)

これまでOSSに貢献して良かったこと

fummicc1 Tanaka Fumiya

OSSは貢献したいと思ってもそのコミュニティによって貢献できる難易度は変わってくると思います。ですが、OSS貢献は普段自分と関わりがない開発者の方々とコミュニケーションを取れるため、非日常で楽しいことだと考えています。
特にDroidKaigiでは毎年OSSとしてカンファレンスのアプリケーションを開発しており、僕も3年間貢献させていただきました。
他にも幾つかのOSSに貢献した経験をもとに、OSS活動をやってみて良かったなと思える瞬間を本LTで話したいと考えています!

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

coremltoolsで深層学習モデルをiOSアプリで動かすためのTips

fummicc1 Tanaka Fumiya

深層学習モデルの識別処理は学習に比べて軽くモバイル上で実行できるオンデバイス識別の技術があり、端末上で完結するという利点を備えています。
iOSアプリでは深層学習モデルはmlpackageに変換して利用しますが、慣れていないと躓く点があると考えており、以下の内容を軸にトークを進めようと考えています。

対象者:深層学習をデバイス上で識別してみたい人・デバイス上で動作させるためのTipsに興味がある人

  1. モデルのデプロイについて(CreateML or coremltools or 公式CoreML Model)
  2. coremltoolsにおける推論を行うためのTips
  3. モデル圧縮と識別精度に関するTips

WWDC23で発表されたcoremltools 7ではモデル圧縮のAPIに変更が入っており、そちらについてもトーク内で触れようと考えています。

4
ポスターセッション

Swiftと競技プログラミング:その魅力と可能性

log5 log5

「Swiftで競技プログラミングに参加できる」というのは、黎明期に比べれば多くの方が知る事実になっているかと思います。
一方で、Swiftを競技用言語として選ぶ参加者は、C++やPythonを始めとする有名な言語のそれと比べれば十分に少数派です。
実際C++やPythonから積極的に乗り換えを推奨できるものでもありません。
ただ、Swiftという「武器」には一部のコンテスタントの心を惹きつけてやまない力があるようです。

このセッションでは、私自身の取り組みから得た経験をもとに、競技用言語としてのSwiftが持つ魅力に迫ります。
具体的には

  • そもそもSwiftって"速い"の?
  • Swiftが持つ競技上の優位性と弱点
  • 競技用言語としての現状と展望

といった話題について、初級者の視点から考察を行います。
普段のiOS開発では見逃しがちなSwiftの側面に、ぜひ触れてみてください!

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

JSONだけじゃない!独自のDecoderを使っていろんなデータをCodableに変換しよう

coffeegyunyu 日向強

アプリがネットワークなど外部サービスを通じてデータをやり取りする場合、JSONが使われることは多いと思います。
JSONのデータはJSONDecoderを使い、Combineでdecodeと組み合わせてなどの方法でCodableデータモデルに変換し処理することになると思います。
しかし世の中のWeb APIにはJSONではなくXMLでのレスポンスを返すものもあります。
また、データソースの変更で、ネットワーク経由ではなくローカルのcsvやyaml、はたまた独自のデータを変換することになったり…
そうなった場合、decodeは使えないのでしょうか?
否!JSONのデータじゃなければ、自分でDecoderを作ってCodableなデータモデルに変換すればいいのです。

このトークは、JSONではないデータに出くわしても困らない、独自のDecoderを作成するための説明を行うトークとなります。

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

今こそ学び直そう!SwiftUIの基礎

kntkymt kntk

SwiftUIが発表されてから5年目に突入し、様々な応用方法がコミュニティに出回っています。
そんな中、便利ではあるものの、SwiftUIの仕組み上よろしくない実装をしているケースを見かけます。
この様な実装をしないために、初心に戻ってSwiftUIの基礎を学び直してみませんか?

このトークは次の様なテーマを取扱い

  • Viewが再生成・再描画されるタイミング
  • 再描画を減らすポイント: View Identity
  • SwiftUIの裏側にあるUIKit

これらのテーマごとに

  1. WWDCのセッション等を引用しながら、仕様を確認
  2. どのようにコードを書くべきか考察

の2ステップを繰り返す内容になっています。

既にSwiftUIを使っている人でも、このトークで基礎を再確認することで
より描画パフォーマンスの良い書き方や、新しい視点での実装ができるようになることでしょう。

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

Swift Charts で「良い感じ」に3変数を持つデータを表示するまでの軌跡

base_front matsue

iOS 16 から Swift Charts という SwiftUIのフレームワークが使えるようになりました。

Swift Charts を使うことで、簡単にグラフを作成することが出来、特に時系列データの可視化に便利です。

一方で、コード上で設定できる項目がかなり多い上、設定項目とグラフの変化が直感的で無い事もあるため、グラフの表示範囲や見た目をカスタマイズするのが難しくなっています。

そこで今回は Swift Charts で「良い感じ」にグラフを表示する方法を紹介します。

具体的には、一般的な2変数を対象にグラフ自体を見やすく表示する方法を紹介しつつ、筋力トレーニングの記録のような3変数を持つデータの表示方法を詳細に説明します。

4
採択
2023/09/02 17:25〜
Track C
レギュラートーク(20分)

SwiftUIでの非同期処理データの状態管理を考える

kntkymt kntk

みなさんはSwiftUIで非同期処理データの状態管理をどう行なっていますか?

  • enumを使う方法: enum DataState { case loading; case success(Value); ... }
  • コンポーネントを使う方法: LoadingContent(fetch: fetch) { Content($0) }

などがあると思いますが

  • リロード中は前回の結果を表示したい場合
  • ページングに対応する場合

等の要件で、微妙に異なるバリエーションがいくつか存在する上、それらの方法にはメリットとデメリットがあります。
パフォーマンス低下を引き起こしていることも...。

このトークは、このような状態管理方法を複数個、実装ケースと共に紹介・考察し
それぞれの方法がどのような実装ケースに適しているかを分析・分類していく内容となっています。

採択
2023/09/02 13:55〜
Track D
レギュラートーク(20分)

出前館におけるApple Pay運用Tips

kuroFront46 Shinji Kurosawa

Apple Payは2016年に日本で使用できるようになり、多くのユーザに使用されています。
フードデリバリーアプリ「出前館」でも2016年よりApple Payを導入しています。

Apple Payを運用していくためには、いくつかの証明書などを管理する必要がありますが
これらの証明書にはAppleのドキュメントを読むだけでは理解が難しい制約が多く、運用時に注意が必要です。

また、2016, 17年時点のApple Pay導入の記事は見かけますが、継続的にApple Payを運用するための記事は少なく、試行錯誤しながらApple Payの運用方針を確立しました。

本発表では出前館でApple Payを安定的に運用するための実践的な苦労話を中心に、Apple Payに関連するAPIの話や、iOS/WebでApple Payを実行するためのTipsをお話しする予定です。

採択
2023/09/03 16:05〜
Track A
LT(5分)

それでもなんとかしてWebページをTVやWatchで見たい!

coffeegyunyu 日向強

iOSでWebページを見る場合、どのUIコンポーネントを利用すればいいでしょう?
そうですね、WKWebViewを使えばいいですね。
しかしそれはiOSやMacに限ったことの話。
WebKitの搭載されていないtvOSやwatchOSではWebページを閲覧することがかないません。
HTMLをそのままテキスト表示?それとも独自にパースしてブラウザを開発?
当LTではなるべく低燃費でWebページを見ることができないのか検証するLTとなります。

LT(5分)

もう怖くない!今日からキミもSwift-Evolutionを読めるようになる!

h1d3mun3 h1d3mun3

iOS / iPadOS / macOS 等の開発に利用されるSwiftはオープンソースで開発されている言語で、開発に関わる情報は全てオープンになっています。
その一方で、どのように開発されているのか分からなかったり、どこを読んだらいいかわからないなどの理由によりオープンであることのメリットを十分に享受できていないケースもあるのではないでしょうか。
そこで、Swiftの開発体制や、機能追加のProposalの場所などをお話しし、皆様がSwiftの開発状況についてキャッチアップできるようになることを目指します!

10
採択
2023/09/02 17:05〜
Track A
ルーキーズLT(5分)

7カ国語、各ファイル1200行を超えるローカライズを安全に運用する方法

_kzumu Shimomura Kazumasa

私たちのチームで開発しているアプリは7カ国向けのローカライズを対応しています。
ローカライズのテキストは外部へ依頼して翻訳してもらった後に、手作業でスプレッドシートからLocalizable.stringsへコピペをする必要があったため
人的ミスが発生する原因となっていました。

そこで、ローカライズファイルの静的検査ツールである、L10nLintというコマンドラインツールを開発し、
実際に自分たちのチームで運用がされています。

このツールには、Baseファイルと比較したときのkeyの抜け漏れ検知や、並び順のチェック、
簡体字と繁体字が混合していないかなどのチェックなどの様々なルールが含まれています。

また、Danger経由でPull Requestへコメントを行うためのプラグインもリリースしています。

本トークではこのツールのご紹介を予定しています。

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

長年の運用で肥大化した、UIKitベースのiOSアプリを安全に分割していくための戦略

_kzumu Shimomura Kazumasa

プロジェクトの肥大化により差分ビルドの時間が伸びてしまいます。
私たちのチームはマイクロフレームワーク戦略でしたが、UI関連のフレームワークが肥大化してしまいました。

解決策として、フレームワーク分割が有効です。
差分ビルド対象のフレームワークが減り、ビルド時間が短縮します。
加えて、機能ごとにフレームワークを分けることで特定機能のミニアプリの配布が可能となります。
しかし、コンパイルが成功しても安心できません。
ランタイムクラッシュや参照の不備でリソースが見つけられない問題が生じます

本トークでは、安全なフレームワーク分割の手法を説明します。以下の項目を中心に話す予定です。

  • xibファイル内モジュール参照不整合の静的検査方法
  • SwiftSyntax、IBDecodableの使い方
  • CIでの静的検査と、Dangerを使ったPull Requestへの警告コメントの出し方
4
レギュラートーク(20分)

それ、ShellScriptじゃなくてSwiftで書いてみない?

_kzumu Shimomura Kazumasa

アプリ開発に使用するちょっとしたスクリプトは、Shell Scriptでささっと書いてしまうことがあるかと思います。
Shell Scriptは少ない記述で多くのことができる反面、以下のデメリットがあると思います。

  • iOSエンジニアの中でも書ける人が限られたり
  • テストコードが書きづらい
  • Swift のソースファイルの静的解析をしたり、Swiftのライブラリ資産を活用できない

本トークでは、実際にチームで運用がされているSwift でのスクリプト開発について詳しく説明したいと思います。
以下にスポットを当てる予定です。

  • Swift Package ManagerでCLIツールを構築する
  • Swiftからファイルシステムを扱う
  • Makefileなどから簡単に実行する
  • CI上でのキャッシュ運用tips
  • 実際にどのようなスクリプトを運用しているか
8
ルーキーズLT(5分)

CarthageのライブラリをSwift Package Managerで簡単に使用する!

_kzumu Shimomura Kazumasa

近年、xcodeprojファイルを軽量に保ち、Swift Package Manager(以下SPM)の方で依存関係を定義するシンプルな構成が多く採用されています。
この方式は、Point-Freeのisowordsなどの比較的大きなプロジェクトでも運用されています。
SPMではxcframeworkのライブラリを簡単に使用することができます。

本トークでは、CarthageのライブラリをSPMから参照するやり方や、
シンプルなextensionの記述によってPackage.swiftを綺麗に保つtipsに加えて、
SPMではなくCarthageを利用することのメリットを簡潔にまとめられたらと思っています。

2
ルーキーズLT(5分)

コーディング、リフティング、ストリーミング: アプリ開発者とボディビルダーの両立術

yujiro45 Jerome CHA

私は普段モバイルアプリを開発しています。その傍ら、Twitchで筋トレの生配信をしたり、この間はJBBFというボディビルの大会に出場しました。
こちらのスピーチでは、アプリ開発とボディビルのバランスについての洞察を共有します。 ストリーミング、筋トレ、コーディングの相互関係、それぞれの役割のメリット、時間管理の戦略、課題の克服、インスピレーションの見つけ方、自己ケアの優先順位について話します。 多様な情熱を受け入れ、複数の役割をうまくこなしましょう。

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

Swift開発者はどうやってMojo🔥のAIコードを適切に書けるようになりますか?

brevansio Bruce Evans

Swift開発者として、より高度なアプリケーションを構築するために新しいプログラミング言語を探求することがあるかもしれません。Mojoの言語は、AIアプリケーションを開発するために使用できる強力な言語であり、Swiftに似た構文を持ってところはいっぱいあります。この講演では、Mojoの基礎と、AIアプリケーションを構築するためにどのように使用できるかを探求します。また、MojoとSwiftの類似点と相違点、およびSwiftのスキルを活用してMojoをより迅速に学習する方法についても説明します。さらに、機械学習やニューラルネットワークの基礎を含むAIコーディングの簡単な紹介を提供します。この講演の終わりまでに、Mojoプログラミング言語とAIアプリケーションの構築方法についての堅固な理解と、AIコーディングの世界へのさらなる探求の基盤を持つことができます。

3
LT(5分)

Swiftの開発からMojo🔥へ

brevansio Bruce Evans

最近流行りのAI開発、iOS開発者の皆さんもそろそろやってみたくありませんか?そんな皆さんは、SwiftライクなAI開発用言語、Mojoを試してみましょう!このトークでは、MojoとSwiftの類似点と相違点を探り、Swiftの知識を活用してMojoをすばやく効率的に学ぶ方法について説明します。Mojoの構文、データ型、制御構造の基本をカバーし、Mojoを使用して簡単なコードを書く方法を示します。新しいプログラミング言語を学び、SwiftのスキルをMojoに活かすことに興味がある方は、本トークをぜひお聴きください。

7