プレビュー


担当したこと
iOSアプリとキーボード拡張の機能開発、性能改善、リリースを担当しました。
- Webでの文字入力時に発生するちらつきを調査し、軽減機能をリリースしました。
- 画像とGIFのメモリ使用量を削減し、写真を使うカスタムテーマを2週間でリリースしました。
- Combine、Swift Concurrency、OneWay、Pure DIを導入し、配布パイプラインを整備しました。
詳しい開発記録
期間
2022.01.03 - 2022.07.15
2023.07.03 - 2023.10.03
2023.12.27 - 2024.09.30
担当業務
2023.12 - 2024.09
- iOSのポイ活機能をリリース
- キーボードで入力してポイントを獲得できるポイ活機能をリリース。
- ポイ活アプリからスーパーアプリへの移行に備え、機能を増やしやすくするためにPureDI、Combine、OneWayの導入を主導。
- Web入力時のちらつきを軽減
- すべてのiOSキーボードエクステンションに共通し、解決不可能と言われていたWeb入力時のちらつきを分析。試行を重ねて解決策を見つけ、適用・デプロイ。(世界初)
比較(左:改善前、右:改善後)
- Combine導入
- レガシーコードを削除してViewをリアクティブにし、将来のSwiftUI移行に対応しやすい構造へ変更。
- キーボードエクステンションにPin&Flex Layoutを導入
- キーボードエクステンションにPin&Flex Layoutを導入して性能を改善し、安定性を60%台から98-99%に向上。
- この過程でFlexLayoutのオープンソース開発に貢献。
- Medium記事(KR)
プレビュー

- マルチスレッド管理
- iOSキーボードエクステンションの限られたリソースを効率よく使い、性能を改善するため、Modern ConcurrencyとGCDでスレッドセーフなコードを実装。
- Swift Concurrency & OneWay導入
- AlamofireとSwift Concurrencyを導入し、ネットワーク処理を抽象化して柔軟に扱えるようにした。
- MVIアーキテクチャのOneWayを導入してConcurrencyの処理を整理し、ViewとViewModelの役割を分離。PureDIと組み合わせ、テスト可能な環境づくりに貢献。
- PureDI導入 & Storyboardコード削除
- TDDの導入に備え、テスト環境を柔軟に組めるようprotocolを使ったPureDIサービスコンテナを設計し、その実装に伴ってStoryboardコードを削除。
- キーボードの入力補完機能
- UITextCheckerを使ったキーボードの入力補完機能の作成・デプロイに貢献。
- BaseViewController導入
- ビュークラスを統一するためBaseViewControllerを導入し、コード全体のスタイルをレビュー。
- AirBridge導入 & Deeplinkロジック整理
- 問題のあったFirebase dynamic linkをAirbridgeに置き換え、リンクスキームを使ってdeeplink & deferred deeplinkの処理を整理。
- キーボードASCIIアート機能
- キーボードからASCIIアートを送信する機能の作成・デプロイに貢献。
- CI/CDパイプラインの保守
- 導入済みのCI/CDパイプラインを保守し、環境を更新・最適化。
- ビルドキャッシュによりビルド速度を20%改善。
- 導入済みのCI/CDパイプラインを保守し、環境を更新・最適化。
- Realmへの依存を削除
- キーボードから重いRealmライブラリへの依存を削除し、アプリサイズを縮小して性能を改善。
- ライブラリをSPMへ移行
- 将来のTuist導入に備えてライブラリをSPMに移行。
- その他のバグ修正とメンテナンス
2023.07 - 2023.10
- マイテーマ機能をリリース
- 2週間でマイテーマ機能を実装・リリース。ユーザーが自分の写真を使ってカスタムキーボードを作成できるようにした。
- キーボードの50MBメモリ制限に収まるよう、画像をダウンスケーリング。
- サムネイルの作成に画像合成を使用。
- Gifの最適化手法を調査・適用。
- タッチエリア修正
- hitAreaを可視化してタッチ領域のずれを確認し、Viewの間隔を調整。意図した範囲でタッチに反応するよう修正。
- CI/CDパイプライン構築
- エラーで動いていなかったFastlaneとCircle CIの自動デプロイパイプラインを再構築。
- RxSwiftコード削除とCombineへの移行
- 業界の動向を踏まえ、RxSwiftを使った処理の一部をSwift ConcurrencyとCombineへ移行。
- 2022.01 - 2022.07
- Firebase経由のiOSアプリ管理
- Firebase Crashlyticsで充電ステーション画面を開いた際のクラッシュを検出。影響を受けたユーザーの規模を把握し、優先して迅速に修正。 layoutSubviews()で誤って呼ばれていたAPIを、適切なライフサイクルで更新するよう変更。
- Firebaseで様々なユーザーイベントを収集し、追加機能のデータ検証に活用。
- Remote Configを使い、アプリの審査を経ずにアンケートフォームのリンクを変更。バージョン管理による強制アップデートにも対応。
- ギフト/リクエスト機能
- キーボード商品の購入コンバージョン率を上げるため、デザインガイドラインに従って新機能を開発。
- リリース2週間後、売上の34%がギフト/リクエスト機能経由となった。
- Firebase Dynamic Linksを使用して実装。
- RxSwift移行
- レガシーコードの一部を、Rxを使ったリアクティブな処理へ移行。
- 1ページで同時に扱っていた多数の非同期イベントを、RxSwiftで整理。
- キーボード最適化
- ライブテーマのキーワード応答機能では、配列検索の代わりにハッシュを使い、インデックス処理と応答を高速化。
- UI描画の一部をAutoLayoutからPinLayout & FlexLayoutへ移行。メインスレッドだけで行っていた処理でマルチスレッドを使えるようにし、キーボードの読み込みを高速化。
- テーマ無料トライアル機能
- 従来は人気テーマを使うために購入が必要だった。支払いのハードルがアクティブユーザーの減少につながっていると考え、Google Admobを導入し、広告を通じてテーマを無料で試せるようにした。
- ランキングシステム追加
- 無料トライアルと購入コンバージョン率を上げるためにアプリにランキングシステムを追加。
- ランキングページを訪問しなかったユーザーと比べ、訪問したユーザーの無料トライアルは約5.5倍、購入は約2倍となった。
- NUX改善アップデート
- ユーザー離脱率を下げるためにアプリのNUXフローを改善。
- 全体の離脱率は下がらなかったが、テーマの購入コンバージョン率は3%から10-15%に上昇。キーボード有効化後のメイン画面へのコンバージョン率も約8%上昇。
- 一部のレガシーStoryboardコードを削除し、競合を防ぐためコードベースのUIへ移行。
- キーボード絵文字機能
- キーワードに応答するライブテーマ商品の価値を高めるため、ダウンロードしたライブテーマの絵文字を使用できる機能を追加。
- 従来は、適用中のライブテーマのステッカーしか使えなかった。他のテーマを使っている間も、所有する全テーマのステッカーを選んで使えるように変更。
- すべてのステッカー(写真)をキーボードに直接表示すると、iOSキーボードの30MBメモリ制限によりキーボードが終了してしまう。 コレクションビューをスクロールするたびにメモリ使用量が危険な水準まで増えていたため、画像の軽量化処理やgifフレームの読み込み管理を工夫。メモリの問題で不可能と思われていたステッカー機能を追加。
- iOSアプリ全体の保守
- 引き継ぎで既存のプロジェクト構造を把握し、機能追加と保守を担当。
- 内部テストでQAを実施し、デプロイを担当。