71の国と地域でレシピサービスを提供している「クックパッド」は今年の3月に26周年を迎えました。
ご存じの方もいるかもしれませんが、クックパッドでは昨年さまざまな出来事がありました。そういった状況の中で今年新卒として入社したiOSエンジニアのHarutaが、クックパッドアプリ開発のリアルな現状をご紹介します。
【キーワード】 アプリ品質を保つ取り組み、デザインシステム、リリースフロー、日本と海外向けアプリの違い...
詳しい内容は当日のお楽しみに!
どの開発チームにとっても、開発生産性の向上は重要な課題です。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のアプリ開発事情を知りたい方は是非ご参加ください!
これまで、データが非同期かつ継続的に流れてくる処理や、いつ発生するか分からないイベントを受け取る処理には、クロージャや Delegate、オブザーバーなどが用いられてきました。また、Apple プラットフォームでは Combine、サードパーティの OSS では RxSwift などといった外部のフレームワークも使用されてきました。
これらのほとんどは、Swift 5.5 で追加された AsyncSequence を使用する方法へと移行できます。実際、Apple が提供するフレームワークでも、従来 Delegate が用いられてきたような非同期にイベントを伝える API について、最近新規に追加されたものは AsyncSequence を採用しています。他のデザインパターンから AsyncSequence に移行することで、Swift Concurrency が持つアクター分離などのさまざまなメリットを享受できます。一方で、非同期なシーケンスならではのメモリリークにも注意が必要です。
このトークでは AsyncSequence の基礎、他のデザインパターンからの移行方法、移行するメリット、注意点まで、UIKit・SwiftUI を用いたアプリの例を使いながら詳しく紹介します。
Delegate、今までありがとう。これからは AsyncSequence でやっていくよ。
StoreKit2はiOS 15から導入された新しいアプリ内課金フレームワークで、より安全で効率的な課金実装が可能になります。2024年2月より、ABEMAではこれまでの「ABEMAプレミアム」に加えて、新たな課金商品の提供を開始し、同時にStoreKit2を用いた課金システムの全面的なリニューアルを実施しました。このセッションでは、新たな商品の検討からリニューアルの設計、実装、テストに至る全フローを詳細に解説します。
アプリ内課金はユーザー体験とビジネスに非常に重要ですが、その実装は複雑でエラー対策も多岐にわたります。このセッションでは、StoreKit2を用いて効率的にこれらの課題を解決する具体的な方法を示します。皆様のアプリ開発に役立つ情報提供を目指します。
今日話題になっている生成AI勃興の背景にはGPU、Vector演算器による計算機資源の計算力の爆発があります。
このトークではそのGPUによる計算能力の増大がどのようにもたらされたのか、汎用演算器から専用回路、ベクトル処理による並列化、グラフィクス処理用途のGPUの誕生とGPGPU、そしてNPU等歴史を追って解説します。
概要:
・GPUの歴史
・汎用処理から専用回路へ
・グラフィックカードの進化と主要な技術革新
・NPUの登場とその意義
・学習とインファレンス、オンデバイスML、エッジML
・まとめと今後の展望
「ここはWebViewでいきましょう」
iOSエンジニアであれば、ネイティブで実装したい気持ちとビジネス要件との間で葛藤し、最終的にWebViewでの実装を選択した経験がある方も多いと思います。
このトークでは、iOSアプリ開発における強力なWeb表示コンポーネントであるWKWebViewのAPIについて徹底解説します。
WKWebViewには多くのAPIが存在し、その中にはあまり知られていないものもあります。
主要なAPIだけでなく、できるだけ普段あまり使われないAPIも含めて説明することで、参加者がWKWebViewで実現可能な機能を幅広く理解できるようになります。
具体的には、私が日々のWKWebViewを用いた開発の中で得られたノウハウを交えながら、各APIの役割や使用例、効果的な活用方法について解説します。
初心者から中級者まで、幅広いレベルの開発者にとって役立つ内容を提供しますので、ぜひご参加ください。
めざせ!WKWebViewマスター!
内容:
ヘルスケアアプリから「すべてのヘルスケアデータを書き出す」機能を使用すると、これまでのヘルスケアデータを取り出せることをご存じでしょうか。このデータはzip形式で保存され、シェアすることが可能です。zipデータを解凍すると、いくつかのCSVデータや2GBを超える巨大なXMLデータなどが含まれています。これらのデータは一体どうやって活用すれば良いのでしょうか。
このセッションでは、iOSの巨大なXMLデータの解析方法やCSVデータの処理方法について詳しく解説します。エクスポートされたヘルスケアデータの内容を理解し、他のプラットフォームでインポートする際にも役立つ知識を提供します。具体的には、以下のポイントに焦点を当てます:
このセッションに参加することで、ヘルスケアデータを効果的に活用するためのスキルを身につけることができます。
メモやファイルなど、いくつかのApple純正アプリに搭載されている「マークアップ」機能を利用したことはありますか?
マークアップ機能を用いることで、色・太さなどを自由に操作しながら書類に書き込みを行うことができます。
PencilKitは、マークアップ機能をアプリに組み込むためのフレームワークです。
マークアップ機能に搭載されている以下のような機能は、すべてPencilKitを使うことで実装することができます。
本トークでは、実際に開発したPDFファイルへの手書き注釈を題材に、以下のポイントについて学んだことを発表します。
これらの内容を通じて、PencilKitを用いた実践的なPDF注釈機能の実装方法を詳しく解説します。
チャートはデータの傾向をビジュアルで理解できるため、とても便利です。しかしながら、視覚的に表現されたチャートは目で見る必要があり、視覚障がい者や弱視の人にとっては利用が困難です。チャートが持つたくさんの情報を適切に受け取れないユーザーがいることはコンテンツ提供者側として避けたい事象です。
Apple の API にはオーディオグラフ(Audio Graph)やチャートを説明 (Describe Chart) させるための機能が提供されています。オーディオグラフは視覚的なチャートの情報を音の高低で表現し、Voice Over で読み上げさせることができます。また、チャートの詳細 (Chart Details) を使用すれば、チャートの重要な特徴や傾向を言葉で説明することができます。これらの機能により、視覚に不自由のあるユーザーもチャートの内容を理解することができるようになります。
本トークでは以下の内容をお話しします。
参加者は誰もが利用できるリッチでアクセシビリティの高いチャートを作成するための知見を深め、自分たちのコンテンツに適用していくことができます。
医療アプリの開発においては、患者の安全と利便性の向上が最重要課題となります。一方で、医療制度の変更への迅速な対応や新規機能の実装など、高い生産性も求められます。この2つの要件は相反するものですが、その両立は避けられない課題です。
本セッションでは、メドレーのオンライン診療・服薬指導アプリ「CLINICS」の開発を通じて、いかにして安全性と生産性の両立に取り組んでいるかをご紹介します。
・診療報酬改定などの制度変更に柔軟に対応できる体制
・組織横断のユーザー体験設計による、使いやすさを重視した機能開発
・SPMマルチモジュール、トランクベース開発など生産性向上の工夫
・MagicPodを活用した自動テスト環境での効率的な品質確保
・法律・ガイドライン・制度対応や社内他部門との連携を含む総合的なアプローチ
医療アプリの開発は技術的側面のみならず、適切な規制対応や組織間調整など様々な課題に直面します。本セッションでは、そうした課題への具体的な取り組みをご紹介しつつ、品質と速度の両立に向けた実践的な知見をお話しします。
医療×テクノロジーの最前線で得られた学びを、皆様の開発にも活かしていただければ幸いです。
2024年4月、ANDPAD黒板でオフラインモード機能の提供が開始されました。
これまで、山間部・僻地や地下といった電波の届きにくい場所での工事においては、アプリが十分に利用できない状態でした。特に、電波の届きにくい場所における工事関係の写真撮影に対するニーズは高く、この課題に対処すべく開発されたのがオフラインモード機能です。
オフラインモード機能は大きな機能のため、昨年末から2つのプロダクトチームのメンバーが協力して開発を進めてきました。開発中には様々な課題に直面し、その度にメンバー全員で知恵を振り絞って課題を解決しました。
本セッションでは、そんなANDPAD黒板のオフラインモード機能開発の経緯から、開発の詳細、開発時に遭遇した問題に対してどう解決したのかについてご紹介します。また、開発を通じて得られた iOS 開発に関する知見についてもご紹介します。
newmoは今年の1月に設立された新しい会社です。"移動で地域をカラフルに" をミッションに掲げ、利用者視点に立ったサステナブルな地域交通の実現を目指すスタートアップです。
newmoではAPIのスキーマ定義に、より多くの情報を記述する宣言的なアプリケーション開発を行っています。スキーマからコードを自動生成することで、APIの挙動が理解しやすくなると同時に、各チームが主体的・自律的に開発が進められる状態を実現します。
モバイルアプリとバックエンドAPIとの通信にはGraphQLを採用しました。ディレクティブを活用して、APIクライアントの生成に留まらない、より宣言的なアプリケーション開発を行っています。
本セッションでは、より安全に、高速にiOS開発を進めていくための弊社の取組みをご紹介します。
SwiftDataはCore Dataの後継としてリリースされたAppleの新しいデータ永続化フレームワークです。SwiftDataはCore Dataよりもはるかに簡単で安全に使うことができますが、Swift Concurrencyとともに利用する際はデータ競合に注意が必要です。これは、SwiftDataがCore Dataの上に構築されたAPIであるためです。
そこで本トークでは、SwiftDataをSwift Concurrencyと共に安全に扱う方法を解説します。SwiftDataをこれから利用する方やCore DataでConcurrencyの扱いに苦労した経験を持つ方を主な対象とします。SwiftDataの技術スタックをSwift Concurrencyの観点およびSwiftDataの元であるCore Dataの観点から解説し、SwiftDataを並行安全に扱うための原則、ならびにコーディングにおけるベストプラクティスを紹介します。
本トークによって、参加者の皆さまはSwiftDataをより自信を持って扱えるようになるでしょう。
結婚したことでパートナーが持っていた電子ピアノが我が家にやってきました!
電子ピアノといえばガジェット!ピアノ未経験とはいえ、エンジニアとしてはこれは触ってみるしかない!
ということで、ピアノ経験者監修の電子ピアノと連携するiPadアプリを実装しました
この電子ピアノはMIDIという規格を通して他のデバイスへ叩いた鍵盤の情報などを連携することができます
今回はこのMIDIをSwiftから利用し、その情報を表示するアプリの実装の概要について紹介します!
具体的には…
発表では実装したアプリが実際にピアノと接続しながら動く様子をお見せします!
この発表を通して、電子楽器とアプリ連携の世界に一歩足を踏み出してみましょう!
またこのデモの中でピアノ完全未経験の発表者がどれほどピアノが上手く弾けるようになっているかにも注目です
SwiftのData型はバイナリデータを扱うための型です。
RandomAccessCollectionなどの便利なプロトコルに準拠しているおかげで、気軽にバイナリデータの読み書きができます。
でも「ほぼUInt8の配列でしょ」と思っているとそんなことはなく、Data型にしかない、面白くも「あぶない」特徴がいくつかあります。
それらを知らないとプログラムをクラッシュさせてしまうこともしばしば。
コードレビューでこの関数をLGTMしてしまいそうになったら、ぜひこのトークを聴いてください。
func getUInt32(from data: Data) -> UInt32 {
switch data.count {
case 0:
return 0
case 1:
return UInt32(data[0])
case 2, 3:
return UInt32(data[1]) * 256 + UInt32(data[0])
default:
return data.withUnsafeBytes { $0.load(as: UInt32.self) }
}
}
Swiftが好きだけど何もわからん。自分よりSwiftを愛してて詳しい人ばかり。つらい。
Swiftコンパイラを勉強しようとして返り討ちにあった方は多いでしょう。どこから手をつけるとよいかもわからん!
「型推論ハンズオン」[omochi 2019]はSwiftの型推論にフォーカスして学ぶ合宿用ハンズオンです。未実装の部分に正しいコードを書いて型推論器を完成させ全テストをパスできたらクリアです。SwiftSyntaxを使った本物そっくりの言語が題材で、Swiftを理解したい私にはありがたい教材です。
私は「Swiftの型推論を学ぼう」[omochi 2024]を聞き、発表の元ネタであるというこのハンズオンで勉強することにしました。合宿は5年前に終了しているため1人で挑みます。
あれ?ハンズオン壊れてるよ?テスト通すどころかハンズオンをコンパイルできなくて挑戦できないよ??
果たして私は5年前のハンズオンをSwift 5.10に対応させSwiftの型推論を†完全理解†できるでしょうか?
話すこと
ジオフェンスとは、特定の地理的エリアにデバイスが入ったり出たりしたことを検知できる仕組みです。
iOSでは、中心の緯度経度と半径を指定するだけで簡単にジオフェンスを設置できます。この機能はアプリを起動していなくても検知が可能で、アイデア次第で便利なサービスを提供できます。
しかし、iOS/Android両方開発してみると、各OSごとの挙動の違いがあったり、確認方法にも工夫が必要です。
今回のトークでは、ジオフェンス機能をiOS/Androidの両OS対応した際の経験をもとに、以下のポイントについて詳しくお話しします:
・ ジオフェンス機能の仕様の違い
・ デバッグの際の工夫とTips
・ 開発時に苦労したこと
UndoManagerは、アプリにUndo・Redo機能を提供してくれる強力なクラスです。
特にnote アプリのようなエディタアプリにとって、Undo機能は必須の機能の一つといえます。
しかし、意外とUndoManagerを使いこなしているアプリは少ないのが現状です。
本トークでは、UndoManagerの基礎から、実際のアプリへの導入方法、そしてその際のはまりポイントまで、実体験に基づいて解説します。
[内容]
一緒にUndoManagerをマスターし、アプリのユーザー体験を次のレベルへ引き上げましょう!
WWDCに行くためには多くの壁が存在します。航空券、入国審査、言語、治安、飯が合わない、などなど。やらないとそもそもアメリカ入国もアウトになるものもあれば、ハックすればより自分の旅が快適になるものもあります。また、限られた予算内でどう頑張って渡航するかも重要になります。いろいろと山積みで頭を抱えますよね?
皆さん、大丈夫です。ここに経験者がいます。入国審査のときに審査官に嘲笑され、タイムズスクエアで屈強なアニキに囲まれCDを買わされ、「お前の英語よくわからん」とドライバーに無視され、かの遠い地で日本を懐かしみ枕を濡らした経験のあるのは、この男!安い航空券を取るという特技だけでなく、多くの失敗をアメリカで学んだ男が、今年のWWDCをたのしみつつ、どうハックしてアメリカツーリズムを乗り越えたか。めくるめく5分間で話していきます!
もちろん、来年からWWDCに行く人のためになったり、すでにWWDCに行った人にもプラスになる情報が盛り沢山!ぜひご覧ください
あ、WWDCに行けるかどうかのハックはありません、運です。
シングルトンはGoFのデザインパターンのひとつ。
インスタンスがひとつしか存在しないことを保証したもの。
しかし、とある日、確実に正しいコードのシングルトンなのに、その状態が共有されていないことに気づいたのです。
おかしい、そんなバカな、そう思いながら、恐る恐るシングルトンのインスタンスのメモリアドレスを確認しました。
違うんですよ、アドレスが…
このトークではコードは間違いなく正しいにも関わらず、シングルトンのインスタンスが複数作られてしまう怪奇現象について、iOSのビルド設定の観点から説明します。
あなたのシングルトンは本当にひとつですか...?