3年ぶりにアプリをアップデートしたことの振り返り

本記事は、『エンジニアと人生 Advent Calendar 2025』10日目の記事です。
本記事では、僕が約3年ぶりにアプリをアップデートしたことについて振り返っています。
前半では、個人開発を始めたきっかけや現在リリースしているアプリの紹介を、後半では今回アップデートしたアプリの開発内容や振り返りをまとめています。技術的な話題にはあまり触れていないので、読み物として気軽に読んでいただけると幸いです。
個人開発を始めたきっかけについて
個人開発を始めたきっかけは、特に深い理由があったわけではなく、ただ単に暇だったからでした。新卒で入社した会社はいわゆる超ホワイト企業で、自分の時間をしっかり確保できる環境でした。特に新卒1年目のころは毎日定時で退社し、18:30くらいには家に帰れていたため、当時の僕は得意なこともやりたいことも特になく、ひたすら時間を持て余していました。
とはいえ、そんな状況にもどこか漠然とした不安を抱えていたのか、その頃はやたらと書店に通っては自己啓発本を立ち読みしていたことを覚えています。そんな時、たまたま目に入ったのが iPhone アプリ開発系の書籍でした。パラパラと読んでみると、iPhone のカメラを動かしたり、画像にエフェクト処理を施したりしていて、純粋に「面白そうだなぁ」と感じました。本を読み進めるうちに、自分でもアプリを作ってみたいという気持ちが強くなり、勢いで関連書籍を3冊購入しました。
その3冊のうちの1冊が、以下の書籍です。サンプルコードをコピペして繋ぎ合わせるだけでアプリが作れる構成になっていて、「アプリを作るのって楽しい」と思えた最初のきっかけとなった本でした。
今では、その初めて購入した書籍の著者である堤さんが運営するコミュニティに入っていて、当時を思い返すとなんだか不思議な気持ちになります。
App Storeでリリースしているアプリについて
現在は、3つのカメラアプリを App Store にリリースしています。マニュアル操作ができるもの、トイカメラ風のアプリ、フィルムカメラのような加工ができるアプリなど、それぞれに特徴を持ったカメラアプリです。初めて App Store にリリースしたアプリは今でも公開を続けており、サポートを始めて今年で10年になりました。このアプリだけで約46万人の方にダウンロードしていただいています。

今回は、その10年間サポートし続けているアプリをアップデートした際の話を書いていこうと思います。
アップデートしたアプリについて
今回アップデートしたのはこちらのアプリです。
前回のアップデートは約3年前、ちょうどコロナ禍の頃でした。ステイホームが推奨されていた時期で、本業以外に特にやることもなく、暇つぶし感覚でゼロから作り直したことを覚えています。しかし、今の自分が当時のコードを改めて見直すと、かなり見通しが悪い構成になっていました。「これをリファクタリングするくらいなら、いっそ全部作り直した方が早いのでは?」と思い、今回のタイミングで再びゼロから作り直すことを決めました。
開発期間について
開発を開始したのは 2025/7/1、App Store Review へサブミットしたのは 2025/11/30 だったので、開発期間は約5ヶ月になります。最初の3ヶ月でアプリとして形になるところまで仕上げ、残りの2ヶ月はひたすらブラッシュアップと動作確認に費やしました。
開発したアプリの各画面と機能について
ここからは、開発したアプリの各画面と機能について順に紹介していきます。
カメラ画面
カメラ画面は写真やビデオを撮影するためのメイン画面です。いつも最も頭を悩ませるのが、この画面のレイアウト設計です。カメラ画面は性質上、カメラプレビュー領域が画面の半分以上を占めるため、9:16(FHDや4K)といった縦長のプレビューを画面いっぱいに表示すると、残る領域はごくわずかになります。その限られたスペースをどう活用するか、プレビューに重ねて表示するUIコンポーネントをどこに置くか、またそれらの透過度をどの程度にするかといった点を丁寧に考えながら実装する必要があります。

写真撮影モードの画面。iPhoneで撮影した写真の標準比率は3:4。横幅いっぱいにプレビューを表示すると、画面の半分以上がプレビューで占有されてしまう。

ビデオ撮影モードの画面。iPhoneの標準的なビデオ比率は9:16。横幅いっぱいにプレビューを表示すると、画面の8割近くをプレビューが占有する。
iOS 18 以上をサポートする場合、iPhone SE(第2世代)のような小さなディスプレイの端末を考慮する必要があります。

ビデオ撮影モードの画面。iPhone SE(第2世代)では、UI コンポーネントをプレビュー上に重ねて配置せざるを得ないレイアウトになる。App Store に並ぶカメラアプリを見ても、iPhone SE 2 のレイアウトが崩壊しているものが多い。
かなり悩んだのですが、今回は iPhone SE(第2世代)のときだけレイアウトを一部調整する仕様にしました。
今回のアップデートでは、カメラ画面のレイアウト実装だけで 3 週間ほど時間を費やしました。一方で、カメラ機能まわりの実装はおよそ 1.5 週間程度で完了しています。これは、カメラ関連の機能をまとめた自作パッケージを活用することで、数行のコードで多くの機能を実現できるようにしているためです。今回新たに追加した機能は、24MP 写真撮影、シネマティックモード撮影、Apple ProRes Log 撮影くらいでした。
写真一覧画面
写真一覧画面は、ユーザーが端末に保存した写真やビデオを表示する画面です。実装工数や動作の安定性を優先したい場合は、PhotosPicker を採用するのが賢い選択だと思います。ただ、写真サムネイルに画像ファイル情報を表示したり、画面遷移時にカスタムトランジションを行いたい場合は、PhotoKit フレームワークを使ってフルスクラッチで実装する必要があります。
今回は、写真サムネイルに画像ファイル情報を表示したり、写真編集画面へ遷移する際にズームトランジションを行いたかったため、PhotoKit を使ってフルスクラッチで実装しました。

変更したはずの Exif 情報が更新されない、写真の読み込みが極端に遅くなるなどのバグにかなり悩まされ、写真一覧画面の実装には最終的に 4 週間ほど時間を費やしました。今回の開発で最も苦労した画面でした。
写真編集画面
写真編集画面は、写真一覧で選択した写真を編集するための画面です。写真編集まわりのコードは、前バージョンで使用していたものをほぼそのまま移植しています。編集値を調整する目盛タイプのスライダーについては、カメラ画面で利用しているコンポーネントを流用しました。

レイアウト自体は非常にシンプルで、1.5 週間ほどで実装を終えています。
設定画面
設定画面は、カメラや編集機能の設定変更を行ったり、アプリ内課金アイテムを購入するための画面です。

こちらの画面は特に難しい実装箇所はなく、3 日ほどで完成しました。
オンボーディング画面
オンボーディング画面は、アプリの特徴や使い方を説明する画面です。僕がリリースしているアプリでは、オンボーディング画面でアプリの特徴と、必要なアクセス権の取得処理を行うようにしています。

この画面も特に実装で困る部分はなく、3 日ほどで仕上げることができました。
アプリの動作確認
今回は、合計 16 種類の端末で動作確認を行いました。大きく分けて、2つの観点から動作確認用の端末を選定しています。

カメラスペック
カメラアプリの動作確認を行う際は、端末に搭載されているカメラスペックを考慮して確認端末を選定する必要があります。搭載カメラ数やイメージセンサーの性能によって、利用できる機能が大きく変わります。
たとえば、シネマティックモード撮影を行いたい場合は「超広角+広角」または「TrueDepth カメラ」を搭載した端末での確認が必須です。48MP 写真撮影についても同様で、対応センサーを積んだ機種で動作確認を行う必要があります。
端末が対応していない機能を無理に呼び出すとアプリがクラッシュするため、このあたりのチェックは非常に重要です。
処理能力
カメラスペック以外にも、端末そのものの処理能力を考慮する必要があります。iPhone 17 Pro では問題なく動く処理でも、旧機種では動作が重くなったりクラッシュすることがあります。そのため、幅広い端末で動作確認を行い、結果を分析したうえで機種ごとに処理内容を調整しています。
今回リリースしたアプリでは、編集画面で扱う画像サイズや、写真一覧で表示するサムネイルサイズを端末スペックに応じて出し分けました。
具体的には、
- iPhone SE 2
- iPhone Xs - iPhone 12 シリーズ
- iPhone 13 シリーズ以降の端末
の 3 カテゴリに分けて最適化を行っています。
ブラッシュアップ期間
僕がアプリを開発する際は、1〜2ヶ月ほどブラッシュアップ期間を設けています。この期間に、アニメーションやレイアウトの調整、文言の見直しなど細かい修正をまとめて行います。これらは一つ一つは小さな修正ですが、積み重なることでアプリ全体のクオリティを大きく底上げしてくれます。
今回ブラッシュアップした項目の一例は以下の通りです。
カメラ画面
- シャッターボタンを押した際の押し込みエフェクト
- 撮影ボタンを表示する際のアニメーション
- 画面左下の写真サムネイル更新時のエフェクト
写真一覧画面
- アルバム名タイトルの視認性向上(文字列の背景を黒背景+ブラーにすることで視認性を向上させています)
- 複数写真の一括自動編集・リサイズ・回転処理
- 端末ごとのサムネイル画像サイズ調整
設定画面
- アプリ内課金画面の改善
- 課金アイテムの詳細表示
- 対応機種の表示
- 詳細画面の表示エフェクト追加
写真編集画面
- 目盛スライダーの触覚フィードバックの強度・間隔調整
- 編集時の画像サイズを機種ごとに最適化
その他
- アプリ全体の Liquid Glass 対応
- ウィジェット対応
- ショートカット対応
本当に細かい修正ばかりなのですが、こうした改善の積み重ねによってアプリのクオリティは大きく変わります。僕の感覚では、アプリ全体の完成度を「60% → 90%」に引き上げるほどのインパクトがあります。
今回はこのような流れで開発を進めました。アプリ本体・アプリ内課金アイテムともに App Store レビューは一発で通過し、無事にリリースすることができました。
次に、今回の開発で良かったことと悪かったことについて挙げていきます。
良かったこと
技術的な悩みをコミュニティの Slack でつぶやくようにした
これまでは技術的な問題にぶつかった場合、基本的に自力で解決しようとしていました。それでもどうしても解決できないときは、泣く泣く実装を諦めることも少なくありませんでした。
今回は、困ったときにコミュニティの Slack につぶやくようにしてみました。すると、ありがたいことに実装方法やヒントをいただけることがたくさんありました。



もしアドバイスをいただけなかったら、今頃まだ開発が終わっていなかったと思います。本当にありがとうございました!
今日やること・やったことをつぶやくことにした
気分転換も兼ねて、今日やること・やったことをつぶやくようにしました。

スタンプで反応をもらえたり、気軽な会話が始まったりして、とても気持ちが楽になりました。いつもありがとうございます!
AVFoundation, PhotoKit, Metalなどの知見が増えた
元々そこそこ知っていることが多い領域ではあるのですが、実際に開発を進めると新たな発見が多く、今回も知見を大きくアップデートすることができました。今回得た知識は、自著や技術記事で還元していきたいと思います。
悪かったこと
途中までダラダラと開発してしまっていた
7〜8月は開発のペースがかなりゆっくりで、正直ダラダラと進めてしまっていました。9月の iOSDC に参加し、友人が登壇している姿を見て焦りを感じたあたりから、ようやく開発スピードが一気に上がりました。最初からこのペースで動けていれば、もっと余裕を持って開発できて、他の挑戦もできたのにな…と反省しています。
メンタルが内向きになっていた
当然ですが、アプリが完成するまで成果物を表に出すことはできません。アプリが完成するまで成果物を公開できないため、長期間アウトプットができない状態が続きます。そうなると早くリリースしないといけないという焦りが強くなり、技術発信や外部との交流が段々と億劫になってしまいました。
開発終盤に友人ともくもく会をしたときに、自分や友人が取り組んでいることを話したり聞いたりしたことが、すごく良い気分転換になりました。開発中であっても、今取り組んでいることをもうちょっと積極的に発信してみてもいいのかなぁと感じました。
おわりに
良かったこと・悪かったこと含め、次に活かせる学びの多い開発でした。個人開発はとても面白い反面、大変なことも多いです。順調なときは楽しいですが、行き詰まるとしんどさもあります。しかし、完成したアプリをリリースできた瞬間や、多くの方にダウンロードしてもらえた瞬間、その苦労は一気に吹き飛びます。来年も同じ達成感を味わえるよう、多くの人に使ってもらえるアプリをリリースしていきたいと思います!
Discussion