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

iOSエンジニアからの生存戦略:20年の経験から学ぶ実践的ヒント集

nakajijapan nakajijapan

みなさんは、iOSエンジニアとして成長する中で、キャリアについて多くの選択肢を考えることになるかと思います。マネージャー、専門職、大企業、スタートアップ、フリーランスなど、これらはすべて重要な決断です。

私はエンジニアとして20年のキャリアを積んできました。その中で、iOSDCに関わったことが私の人生とキャリアの大きな転換点となり、モバイルエンジニアとして貴重な経験をして、今もエンジニアとして色々な経験をさせていただいています。このトークでは、私のキャリアの軌跡を基に、iOSエンジニアとしてキャリアを築き、さまざまな組織との関わりを経て、どのようにして失敗や挑戦をしてきたのか、そして、働き方の考えがどう変わっていったのかの経験や教訓を共有します。これからの皆さんの成長と生存戦略に役立つ具体的なヒントをお伝えします。なるべく一般的な話だけではなく発表ギリギリの泥臭いところを皆さんに共有していければと思います、、

発表内容:
・モバイルエンジニアとしての生存、そして成長
・大企業とスタートアップで考えるべきこと
・スタートアップでの経験、そして失敗(ポジション、報酬、組織)
・CTOになるということと会社との関わり
・成長戦略と生存戦略
・今後の展望

このトークが皆さんのエンジニアとして生存していくためのヒントとなり、次のステップに進むための道標となることを願っています。

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

Flutterでもネイティブアプリだと思われたい

touyou_dev 藤井陽介

Flutterは、単一のコードベースでiOSとAndroidの両方に対応するアプリを作成できるクロスプラットフォームフレームワークです。しかし、ネイティブアプリと比較すると、ユーザーエクスペリエンスやパフォーマンスに違いが生じることがあります。

多くの開発者はデザインを一つに統一して省エネを図るかもしれませんが、iOSネイティブの魅力に惚れ込んでいる自分としては、できる限りiOSネイティブに近づけたいと思っています。

このセッションでは、FlutterでiOSとAndroidのネイティブ感をどのように演出するかについて具体的な例を用いて説明します。具体的には、それぞれのプラットフォームに適応したウィジェットの作成方法や、プラットフォームチャネルを使ったネイティブコードの統合方法などを取り上げます。そして試行錯誤の過程で得た難しかったポイントやTips、Flutterでできること・できないことについて共有します。

ネイティブ好きだけどFlutterを使わないといけないとなっている方々にぜひ聞いてほしい発表です。

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

Appleの公式APIから読み解くAPI設計のベストプラクティス

Li Jierong

API設計に悩んだことはありませんか。例えば、以下のような点で困ることがあるでしょう。

• ネーミングが自然でわかりやすいか
• どのプログラミング言語やフレームワークの機能を利用すべきか
• 汎用性に過不足があるか
など

ガイドラインが存在するものの、全てのケースをカバーできているわけではありません。そのため、参考にしてもなかなか明確な答えが得られないことが多々あります。
そんな時に頼りになるのが、公式APIです。

本トークでは、Appleの公式APIを参考にし、具体的なAPI設計の悩みを解決する手法を解説します。この手法を活用すれば、API設計の悩みを解消するだけでなく、公式APIに対する理解も深めることができるでしょう。

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

Button Styleのすべて

Li Jierong

SwiftUIで独自のボタンを実装したことがあれば、ButtonStyleを使ったことがあると思いますが、標準のスタイルはPrimitiveButtonStyleで実装されていることをご存知ですか。

本トークでは、この二つの似て非なるプロトコルについて解説します。
まず、ButtonStyleとPrimitiveButtonStyleの基本的な違いを説明し、それぞれの使い方と具体的な例を紹介します。次に、PrimitiveButtonStyleの活用方法に焦点を当て、以下のポイントについて詳しく説明します。

• Styleの組み合わせ 
• Labelのカスタム
• Actionのカスタム

本トークを通じて、ButtonStyleとPrimitiveButtonStyleの違いを理解し、実際の開発でどのように使い分けるのが適切か明確になるでしょう。

ルーキーズLT(5分)

Swift Playgroundsで挑む!はじめてのiOSアプリ開発 - お絵描き練習ゲームを作ろう

wiroha wiroha

Swift Playgroundsは、iPadで動作する開発環境です。MacやXcodeを使わずにiPadで開発できるため、iOSエンジニア以外の人でも手軽にiOS開発に挑戦できます。このトークでは、DevRelである私が初めてのiOSアプリとしてごくシンプルなお絵描き練習ゲームを開発した学びを紹介します!
開発したアプリは、絵の定番の基礎練習である「正確な円を描くこと」をスコア化するゲームです。

  • Swift Playgroundsとは
  • 作ったアプリ
  • ここが良かった!
    • ゲームで学べる
    • 操作が直感的
    • そのまま実機で動く
    • 寝転んで開発できる
  • ここで詰まった!
    • OSのアップデートに8時間
    • なぜかアプリが開けない
    • なぜかアプリが増える
    • デバッグで求められる、正確に円を描くスキル
  • まとめ
    • 学習アプリとしての優秀さ
    • Xcodeとの使い分け

このLTにより、人事や広報など非エンジニアのiOSDC参加者がアプリ開発に挑戦する助けになれば良いなと思います。またSwift Playgroundsを使ったことがないiOSエンジニアの方にも新たな発見と気付きになることを期待しています!

LT(5分)

まだxcprettyを使っていませんか?今こそxcbeautifyに置き換えよう!

ikesyo ikesyo

CI環境などでxcodebuildのログ出力を整形したり、テスト結果をJUnit形式のXMLとして出力するために、まだまだ(意識せずとも)xcprettyを使用している方も多いと思います。しかし、xcprettyはほとんどメンテナンスされておらず、Xcodeのここ数年の新機能に対応できていない部分があります。

そこで、xcprettyからの置き換えとしてxcbeautifyを使用してみましょう。実は、fastlaneでもxcodebuildのフォーマッターとしてxcbeautifyが推奨されるようになっています(参照: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)。

このLTでは、私たちのプロジェクトでの実体験を元に、以下の内容を紹介します:

  • xcpretty使用時に直面した問題点
  • それらの問題をxcbeautifyでどのように解決したか
  • xcbeautifyのその他の優位性
  • xcbeautifyへの移行方法

これらのポイントを急ぎ足でご紹介し、皆さんがxcbeautifyに移行する際の参考になればと思います。

1
ルーキーズLT(5分)

WWDC創設期から現在まで

yamakentoc yamaken

WWDCはいつから始まったか知っていますか?
2010年…?2000年…?いえ、実はWWDCの始まりは1990年代まで遡ります。もっと言えばその前身となるイベントは更に昔から開催されています。
WWDCの公式サイトはその年のものに更新されていくため、10年前や20年前の情報はもちろん、30年前の1990年代の情報なんてそう簡単に得られるものではありません。

今回私は可能な限り、創設当時のWWDCや、その前身となるイベントについて調べてみました。
私たちはその年のWWDCの情報を追いかけることが多いですが、一度昔のWWDCを覗いてみませんか?

このトークは以下について話します。

  • WWDCができるまで
  • 初のWWDCはどのようなイベントだったのか
  • 創設期から現在までどのようなものが発表されたのか

WWDCは毎年最新の情報を得る機会となるため、今や私たちのプロダクトを成長させるためには必要不可欠なイベントとなりました。このトークを通じてその歴史を探る旅へ出ませんか?

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

Subscriptsの可能性

Li Jierong

Swiftのドキュメントによると、subscriptsを使って集合の要素にアクセスすることができます。この機能はシンプルで、他の多くのプログラミング言語と似たものです。私たちは皆、初心者の頃からこの機能を使いこなしてきました。

しかし、Swiftにおけるsubscriptsは他の言語とは少し異なる点があります。本トークでは、以下のトピックについて詳しく掘り下げ、subscriptsの可能性を探ります。

• オーバーロード:一つの型に複数のsubscripts
• 複数の引数:単一のインデックスやキーだけではない
• ジェネリクス:whereをさらに向こうへ
• セッター:計算プロパティのように振る舞う
• 他の言語機能との組み合わせ:構文の改善

これらのトピックを通じて、subscriptsの可能性を把握、より創造的かつ効率的にsubscriptsを活用できるでしょう。

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

「コンポーザブル」とは

Li Jierong

このような経験はないでしょうか。

• 共通化せずに変更が発生するたびに、全箇所を変更する必要があったり、変更漏れが出たりする
• 共通化したものの、変更が発生する際に破綻し、実装し直す羽目になる

共通化しても、しなくても適切ではない場合があり、結局経験次第と思われがちです。

ただ、共通化するかしないかの問題よりも、コンポーザブルになっていないことが問題になるかと思います。

本トークでは、以下のトピックについて紹介します。
• 「コンポーザブル」とは何か
• 単純な共通化との違い
• コンポーザブルにするための具体的な手法

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

敬意を持ったブランディング

Li Jierong

競合との差異化などの理由でブランディングデザインが広く行われています。その結果、アプリの世界は多彩で魅力的なものとなりました。しかし「このアプリはiOSアプリっぽくない」と感じた経験はありませんか。それは独特性を追求するあまり、プラットフォームの文化やユーザーの習慣を尊重できず、「形無し」のデザインになってしまっている可能性があります。

このトークでは、プラットフォームの根本的な精神を見失わずにブランディングを行い、ビジネスとユーザー体験がウィンウィンの関係を築く方法を探ります。

具体的には、以下のトピックについてお話しします。

• 見逃しやすい文化や習慣
◦ 外観のバリエーション
◦ 画面遷移
◦ アクセシビリティ
• 文化や習慣を発見する方法
• 敬意を持ちながらブランディングする手法

1
LT(5分)

iOS/iPadOSの「ViewController」の歴史を振り返る

haseken_dev haseken

アプリ開発をする上で、「ViewController」というクラスを意識しないことは、ほぼないのではないでしょうか?
iOS 2.0の「UIViewController」を皮切りに、様々なViewControllerが提供され、私たちはそれらを実装、カスタマイズして利用してきたかと思います。

では、これまでにどれだけのViewControllerが登場してきたのでしょうか?
このセッションでは、これまでに登場したViewControllerの歴史を振り返ります。

想定する方々:

iOS/iPadOS、それ以外のプラットフォーム向けアプリ開発者

ゴール:
知らなかったViewControllerを知り、今後の参考にできる

アジェンダ:

  1. 最も多くのViewControllerが登場した年と、最も少なかった年
  2. 最も多くのViewControllerを保有するFramework(UIKitを除く)
  3. 代表的なViewController紹介(4~5つ程度)

    ・Frameworkごとに機能と実装例の紹介
    ・Frameworkごとに1つまで紹介

※対象は「UIViewController」または「UINavigationController」を継承するクラスとします。

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

Flexible Online Computer Science Education While Working: the UoPeople

kent_strong_dev Kent Strong

Are you an iOS engineer without a formal CS(Computer Science) background and a degree? Learn how the University of the People(UoPeople)'s online program, designed for working professionals, can bridge the gap. I'll share my own experience of managing coursework alongside my job, applying new knowledge immediately, and advancing my career. In order to get jobs as an engineer worldwide, it is the basic to hold regular Computer Science Degrees and to be able to communicate with others in English. Discover how you can balance work and study with UoPeople’s flexible schedule.

ルーキーズLT(5分)

USキーボードでの英かな入力切り替えアプリの 「再発明」を通して学んだこと

Kotarong1 Kotaro Suto

USキーボードを使っていると左右の⌘キーを使って英数入力とかな入力を切り替えたくなることが多いと思います。この機能を実現するためのアプリは既に存在しますが、このLTでは、私が行った再発明を通じて学んだ、iOS開発においてあまり触れる機会のないSwiftUIやAppKitの機能、そして開発中に直面した課題について紹介します。

発表に含まれる内容:

  • MenuBarExtra、GroupedFormStyle などの紹介
  • NSEvent.addGlobalMonitorForEvents()の使用方法と注意点について
  • CGEvent、CGKeyCode について
  • 仮想キーコードはどんなものがあるのか
  • SwiftUIとNSEvent.addGlobalMonitorForEventsの相性問題
2
ルーキーズLT(5分)

5分で学ぶRealityKit: AR空間上のオブジェクトを自由に動かすコツ

shoryu927 tatsubee

RealityKitはiOSやvisionOS向けのARアプリケーションを開発するための強力なフレームワークです。
これを用いることで、任意のオブジェクトを現実世界に呼び出すことが簡単に実現可能です。
では移動や回転(Transform)はどうでしょうか?

並行移動や単純な回転をさせることは簡単です。しかし、少し複雑な挙動をさせようとすると途端に難しくなります。
私の場合、「オブジェクトの向きをカメラに追従させる」機能を実装する際に沼にハマり、これを解決するためにオイラー角や行列を使った計算が必要でした。

このようにRealityKitを扱う際にはオイラー角や行列、ワールド座標にローカル座標など、普段の開発ではあまり見慣れない概念を適切に扱う必要がありますが、これらの概念を理解し、コツを知ることで、実は簡単に扱えるようになります。

本LTでは、この「オブジェクトの向きをカメラに追従させる」という具体的なユースケースを例に、一見難しく見えるオイラー角や行列を使ったオブジェクトのTransformを、簡単に考え・実装する方法を5分間でお伝えします!

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

友達に似てる有名人を探し出せ!顔の類似度判定器の開発とその技術

akihiro_kokubo Akihiro Kokubo

ある日、友達からユニークな相談が舞い降りた。
「自分に一番似ている有名人を見つけてほしい」
どうやら、ファッションやヘアスタイルの参考にするようだ。
100人の有名人の中から、友達に最も似ている人を探し出すミッションはこうして始まった!


友達に似ている有名人を特定し期待に応えるために、顔の類似度を判定するツールをSwiftで作ったので、技術的な裏側を解説します。
iOSのオンデバイスAPIを用いてランドマークを取得し、2つの顔のランドマーク同士の類似度を行列計算により算出しています。

普段なら便利なライブラリを探し続けネットをさまよう自分が、自らアルゴリズムを実装する道を選び、試行錯誤した経験を共有します。
特に難しかったポイント、それをどう解決したのか、そしてこのプロジェクトを通した学びをお伝えします。

今回の作戦

  • Visionフレームワークで、顔写真から顔のランドマークを取得する
  • 点群同士の類似度を算出するための作戦を定める
    • 2つの点群の重心を原点に移動する
    • 2つの点群のスケールを正規化する
    • 二乗誤差が最小になるように回転する
  • Accelerateフレームワークで、行列の演算や特異値分解を行う
1
レギュラートーク(40分)

オンデバイスAIを極める - Core MLモデル変換の全技術

shu223 堤 修一

昨今、世の中を席巻している大規模言語モデル(LLM)をはじめ、音声認識、画像生成、物体検出やセグメンテーションなど、多くのタスクで機械学習(ML)モデルが大活躍しています。これらのモデルをiOS/macOS/visionOS/watchOSのハードウェア性能を最大限に引き出しつつ動かすには、Core MLモデルに変換する必要があります。

逆にいえば、モデル変換の技術をマスターすることで、最先端のモデルをいち早く利用したり、自前データで学習したモデルをアプリに組み込むことが可能になります。

Core MLモデルへの変換には「coremltools」というツールを利用します。ドキュメントもあり、その変換手順は一見シンプルに見えますが、実際のところまず一発ではうまくいかないでしょう。多くの場合、モデルの一部を切ったり置き換えたりする「手術」が必要となります。

本セッションでは、Core MLモデル変換に必要な技術や知識、落とし穴、問題の回避方法について、実際のモデルを題材に解説します。その中で、Appleデバイスの性能を最大限引き出すコツや、モデルサイズを圧縮する方法なども紹介します。

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

Apple Vision Proは言語の壁を超えられるか

noppefoxwolf noppe

Apple Vision Proは、両手が自由で、相手の目を見ながらアプリを使う事ができます。
この特性により、アプリを使いながら、自然にボディーランゲージを使用することができるのです。
つまり、Apple Vision Proは英語と相性が良いのでは無いでしょうか?

この技術の進化により、英語が苦手な私がApple Vision Proを使って英語を話せるようになる日は来るのでしょうか?
自作のアプリを通して、同僚のネイティブスピーカーのエンジニアと、英会話を試みます。

このトークでは、英会話のサポートをするアプリの開発手法について紹介します。
そして、それらを通して、Apple Vision Proならではのアプリとは何かについても考察します。

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

ローカルLLMをiOSで「実用的に」動かしたい

shu223 堤 修一

ローカルLLMは、その名の通りローカルで動作する大規模言語モデル(LLM)です。OpenAI社のGPT-4などのモデルはクラウドベースで動作しますが、ローカルLLMは手元のデバイスで動かすことができます。データを外部サーバーに送信しないためデータのプライバシーが確保でき、APIの従量課金が発生せず、通信環境に左右されることもありません。

なにより我々iOSエンジニアにとって、クラウドベースのLLMは「APIの向こう側」の話でしかなく技術的にはHTTPリクエストを投げるだけですが、ローカルLLMにはオンデバイスで動かすロマンがあります。

では、これらローカルLLMをiOSデバイスで動かすには、どのような手段があるのでしょうか。そして精度や速度の面で「実用的に」動かすことはできるのでしょうか。

どのようなモデルをチョイスし、どう動かし、どう最適化していくのか。本セッションではローカルLLMをiOSデバイス「実用的に」動かすための全知識について解説します。

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

TextKit2を活用したカスタムTextViewの作成

noppefoxwolf noppe

iOSには、テキストを表示するためのコンポーネントが複数存在します。例えば、UILabel、UITextView、SwiftUI.Textなどです。
これらのコンポーネントを利用することで、私たちは簡単にテキストを表示することができます。
しかし、セルフサイジングやビューアタッチメント、リンクの表示など、複数の要求が重なると、適したコンポーネントが存在しないことが分かります。

このトークでは、TextKit2を使って理想のTextViewを作成する方法について解説します。

具体的には以下の内容をカバーします:

  • TextKit2での文字列描画: TextKit2を使ってテキストを直接描画する方法を紹介します。
  • ビューアタッチメントの実装: テキスト内にビューを埋め込むための手法を説明します。
  • セルフサイジングの実現方法: テキストの内容に応じて自動でサイズを調整する方法について解説します。
  • リンク表示とインタラクションの実現方法: リンクの表示やインタラクションを実現する方法を説明します。

これらのトピックを通じて、TextKit2の強力な機能を理解し、カスタマイズ可能なTextViewを作成できるようになります。

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

このSwiftUIの迷宮(ダンジョン)にState-Drivenのマインドセットを!

lovee 星野恵瑠

SwiftUIの登場により、iOS開発はUIKitのEvent-DrivenからState-Drivenのパラダイムへと進化しました。しかし、まだ多くの開発者はState-Drivenに慣れるのに苦労しています。本トークでは、State-Drivenなマインドセットを手に入れるための方法を解説します。

本トークは以下の内容をカバーします:

  • 背景:
    • SwiftUI導入の背景とState-Drivenマインドセットの重要性
    • SwiftUIとUIKitの違いを具体例で説明
  • State-DrivenとEvent-Drivenの違い:
    • 記述方法の本質的な違い
    • Single Source of Truthの重要性
  • State-Drivenのマインドセット:
    • 機能要件をState-Drivenに落とし込むアプローチ
  • 実践例:
    • よくある機能の実装方法とベストプラクティス
    • 逆によく見かけるアンチパターン

このトークでは、State-Drivenのマインドセットををダンジョン攻略に例えて学び、Event-Drivenからの脱却を目指します。初心者から中級者まで役立つ内容を提供します。