AndroidエンジニアがiOS開発に挑戦する際、一つの大きな障害となるのがIDE(統合開発環境)の違いです。慣れ親しんだIDEからの移行は開発者にとって1つの挑戦となります。
本セッションでは、AndroidエンジニアからiOS開発に転向した私がキャッチアップしていくなかで学んだことを、IDEに絞って解説します。
Androidエンジニアに限らずiOSアプリ開発を新たに始めたい方に向けて、iOSアプリ開発のはじめの一歩を力強く、後押しします。
WWDC23への現地参加が決まり、喜びとともに英会話への不安が押し寄せます。英会話のレッスンを受けても上手く話せず、結果的に英会話への心理的ハードルが高まってしまいます。まずは話す前に英語に慣れる必要があると感じました。
そこで、チャットや交換日記を通じて、英語のレビューが得られるChatGPT APIを用いたアプリを開発しました。ChatGPTに役割を指示できるため、会話の種類を増やすことが可能です。また、アプリの読み上げ機能を活用することで、リスニングやスピーキングの特訓も可能です。これにより、心理的ハードルを下げ、最終的に現地で少しずつ自分から話すことができました。
本LTでは、アプリの内容やその影響、現地での対話の成果などを紹介します。
アウトプットはどんなエンジニアにとっても重要で、学びや成長の機会を生み出すものです。
私は今年2月にCode Polarisというコミュニティで技術同人誌の執筆を呼びかけ、合同誌を制作しました。12人で書き上げた技術書の頒布数は185部にも達する大成功となりました。
はじめて出会うメンバーが大半の中で大人数プロジェクトを成功へと導いた裏側を紹介します。
本トークにより「もっとアウトプットをしたい」「技術コミュニティに参加してみたい」と思っていただけたら嬉しいです。
トピック
・執筆者を募る説明会の実施
・自信をつける投票制度
・GitHub Projectsを用いたプロジェクト管理
・GitHub Codespacesによる執筆環境の統一
・テイストを揃える最初の1章
・モチベーションを保つ細かな締切設定
・大量のレビューに対応するルールの構築
・やり抜くメンタルの持ち方
・得られたもの
Xcode Previewの登場により、SwiftUIで作成したUIパーツをXcode上でプレビューすることが簡単になりました。UIパーツに渡すデータパターンを複数用意すればUIパーツの実装に問題がないか視覚的にかつ網羅的にチェックしやすくなりました。
Xcode Previewの力はそれだけに留まりません。UIパーツを画像ファイルとして出力することでプログラムの入力情報として扱うことができます。これによってUIパーツのデザインが変更されたことを目で確認することもできますし、CIを使ってデザイン変更に関する不具合を検知するための自動化に繋げられます。
本セッションではSwiftUIベースのサンプルアプリを使ってCIによるデザイン変更の検知がどのように実現されるかをお見せします。
ZOZOでは、GitHub Copilotを全社へ導入しました。iOSやAndroidからSREまで様々な領域のエンジニアがGitHub Copilotを使用して開発しています。本セッションでは、GitHub CopilotのZOZOでの活用事例を時間の限り紹介します!
例えばiOSアプリ開発では、UIKitなどのフレームワークの使用方法の提示、新規画面作成時に必要なコードの提案、API設計書からSwiftのコードへの書き起こし、既存のコードのリファクタリングなどのタスクでCopilotがどのように効果を発揮しているかを紹介していきます。
加えて、GitHub Copilotを活用していくためのtipsを紹介することで、開発作業をより効果的で効率的なものにする一助となればと思います。
昨年の「正規表現って結局何なのさ?〜エンジニアのためのコンピューターサイエンス入門〜」では主に理論の面から正規表現が何なのか話をさせて頂きました。
対して今年は実際に正規表現エンジンの実装に関する話をします。
正規表現エンジンの実装ではオートマトン型と仮想マシン型が主流です。
前者は正規表現から決定性有限オートマトンを、後者は、正規表現をバイトコードにコンパイルし仮想マシンを作成する方法です。
いずれの方法でも正規表現からオートマトンや仮想マシンを生成しなければならず、その実装はそれなりに大変です。
しかし正規表現が文字列にマッチするかどうかの判定であれば正規表現を"微分"するという方法があるのです。
本セッションではその原理と簡易的な実装を紹介します。
またオートマトン型、VM型との比較も可能な限りお伝えします。
SwiftUIでは宣言的UIの特性から、複雑な画面ほどネストが深くなりがちです。
このような場合、コンポーネントをfunction等に分割してもネストの深さからは逃れにくいため、可読性が低下してしまいます。
そこで筆者がExtension Programmingと呼んでいるSwift独特のプログラミング手法をご紹介します。
computed propertiesやfunctions、inner classなどをextensionに分割することで、ネストを浅くできたり役割やアクセシビリティによってグルーピングすることができたりします。
Swift 2.xくらいの頃から存在した手法ではありますが、SwiftUIで開発する機会が増えてきた今その有用性を改めてお伝えできればと思っています。
Swift UIの登場によって、私たちはデータの画面反映に関するロジックの管理から解放されました。
これに加え、複数のAPI結果を画面ごとのStateに変換するまでの処理を、サーバーサイドにまるっと移譲することで、
アプリは最適なUXの提供に専念できるだけでなく、ストア審査やリリースから独立した変更が可能になります。
本トークでは、AirbnbやLyftなどの海外企業で導入されているServer-Driven UI アーキテクチャを、
タップルでSwift UIとBackends for Frontends(BFF)を活用して実現した事例や具体的な運用についてお話しし、
ネイティブアプリの複雑性や開発生産性の向上の悩み解決にむけた新しい手段を紹介します。
SwiftUIが登場して以来、システムアーキテクチャの選択肢として注目される「The Composable Archtecture」(TCA)は、Reduxに近い構成となっている点が特徴の1つになります。
初めてTCAのサンプルコード等に触れた際に、過去にUIKitベースのプロジェクトで状態管理フレームワークにReduxを導入した時やSwiftUI&Reduxを利用した簡易的なサンプル開発時に得た知識や体験が、処理概要を掴んでキャッチアップする際の大きな助けになりました。そして同時に「この様な部分にも配慮が施されているのか!」や「見比べてみるとこの様な特徴があった!」という気付きや学びを得ることもできました。
本セッションでは、ReduxとTCAにおける類似点や相違点に加えて、理解を進めるための前段で知っておきたい勘所等をコードやイメージ図解を交えてご紹介できればと考えております。
タクシーアプリ『GO』では、ライブラリを CocoaPods + プレビルドで管理し、プロジェクトはマルチモジュールを XcodeGen で管理してきました。
SwiftPM が Xcode と統合され、機能追加により様々な場面で利用できるようになりました。
いざライブラリの管理方法やプロジェクト構成を変更しようと試みたものの、普段の開発と並行しながらの移行は非常に困難です。
どうやって時間を確保し、どんな事前準備をしたのか。移行作業で何を行い、どんな課題に遭遇したのかをご紹介したいと思います。
iOSアプリ開発のCI / CD 運用における共通の課題として速度があると思います。
しかし、ひとえに速度といってもビルド時間から、環境構築の速度、不具合に早く気づく工夫など
取り組むべきテーマはそれぞれです。
本トークではそんな様々な「速さ」を追い求めてタップル iOSチームが取り組んできたTipsについてお話しし、
皆さんが明日から改善に取り組めるようになることを目指します。
iOSは毎年メジャーアップデートを行っていますが、後方互換の対応が乏しいため、多くのバージョンをサポートすると、非常に多くの開発コストがかかります。
古いバージョンを使い続ける方のために多くをサポートしたいところですが、iOSのユーザーはアップデートするのが早い傾向にあるため、
少ないユーザーのために多くのユーザーの利益を損なうこともあり、アプリ開発者はサポートバージョンについてはどこまで対応するか考えなくてはなりません。
そこで、今回はLINEアプリでのサポートバージョンに関する考え方をお話しします。
皆様のサポートバージョンに関する参考になれば幸いです。
WWDC21で発表されたApple公式CIサービスXcodeCloudがついに今年から正式サービスを開始しました。
すでに使っている人もいれば、高い関心を寄せていてもまだ使っていない人もいるのではないでしょうか?
既存のプロジェクトにXcodeCloudを入れることははすごく簡単です。
ただしバージョンの管理・様々なビルドツールの利用・Crashlyticsを運用しているプロジェクトでは、考慮しないといけない事項が多いです。
ベータ版の頃から社内のアプリと個人アプリで1年ほど運用し、その過程で学んだことやおすすめの設定、TIPSを紹介します。
今回のトークでは
上記のテーマについてお伝えできればと思っています。
本トークでは、没入型体験の次の革命的なステップであるAppleのvisionOSについて話します。
まず、スマートフォンの世界的な普及に伴うVR技術の進化を比較しながら、visionOSがiOSデベロッパーに提供する様々な可能性に触れ、必要なアプリケーションのエコシステム育成に注目し、他の有名なVR製品の開発状況も徹底的に分析、一般ユーザーへの普及と応用可能性について調査した結果を発表します。
さらに、1年後の実機端末の販売より先行して7月にリリースされるvisionOSのSDKを1か月間試し、簡単なiOSアプリケーションの事例を通して、自分が感じたvisionOSに取り組む際のベストプラクティスや、それにおけるSwiftUIでの基本的な作成方法、加えてMR・3D空間コンテンツ制作を含む開発体験を話します。
配信アプリは ReplayKit を介して、画面上の映像を動画のフレームとして受け取ります。動画のフレームには画面に映っているものがすべて含まれているので、プッシュ通知などの内容も見えてしまいます。
映像を調べてプッシュ通知を検出し、該当領域を加工してから配信サーバーに送れば、ユーザーのプライバシー保護に繋げることができます。しかし、リアルタイムの検出と加工をする必要があり、リソースや処理時間の厳しい制約があります。
このトークでは、通知ぼかし機能の説明、数々のハードルを乗り越えて検出と加工処理の合計を約 "2ミリ秒" に収めるまでの工夫について、詳しく解説します。
・ライブ配信と通知ぼかし機能
・動画のフレームの形式 YCbCr420
・Accelerate で処理を高速化する
・メモリの確保の頻度や量を削減する
・プッシュ通知を検出する
・プッシュ通知を発行元が自社アプリか判定する
ついにAppleの空間コンピュータ「Apple Vision Pro」が発表されました。
お値段は日本円で約50万円と言われ、一般的には高い印象を持つと思います。
しかし、この価格が数多くあるVRヘッドマウントディスプレイやARグラスといったXRデバイスと比較したとき、高いのか、安いのか、知らない方も多くいるのではないでしょうか。
実は3桁万円、4桁万円のXRデバイスも存在します。ピンからキリまで、市販されていた・市販されている、そして今後登場するXRデバイスの価格帯を、それぞれのデバイスの特徴や性能とあわせて比較調査しました。
5分後、50万円という価格に対する考え方が変わっているかもしれません。
コインチェックでは昨年9月にリリースされたiOS 16で追加された機能である Lock Screen Widget を実装した新アプリをiOS 16のリリースの2日後にリリースしました。
新OSのリリースに合わせて新機能を作るというのは初体験で、リリースまでのスケジュール感、エンジニア以外触りにくい新しい機能をデザイナーやアナリストなどにどのように理解してもらうかなど悩みも多く、周りの協力を得ながら手探りで進めていました。
このトークでは新しいOSの機能を早めにアプリどんなことをやって、どんなふうに進めたのかということを以下のような観点からお話をさせていただきます
iOS16時点ではSwiftUI.AsyncImage
は非同期で画像を取得した後、SwiftUI.Image
を返却するためCGImageのような画像を加工できる形で返されません。
本LTではそのAsyncImageの欠点である「ダウンサンプリングができない」という問題に焦点を当て、それが引き起こす問題と改善案について紹介します。
ダウンサンプリングは大まかには画像の解像度を下げる手法と考えられます。ネットワーク越しに大きなサイズの画像を取得しても、表示する際には小さなImageに表示する場合に有効です。ダウンサンプリングをしない場合、場合によっては消費メモリが桁違いになってくるため大きな問題として捉えられます。
ダウンサンプリングを実装するにはiOS16時点では自前で実装することになり、LTの後半ではAsyncDownSamplingImageというライブラリの紹介をします。
アプリ開発で日付を表示する場面は多くあります。DateFormatterはDate型のデータを任意のフォーマットでString型に変換することができます。
しかし、DateFormatterはインスタンス生成コストが高く、アプリのパフォーマンスを低下させてしまうことがあります。
この問題を防ぐには、DateFormatterをキャッシュして不要な生成コストを抑えるのが効果的です。
本記事では、DateFormatterのキャッシュによるパフォーマンス改善案についてコードを元に解説します。その上で、パフォーマンスを比較し、キャッシュによる違いを整理します。併せて、iOS15から追加されたformattedを使った場合、前述の実装とどう異なるかを比較します。そして、パフォーマンスに悪影響を与えることなくアプリ内で日付を表示するには、どのような実装が最適であるかを提案します。
iOS16からiPhoneのロック画面をカスタマイズする方法に様々な機能が追加されました。
その中の一つにロック画面ウィジェットがあります。
その名の通りロック画面にウィジェットを置けるのですが、これにより天気やバッテリー残量、カレンダーの予定などの情報をロック画面から素早く確認でき、ウィジェットからアプリを起動することもできるようになりました。
本LTではロック画面ウィジェットについて説明し、既存アプリにロック画面ウィジェットを追加する方法について紹介します。
ロック画面から特定の画面を起動するウィジェットを例に
・実装時に悩んだこと / 落とし穴
・UI / UXで考慮すべきこと
・気づき / 分らなかったこと
・実際に導入する上での障壁
などを交え、サク〜っとお話しします。