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

多言語対応アプリにおける継続的ローカリゼーションの実践

tion_low ションロー

世界中のユーザーへ向けてサービス展開する場合、システムのグローバリゼーション及びローカリゼーションが必要です。

ローカリゼーションではまず「特定言語への翻訳対応」が行われますが、その結果としてアプリの開発フロー内で継続的な「翻訳データの管理」と「テキストの翻訳作業」が必要になってしまいます。

日本語、英語の2言語までは「なんとなくスプレッドシートで管理してみる」が通用しなくもないのですが、対応言語数が増えるほど翻訳データ自体と翻訳タスクの管理コストが増え、結果として運用や品質に対して悪影響が出やすくなっていきます。

本トークでは、12言語に対応している「REALITY」アプリの事例をもとに翻訳フローをどのように構築したか、対応言語を増やした結果どのような問題が起きたか、その問題にどう対処しているか、現状の課題は何で今後どうしようと考えているか、などをお話します。

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

Go言語での実用例に見る!AsyncChannelとスレッド間通信チャネル概説

CreatorQsF たふみ

高度な並行アルゴリズムを提供するSwift Async AlgorithmsにAsyncChannelというものがあります。チャネルとはスレッド間でメモリを共有する手法の1つで、特にGo言語での採用により近年一般的になっています。
本発表ではGo言語での使用例を用いてチャネルの概説を、そしてAsyncChannelとの差異に思いを馳せチャネルについて簡単な認識を持つことが目的です。
スレッド間のメモリ共有は、共有メモリを使い危険領域を排他制御等で保護する手法が一般的ですが、チャネルを使うと同期が入出力としてより素直に表現できます。Go言語にはDo not communicate by sharing memory; instead, share memory by communicatingという格言がありますが、 他方、チャネルとバグの研究を取り上げ現実についても触れたいと考えています。

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

小さく始めるSwiftUI移行

rizumi_jp izumi

SwiftUIが発表されてから約3年が経過し、最近ではプロダクトでの採用例も見られるようになってきました。
しかしながら、SwiftUI登場以前から運営しているアプリを完全にSwiftUIへ移行するのは簡単なことではありません。
そこで、小さなComponentから徐々にSwiftUI化を行っていくというのは効果的な移行戦略の1つです。
小さな単位で移行を行うことによって、SwiftUIへ移行する上での課題を素早くキャッチし、改善サイクルを徐々に回しながら移行できるというメリットなどがあります。

本トークでは

  • 小さくSwiftUI移行を行う手法
  • 小さく移行をする場合のメリット / デメリット
  • 移行時の勘所やハマり所

について、実プロダクトで移行を続けている中で得られた知見や具体例と共に解説します。

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

iOS アプリ開発プロジェクトで最初に整えておきたいこと

satococoa 海老沢聡

2021年12月、弊社 ROUTE06 においてとある新規アプリの開発プロジェクトがスタートしました。
今振り返ってみて、初めに整えておいて良かったなと思うことをお話しします。

以下のような内容を予定しています。

  • 環境 (ローカル、ステージング、本番) 別のビルド設定を .env を使って行う
    • API の向き先や Firebase の設定ファイルなどをどのようにビルドプロセスに組み込んだのか
  • codemagic で CI/CD を整える
    • どのようなパイプラインを組んだのか、ブランチ戦略とともにお伝えします
  • 開発版のアプリを TestFlight を使って配布する
    • Ad hoc は使わずに TestFlight のみを用いた開発版のアプリ配布を行いました
1
レギュラートーク(20分)

Firebase InApp-Messagingをカスタムする

simorgh3196 simorgh3196

Firebase InApp-Messagigng(以下FIAM)は、Firebaseを導入していれば特別な実装をすることなくAnalyticsのイベントを利用して細かく表示タイミングの制御したり、配信先ユーザーのターゲットを細かく絞って配信することが出来とても便利です。

ただデフォルトの機能のままだとFIAMで表示される画面のデザインがアプリとは合わない、利用できるデザインに制限があるなどしっかり運用しようと思うと物足りない部分があります。

弊社アプリでは、コンテンツをよりよく見せるために動画を再生できるようにしたり、WebP画像を使って通信量を削減するといったカスタマイズを行いました。

本トークでは実際の実装経験をもとにどのようなカスタマイズが出来るのか、どのように作るのか、その他Tipsを紹介します。
また実際にFIAMを利用してどのような効果があったかをお話しします。

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

どこでも AirPods を実現する方法

niw Yoshimasa Niwa
niw

AirPods、便利ですよね。どこでもいつでもずっと使ってしまいます。
でも一つ困ったことが。
そう、飛行機のエンターテイメントとかゲーム機など Bluetooth に対応していない機器で使えないのです。

そんな時に思いついたのが、AirPods を使う時にいつも持ってる iPhone を経由して Bluetooth に対応していない機器でも AirPods を使えるようにできるのではという事。
このセッションでは、AirPods をどこでもいつでも使いたいそんな思いを実現するために iOS アプリとハードウェアの開発を通して学んだ iOS のオーディオの仕組みについて紹介します。

対象とする方:

  • AVAudioSession について知りたい方
  • 飛行機の映画でも AirPods を使いたい方
  • ハードとソフトの融合を見たい方

前提とする知識:

  • 簡単な電子工作の知識
7
レギュラートーク(20分)

ラクに速く正確にUIが作れちゃう!SwiftUIを用いたデザインシステムによるアプリの開発事例

y0shikei_ yoshikei

宣言的UIフレームワークのSwiftUIの登場により、以前に比べUIコンポーネントが作りやすくなりました。
そこで弊社ではSwiftUIの特徴を活かし、社内のデザインシステムをパッケージとして開発・運用することで、楽に速く正確にUIを実装することを可能にしました。
また、パッケージ内のコンポーネントを一覧で確認できるカタログアプリも開発し、実装コストだけでなく、仕様検討時のコミュニケーションコストやデザインの手戻りも削減することができました。
本セッションでは、デザインシステム構築までの開発プロセスと実際に運用してみて得られた知見についてご紹介します!
デザインシステムを構築し、みんなで楽に速く正確にUIが作れる世界線へ!

【コンテンツ】
デザインシステム

  • 実装方法と運用事例
  • 構築して得られた恩恵

カタログアプリ

  • 概要と得られた恩恵
4
レギュラートーク(20分)

「OpenAPIとCI/CDのシナジーでAPI差分 "0" へ」

サービスを拡大していく上でバックエンドやBFF (Backend For Frontend)とのAPIの数は徐々に増えていくものです。
APIが増えれば管理するレスポンススキーマも増えてしまい、バックエンドとAPIのスキーマがいつの間にかズレているという経験は多いのではないでしょうか?
変更が入るたびに、影響範囲のチェックも必要になるため面倒くさいったらありゃしない。

そんなみなさんのために、「PayPayフリマ」の開発現場で試しているOpenAPIを用いた解決策をご紹介します!

既に完成されているサービスの中でどのようにOpenAPIを導入しAPI差分を "0" に近づけているのか、
CI/CDで運用していく上での工夫点や、APIの変更に対処しやすい仕組みなど、実用的なテクニックをお話します。

みなさんも一緒に安心安全なAPI運用を目指しませんか?

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

ちょっと待って!そのモーダル遷移、フルスクリーンで大丈夫?

hatakenokakashi 佐藤 剛士

普段のiOS開発で登場するモーダル遷移、何気なく実装していませんか?
UIKitではiOS 13からモーダル遷移はシート型がデフォルトになりましたがデフォルトから外れてフルスクリーンでモーダル遷移をすると、どんな落とし穴が待ち受けているのでしょうか?

この発表では自社アプリのQAで見つかったフルスクリーンモーダルの不具合とその修正を通して、UXとコードレベルでフルスクリーンでのモーダル遷移の落とし穴や、それがなぜ発生しやすくなるのかを解説します。
Human Interface Guidelinesを参照しつつ、Appleが想定するiOSのモーダル遷移と、不具合が少ない妥当な実装は何かを考察します。

この発表はこんな方が対象です

・デフォルトのシート型でしかモーダル遷移実装していなかった方
・デザイナーからフルスクリーンでの遷移を提案されたけどシート型との違いを説明できなかった方

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

カウシェiOSアプリのモジュール開発事例

akifumifukaya akifumi

カウシェiOSアプリは、複数のモジュールによって構成され、開発されています。
いくつかのモジュールに着目し、モジュール内にどのようなリソースを配置し開発を進めているか、良かった点などを共有したいと思います。

▼事例
①デザインコンポーネントを集約したKaucheDesignKit
カラーや共通で使用するUIコンポーネントを集約しています。
SwiftUIとPreviewsを活用することで、UIコンポーネントの実装・確認がしやすくなりました。

②モックデータを定義用のKaucheMockKit
モックデータを一つのフレームワームに定義することで、ユニットテストやPreviewsで同じモックデータを使い回すことができるようになりました。またProductionアプリから依存として外すことで予期せぬデータ混入を防ぎ、安全性を高めることもできます。

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

ARKitとMetalでインタラクティブなARオブジェクトの表現を考えました!。

bluewhitered123 武田孝騎

仮想苔というARアプリケーションを個人制作しています。
このアプリの主な機能として 検知された平面にARオブジェクトを配置し、画面からにARオブジェクト触れると対応してアニメーション(掻き別れるような)を再生する機能 があります。

このARオブジェクトは草原が代表するような掻き別れるような表現を実装した苔です。本物の苔に触ったような感覚は得られないですが、あまり見かけないARオブジェクトが返す表現に仕上がりました。

内容は下記です。
・このアプリ制作を通して学んだ ARkitとMetalの実装。
・このアプリの インタラクティブなARオブジェクトについて。

ARKitでMetalを使ってみた一例としてご紹介できたらと思います!。

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

Xcodeにはファイルツリーをソートする機能がないので、gem でできるやつを作ってみました。

shichimi_0_o keisukeYamagishi

Xcode は非常に便利ですが、ファイルツリーに関してはファイルをソートする機能がないので、開発途中でファイルが増えてきて品雑になったときに困ります。
一つ一つD&Dで並び替えるのもありですが、時間がかかりますし、ミスもするかもしれませんし、最悪参照パスを間違えて、ビルドが通らないなんて事子もあるかもしれません。
それを解決できる、gemを作成しまししたので、そちらを紹介してみようと考えてみました。

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

3年間 Core NFC を使ってみて - iOS 固有の NFC 利用まわりの知見

treastrain treastrain / Tanaka Ryoga

NFC とは駅・空港での自動改札機やお店での電子マネー決済、社員証や学生証をかざした入退出管理など、日常でよく見かけるアレを叶える技術です。

iPhone に搭載されている NFC を私たちの App で使うためには Core NFC を用います。これは iOS 11 から利用可能になり、iOS 13 のタイミングで大きくアップデートされました。昨今の情勢から非接触技術が注目されたり、eKYC に利用できたりと、現在進行形でさまざまな App で利用が広がっています。

私は iOS 13 のときから3年間、この Core NFC を使った App の個人開発を続け、関連する OSS も公開してきました。それによって得た iOS 固有の NFC 利用まわりの知見を紹介します。

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

夢が広がる!コード生成でどこでもSwift

iceman5499 Iceman

Swiftはいいぞ!
Swiftが好きになると、どこでもSwiftが書きたくなります。
APIサーバは当然Swiftで書きたいですし、クライアントから呼ぶときはasync関数としてそのまま呼び出したいです。
Webアプリも書きたいです。DOMを触るのはReact等には勝てないですが、せめてロジックはSwiftで記述したいので、Swiftの関数をTypeScriptから呼び出せるようにします。
TypeScriptからSwiftが使えるようになれば、そこからさらに利用箇所は広がります。

このトークでは、コード生成技術を通してSwiftをどこでも使えるようにするテクニックを紹介します。

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

改めて振り返ろう!UIBezierPath 入門

AkkeyLab AkkeyLab

独自のデザインを実装するとき、皆さんはどのような手法を取ることが多いですか?
例えば、画面下部から半円が顔を出しているデザインを実装することを考えてみましょう。
UIView を準備し、CALayer の cornerRadius に (width or height) / 2 を設定して frame を調整する方法がシンプルかもしれません。

しかし、画面外で一生顔を見せることの無い部分も含めた演算処理が走ってしまい、効率的とは言えません。
そこで、UIBezierPath を使えば画面内の必要な部分のみ演算・描画することが可能になります!

・ブックマークアイコン
・スターアイコン
・ハートアイコン

このトークでは、上記オブジェクトを描画する手順を紹介するとともに、UIBezierPath の利用方法をご紹介します!これを学べば、あなたも Swift 使いのイラストレータです!

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

XVimとSwiftとAssembly

r_plus taiki komaba

Xcode 13最大の新機能と言えばVimキーバインドの登場ですね!
多くの開発者が利用しているVim/NeovimのキーバインドがとうとうXcode標準で使えるようになりました。

Xcode 12まで、多くのVim好きの開発者はVimキーバインドを利用するために、
Pluginの形式で提供していたXVimというソフトウェアを利用していました。

このトークではそんなXVimないしXcode Plugin業界に襲いかかってきた
Swift, AppleSiliconの様々な技術的ハードルについてメンテナーが振り返って供養します。
(20分版ではmacOS, Xcode部分について省略します)

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

サーバーサイドSwiftで学ぶバックエンド開発

laiso laiso

SwiftはiOSやmacOSの他にも、LinuxやWindowsなどのプラットフォームで動作するクロスプラットフォームなプログラミング言語です。
Webアプリケーションやネイティブアプリのバックエンドで動作するプログラムを開発することは「サーバーサイドSwift」と呼ばれ、活発なオープンソースのプロジェストが多数あります。
しかしサーバーサイドSwiftはブラックボックスのまま利用するにはまだまだ環境が成熟していないため、これから始めるにはフレームワークのさらに奥の仕組みを理解しながら使う必要があります。
本トークではサーバーサイドSwiftフレームワークの実装から、バックエンドを開発するための技術詳細についてお話しします。
よく慣れたSwiftという言語をそのままつかい、ネイティブアプリ以外のシステム上でどのようなコードが書けるのか、という知識を得ることができるでしょう。

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

全部Swiftで作るWebアプリケーション

laiso laiso

SwiftはiOSやmacOSの他にも、LinuxやWindowsなどのプラットフォームで動作するプログラムを開発することができるクロスプラットフォームなプログラミング言語です。

Swiftを利用するとWebアプリケーションのバックエンドやWebブラウザのクライアントサイドで動作するコードを開発することができるようになります。

しかしこれらの分野はまだまだ環境が成熟していないため、iOSエンジニアがこれから始めるのには敷居が高いのが現状です。

本トークではサーバーサイドSwiftやSwiftWasmを使って、Swiftを中心としたWebアプリケーションの可能性を探ります。

よく慣れたSwiftという言語をそのままつかい、ネイティブアプリ以外のシステム上でどのようなコードが書けるのか、という知識を得ることができるでしょう。

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

機能開発しながらアプリを改善し続けるために

re___you えんどう

ZOZOTOWN iOSチームには、緊急性は低い(あるいは明確な納期がない)が重要度が高い「効果性の領域」と呼ばれる放っておくといつまでも解決されない課題を探し改善する取り組みがあります。もちろん、改善の取り組みをするからといって機能開発を止めることはありませんし、改善専門部隊がいるわけでもありません。
機能開発をしながら、限られたリソースで改善活動をし続けるために役立つポイントをご紹介したいと思います。

  • まずは改善活動への命名をしよう
  • 効率よく改善するために課題を見極める
  • 課題を発見するための仕組み
    その結果、取り組みは2年間ほど継続しており、数値を2倍改善した実績もあります。  
    改善したいけどどう始めていいか悩んでいる方必見です!
2
レギュラートーク(20分)

SwiftUIをアイコン画像のテンプレートとして使った話

auramagi Apurin Mikhail

Xcodeの複数バージョンを使い分けようとしたらDockに同じアイコンが並んでどれがどうだかもうわからない!

_人人人人人人_
> もう嫌だ! <
 ̄Y^Y^Y^Y^Y ̄

アプリのアイコンを自由に変更できるmacOSの素晴らしい仕組みを使って、俺得なCLIツールをSwiftで開発しました。
しかもアイコンのテンプレートはみんな大好きSwiftUIで作れるようにしました。

  • auramagi/NewIconの紹介
  • ArgumentParserでCLIツールを作る
  • mintで配布する
  • Swiftを動的ライブラリとしてビルドしてdlsymでランタイム時にロードする

参考) https://github.com/auramagi/NewIcon

7