71の国と地域でレシピサービスを提供している「クックパッド」は今年の3月に26周年を迎えました。
ご存じの方もいるかもしれませんが、クックパッドでは昨年さまざまな出来事がありました。そういった状況の中で今年新卒として入社したiOSエンジニアのHarutaが、クックパッドアプリ開発のリアルな現状をご紹介します。
【キーワード】 アプリ品質を保つ取り組み、デザインシステム、リリースフロー、日本と海外向けアプリの違い...
詳しい内容は当日のお楽しみに!
今日話題になっている生成AI勃興の背景にはGPU、Vector演算器による計算機資源の計算力の爆発があります。
このトークではそのGPUによる計算能力の増大がどのようにもたらされたのか、汎用演算器から専用回路、ベクトル処理による並列化、グラフィクス処理用途のGPUの誕生とGPGPU、そしてNPU等歴史を追って解説します。
概要:
・GPUの歴史
・汎用処理から専用回路へ
・グラフィックカードの進化と主要な技術革新
・NPUの登場とその意義
・学習とインファレンス、オンデバイスML、エッジML
・まとめと今後の展望
2024年4月、ANDPAD黒板でオフラインモード機能の提供が開始されました。
これまで、山間部・僻地や地下といった電波の届きにくい場所での工事においては、アプリが十分に利用できない状態でした。特に、電波の届きにくい場所における工事関係の写真撮影に対するニーズは高く、この課題に対処すべく開発されたのがオフラインモード機能です。
オフラインモード機能は大きな機能のため、昨年末から2つのプロダクトチームのメンバーが協力して開発を進めてきました。開発中には様々な課題に直面し、その度にメンバー全員で知恵を振り絞って課題を解決しました。
本セッションでは、そんなANDPAD黒板のオフラインモード機能開発の経緯から、開発の詳細、開発時に遭遇した問題に対してどう解決したのかについてご紹介します。また、開発を通じて得られた iOS 開発に関する知見についてもご紹介します。
newmoは今年の1月に設立された新しい会社です。"移動で地域をカラフルに" をミッションに掲げ、利用者視点に立ったサステナブルな地域交通の実現を目指すスタートアップです。
newmoではAPIのスキーマ定義に、より多くの情報を記述する宣言的なアプリケーション開発を行っています。スキーマからコードを自動生成することで、APIの挙動が理解しやすくなると同時に、各チームが主体的・自律的に開発が進められる状態を実現します。
モバイルアプリとバックエンドAPIとの通信にはGraphQLを採用しました。ディレクティブを活用して、APIクライアントの生成に留まらない、より宣言的なアプリケーション開発を行っています。
本セッションでは、より安全に、高速にiOS開発を進めていくための弊社の取組みをご紹介します。
サイボウズではkintone、 サイボウズ Office、 Garoonの3アプリを主に開発しています。
これらのアプリは開発開始時期によって利用技術がまちまちで、認証機能など共通の機能であってもそれぞれで再実装していました。
そこで、サイボウズ Officeアプリの開発時に蓄積した経験に基づいて、共通部分をSwift Concurrencyやswift-async-algorithmsを活用した共有のSwift Packageにすることにしました。
抽象度を高めることで複数プロダクトに適用できる、機能の境界が明確な複数のPackageができました。
コードが8000行削減されたり、RxSwift/UIKitからSwiftUIへの置き換えを加速したり、それぞれのプロダクトでの課題解決が進んでいます。
この取り組みの中でWKWebViewをSwiftUIでラップするOSSも生まれました。
このトークでは、以下のトピックでサイボウズでの取り組みを紹介します。
このトークが複数アプリでの共通化、単一アプリでのマルチパッケージ境界設計、共有コードの運用の助けとなれば幸いです。
2015年にサービスを開始したTVerは現在では月間4.5億回再生を超える大きなサービスに成長しました。
TVerのiOSアプリ開発における生産性と品質をさらに向上させ組織やプロダクトをスケール可能にするための取り組みとして、2024年度からはiOSアプリのリアーキテクチャに取り組んでいます。
本セッションでは、多くのユーザー/ステークホルダーを抱えるTVerアプリにおいてどのように事業リスクを最小化しながらリアーキテクチャプロジェクトを推進しているかについて紹介します。
<現在のアーキテクチャと目指すアーキテクチャ、その採用背景について>
・SPMを用いたマルチモジュール化
・UIKitからSwiftUIへの移行
・Design Systemの導入
<リスクを最小化するための戦略について>
・モジュールごとの段階的なリリース
・Feature Flagを用いた開放率のコントロール
・iOSのversion戦略
どの開発チームにとっても、開発生産性の向上は重要な課題です。Sansan株式会社では、SaaSの営業DXサービス「Sansan」を提供しています。これまで、SansanのiOSアプリとAndroidアプリは別々に開発されてきました。 今年、iOSとAndroidのビジネスロジックを共通化し、ソースコードの統一やOS間の仕様差を解消することで開発生産性を向上させるために、Kotlin Multiplatform (KMP) を導入しました。
しかし、大規模なプロダクトにKMPを導入することは、大きなインパクトを伴う変更です。本セッションでは、KMP導入に向けた技術的意思決定のプロセスやKMP導入の効果を最大化するためのノウハウを紹介します。
具体的には以下のトピックについてお話しします:
・KMP導入の目的を明確にする
・KMP導入の効果を試算する方法
・iOS/Android/KMPの全体アーキテクチャ設計と技術的意思決定のプロセス
・KMP導入にあわせた組織設計
・KMP導入で発生する課題とその解決策
KMPの導入を検討されている方、意思決定プロセスや組織設計に興味がある方、Sansanのアプリ開発事情を知りたい方は是非ご参加ください!
こんなお困りごとはございませんか?
・ 『サーバー、ネットワークの障害でアプリが使えなくなる』
・ 『現場のWi-Fiが弱く、アプリがサクサク使えない』
・ 『施設が混雑した際にネットが遅くなり、現場の業務に支障がある』
・ 『災害時に備えたいが、ハードウェア追加はコストが合わない』
Dittoは、インターネットなしでの快適なデータ同期を実現するSDKです。
自動的にメッシュネットワークを構築し、データを中継します。
また分散していてもデータがコンフリクトしない仕組みを持っています。
レストランのような、通信が売上に直結する場所、
飛行機などの、インターネットが不安定な場所での活用が増えてきています。
このセッションでは、Dittoの仕組みと使い方について詳しく紹介します。
2024年5月1日以降、AppleはApp Storeへの提出におけるプライバシー要件をアップデートしました。
アプリ本体ではプライバシーマニフェストの追加が必要になり、これに加えてサードパーティーSDKではコード署名も必要になります。
プライバシー要件のアップデートは、すべてのiOSエンジニアにとって重要なトピックと言えます。
ただ、必要な対応についての情報は少なく、各社や個人でどのように対応しているかは掴みづらい状態です。
そこで本セッションでは、ヤプリで5月1日までに進めた実際の対応と、その後の運用体制を紹介していきます!
具体的には以下の内容をお話しします。
プライバシーマニフェストとは?というところからスタートし、一般的なユースケースでの対応フローを理解した後、最後にプラットフォームでの運用体制を知っていただければと思います。
実践事例を通して、ご自身のアプリではどういった対応が必要なのかや、今後どのような運用フローとするかを検討する一助となること間違いなしです!
ウォンテッドリーは、「究極の適材適所によりシゴトでココロオドル人をふやす」をミッションとして、働く人全てに関わるプロダクトを開発しています。モバイルアプリは主にWantedly Visitアプリを展開し、求職者と企業の最適なマッチングを提供するサービスを提供しています。
Wantedly Visitの開発では、技術的にはKMPを使ったモバイルプラットフォーム共通のロジックと、SwiftUIやJetpack Composeといったモダンな技術スタックで開発を行っています。
このセッションでは、普段のKMPを使った開発の進め方や、チームの話、今後の方向性などについて話す予定です。
これまで主にWebサイトやWebアプリのデザインをしてきた私は、業務でiOSアプリをデザインするにあたり、エンジニアと「iOSアプリらしいデザイン」について議論する機会がありました。しかし私には「iOSアプリらしさ」とは何か理解できず、戸惑いを感じました。ただiOSのパーツを使うだけではiOSらしくはならず、見た目だけの問題ではないようです。
そこで私は、iOSアプリらしいデザインを分析し言語化することにしました。さまざまなアプリを観察し、Human Interface Guidelinesを読み込むことで、iOSアプリ特有の特徴があることに気づきました。
例えば、アニメーションを使用してわかりやすいインターフェースを提供し、タッチジェスチャーの活用で操作感を向上させることなどが挙げられます。これらの特徴を理解することで、見た目だけでなく、操作性やユーザー体験全体を通じてiOSらしいデザインを実現できます。
この登壇では以下の内容をお伝えします。
iOSらしいデザインを理解し、実践することで、アプリをより魅力的にしていきましょう!
医療アプリの開発においては、患者の安全と利便性の向上が最重要課題となります。一方で、医療制度の変更への迅速な対応や新規機能の実装など、高い生産性も求められます。この2つの要件は相反するものですが、その両立は避けられない課題です。
本セッションでは、メドレーのオンライン診療・服薬指導アプリ「CLINICS」の開発を通じて、いかにして安全性と生産性の両立に取り組んでいるかをご紹介します。
・診療報酬改定などの制度変更に柔軟に対応できる体制
・SPMマルチモジュール、トランクベース開発など生産性向上の工夫
・MagicPodを活用した自動テスト環境での効率的な品質確保
・法律・ガイドライン・制度対応や社内他部門との連携を含む総合的なアプローチ
医療アプリの開発は技術的側面のみならず、適切な規制対応や組織間調整など様々な課題に直面します。本セッションでは、そうした課題への具体的な取り組みをご紹介しつつ、品質と速度の両立に向けた実践的な知見をお話しします。
医療×テクノロジーの最前線で得られた学びを、皆様の開発にも活かしていただければ幸いです。
ウェルスナビは「働く世代に豊かさを」というミッションのもと、自動で資産運用を行うロボアドバイザーサービスを提供しています。
私たちの開発組織はアジャイル開発体制を採用しており、迅速かつ効率的にサービスを提供するための組織作りを進めています。
また、ロボアドバイザーサービスにとどまらず、働く世代の幅広いお金の悩みを中立的な立場からオンラインで解決する総合アドバイザリー・プラットフォーム(MAP: Money Advisory Platform)の開発にも取り組んでいます。
資産運用に特化した一つの「サービス」から、お金の悩みを解決できる「プラットフォーム」にしていくために、モバイルアプリとして必要なことは何か。
App Intentsは、アプリの特定の機能をシステム(iOS)に伝えることができる重要な機能です。これにより、Siri、ショートカット、ウィジェットなど、様々な方法でアプリの機能を利用することが可能になります。しかし、この機能はまだ多くのユーザーにとって使いやすいとは言えず、これまではあまり注目されてきませんでした。
しかし、iOS18の登場により、状況は劇的に変わる可能性があります。Apple Intelligence (AI)の導入により、システム(iOS)とアプリはよりシームレスに連携することができるようになります。これにより、「ユーザーのタップによるアプリの起動」だけでなく、「ユーザーのコンテキストを読んだAIのサジェストによるアプリの起動」が可能になります。したがって、App Intentsを適切に設計し、組み込むことがますます重要になってきます。
「Anything your app does should be an App Intent.」(WWDC24セッションより)という言葉が示す通り、アプリのほとんどの機能をApp Intentsとして定義することが求められる時代が来るかもしれません。
本ポスターセッションでは、App Intentsを研究し、iOS18の登場による変化がアプリの設計や開発にどのような影響を与えるかについて皆さんと議論したいと思います。
現在、Flutter、React Native、MAUI、Compose Multiplatformなど様々なクロスプラットフォームフレームワークが登場しており、業務での利用も増えているかと思います。
弊社でもFlutterを使用した案件が出てきております。
そのような中で、「Flutter等を使用してiOS・Androidを一緒に開発できるのに、Swiftで開発する必要はあるのか」という疑問を誰しも一度は抱いたことがあるかと思います。
実際、私自身も個人的なアプリ開発では、Flutterなどを使用することが増えました。
そのため、「とりあえず効率が良さそうだから」という理由だけでクロスプラットフォームを選ぶのではなく、しっかりとした理由に基づいて技術選定を行うことで、開発効率を向上させ、質の高いアプリを作れるようになると考えました。
そこで本トークでは、今一度Swiftとクロスプラットフォームでの開発を比較し、それぞれを利用する場面について考えていきたいと思います。
2024年6月12日、「スマホ特定ソフトウエア競争促進法」が可決され成立しました。
これによりApp Store以外のストアからアプリをインストールする「サイドローディング」が義務化されることになります。
もしサイドローディングが認められると、どのような変化が起こるでしょうか。
アプリ配信者として、どのような選択を取るべきなのでしょうか。
新法成立の影響が身近なところにまで及ぶかもしれません。
改めてこのタイミングで、アプリ配信を取り巻く社会的な動きを知っておくことは、将来の備えとして大事なことだと考えます。
本セッションは、サイドローディングの賛否について、提言するものではありません。
新法に対する様々な意見を整理しながら、法律の内容や目的について理解を深めた上で、
先行するEUを事例として、これから起こりうる変化を想像します。
Appleが発表したスマートホーム規格の「HomeKit」に対応しているアクセサリは、iOSやmacOSの『ホーム』アプリやコントロールセンターなどから操作できるという、他のスマートホーム製品にない強みを持っています。
しかし、日本国内でよく知られているスマートホームのメーカーの中で、HomeKitに対応している製品を出している企業は非常に少ないという課題があります。
このポスターセッションでは、HomeKit非対応のアクセサリを『ホーム』アプリに追加する方法であるHomebridgeとMatterに焦点を当て、私自身が実際に構築した『ホーム』アプリで一元管理できるスマートホーム環境を紹介します。
さらに、現状できることや得意・苦手な点を説明し、これからスマートホームを始める際のおすすめの方法を解説します。
このセッションを通じて、私自身がスマートホーム環境の構築で感じた課題感をもとに、2024年夏現在の国内のスマートホーム事情をキャッチアップできる内容をお届けします。
テストコードの結果が不安定となってしまう原因を細かく分類しても、到底200種類になんてならないでしょう。このポスターセッションでは、テストが不安定になる実例を数種類紹介します。
紹介する不安定なテストコードというのは100%失敗するようなそんな甘いものではありません。CIサーバでビルド失敗時にガチャのようにリビルドすれば、たまに成功するようなテストコードです。ポスターセッションでは、なぜそのテストコードが不安定で、どのように解決したかについてクイズ形式にしたいと思っています。
Swift 5.9からSwift Macroが使えるようになり、iOSアプリ開発の現場でもその活用が進んでいます。Swift Macroは手作業で書く必要があったコードを自動生成できボイラープレートを減らす上で非常に有効です。
このポスターセッションでは、
Swift Macroの簡単な概要と従来のコード生成系ライブラリにはない長所を説明し、私が公開した超絶便利なswift-property-nameというSwift Macroの実装について詳しく紹介します。
このセッションで取り上げない内容として、Swift MacroのFreestanding MacroとAttached Macroのさらに細かい分類については触れません。さらに、コンパイル時間はどうなるのか、手作業でボイラープレートを書くほうが温かみがあるではないか、などの話題にも触れません。それらの話は、他のセッションに期待したり、各種ドキュメントを参照していただくのが良いと思います。
私が今回話すのは、複数あるSwift Macroの実装方法のなかで、私が何を考えてそのような実装にしたのかだけです。このトークを通じてみなさんのiOSアプリ開発の効率化にも何かしら役立てていただければ幸いです。
The Composable Architecture(TCA)はiOSアプリ開発において関数型スタイルの原則を取り入れているOSSのフレームワークでありライブラリです。このポスターセッションでは、2020年5月にv0.1がリリースされ現在まで4年を経過しアップデートされ続けているTCAの良さを整理します。
そもそもiOSアプリ開発においてフレームワークが何の役に立つのでしょうか?現代はSwift Concurrencyがあり非同期処理は簡単に捌けます。SwiftUI.ViewもあるんだからModelという奴をつくりObservationで使えるようにしたり、もしくはObservableObjectにViewModelなんて名前をつけてそれっぽくやったらアプリなんて簡単にできるじゃないですか。さらにXcode 16ではオンデバイスでAIが候補を出してくれたり、Swift Assistがあなたの代わりにコードを用意してくれます。またSwift Macroによって、より無駄なコードを書く必要もなくなってもいます。
そのような現状で、TCAもSwiftの進化にあわせて進化し、互換性を保ちながら弱点を解決しさらに使いやすくなっています。このセッションでは、iOSアプリの作り方を知っているだけでは解決に至らない課題について説明し、TCAがどのようにそれらを解決するかを具体的に解説します。