初めてのMac OSアプリをリリースをしました!
- Shun

- 4月10日
- 読了時間: 7分
はじめまして、F FoundryのShunです。 今回は自分が開発した初めてのMacアプリ「MovieShooting」をApp Storeにリリースするまでの道のりを、書いてみようと思います。
「個人開発ってどんな感じ?」「App Storeの審査ってどうなの?」と気になっている方の参考になれば嬉しいです。
はじめてリリースしたMac OSのアプリについて
一言でいうと、動画視聴中に欲しかった機能をオールインワンにしたメディアプレーヤーです。もともとは自分が動画を見ているときに感じた「もっとこうだったらいいのに」を全部詰め込もうと思ったのがきっかけ。QuickTime Playerだと物足りないし、かといって本格的な映像編集ソフトは重すぎる。だったら自分で作成しようと考えました。
スロー再生・ループ・フレームキャプチャ・ルーペ(拡大鏡)・GIFエクスポートなどをひとつにまとめています。ダンスの振り付け確認やスポーツのフォームチェックなど、さまざまな場面で活用できます。
ちなみに、ルーペ(拡大鏡)機能を思いついたの経緯として、
趣味でカメラをやっていて、ボートレースをよく撮影しに行きます。選手がターンする瞬間をタイミングが難しく、うまく撮影ができませんでした。
で、あるとき撮影した動画を見返していたら、「あれ、これって動画を拡大しながら再生すれば、タイミングを見てキャプチャできれば、シャッターを押すタイミングの練習になるのではないか?」と気づいた。
そこからルーペ機能の実装を決めた。自分の趣味から生まれた機能です。

まず勉強するところから始めた
アプリを作ろうと決めたものの、最初はSwiftもXcodeも触ったことがなかった。なので、iOSアプリ開発の入門書を一冊買って基礎から勉強することにした。
書籍で学んだのは主に2つ。
・Xcodeの使い方
どこにコードを書けばいいのか、どうやってビルドして動かすのか、ファイルの構成はどうなっているのか。開発環境の基本的な使い方を一通り把握した。
・Swiftの基本的な文法
変数・定数の書き方、条件分岐、ループ、関数、構造体やクラスの概念など。プログラミングの基礎的な考え方を身につけた。
ただ、正直なところ書籍で全部を理解しようとは思っていなかった。高度な実装は全部AIに書いてもらう前提で、「Xcodeの使い方(どこに何を入力するのか)」と「書かれたコードの意味がなんとなくわかる」レベルになれればOKという割り切った勉強法をとった。
これが結果的に正解だったと思う。基礎さえわかっていれば、AIが書いたコードをXcodeに貼り付けてビルドし、エラーが出たら対処するというサイクルが回せる。完璧に理解していなくてもアプリは作れることがわかった。
アプリ開発スタート
勉強がひと通り終わったところで、実際に開発をスタート。SwiftUIでUIを組みながら、わからないところはAIに聞きつつ少しずつ形にしていった。
最初は小さな機能から始めて、再生・一時停止ができた、スロー再生が動いた、ルーペが表示されたと、一つ機能が増えるたびに純粋に嬉しかった。
ただ、コードを書いてビルドして実際にアプリをテストしてみると、「こんな機能もほしい」「ここ使いづらいな」という気づきが意外とたくさん出てくる。頭の中でイメージしていたものと、実際に動かしてみた感覚は全然違う。
そのたびに改良や仕様変更を繰り返して、また使ってみて、また直して。地味な作業の積み重ねだけど、これがけっこう楽しかった。そうやって少しずつブラッシュアップしながら、ようやく審査に出せるところまで完成させた。
審査の前にウェブサイトが必要だった
一通り機能を完成させて、いざ審査に臨もうとしたところで新たな壁にぶつかった。
今回のmovieShootingはサブスクリプション形式のアプリだったのだが、その場合は利用規約(EULA)とプライバシーポリシーを外部に公開している必要があることを知った。つまり、それらを掲載するウェブサイトを用意しなければならない。
厳密にはウェブサイトでなくてもよく、URLでアクセスできるページであればいいのだが、どうせならちゃんとしたサイトを作ろうと思い、F FoundryのウェブサイトをWixで立ち上げることにした。これが今みなさんが見ているこのサイトの始まりでもある。
サポートページとプライバシーポリシーのページを用意して、ようやく審査に出せる状態が整った。
最初の審査
SwiftUIでUIを組んで、AVFoundationで動画処理を実装して、StoreKitでサブスクリプションを追加して。「よし、完成!」と意気揚々と審査に出したところ——
あっさり拒否されました。
理由は複数あって、最初は正直なんのことかよくわからなかった。Appleの審査フィードバックって英語だし、抽象的な表現が多くて「つまり何を直せばいいの?」となることが多い。
拒否された主な理由をまとめると:
① EULAの問題 利用規約まわりの記載が不足していた。App Store Connectの設定を細かく確認する必要があった。
② ファイル保存場所の問題 ユーザーがファイルを保存するときの場所の指定が、Appleのガイドラインに沿っていなかった。
これらの拒否内容も全てAIに聞いて対処をした。
正直なところ、自分では発見できなかったエラーなどの指摘がくるのかと思ったが
案外軽い指摘のみで済んだなーという印象でした。
AIが全て解決してくれるので、修正はすんなり行った。
審査時間について
App Storeの審査は平均1〜2日と公式には案内されているが、初めてリリースするアプリということもあってか、実際にはもっと時間がかかった。日曜日に申請を出して、拒否の通知が来たのが木曜日の22時過ぎ。約4日かかった。
審査で拒否通知を受けて、修正版を出してさらに4日かかったのちにようやくリリースとなった。

ちなみに、v1.0からv1.1へのアップデートした際の審査は1日で完了しました。
ようやくリリース
何度かの修正を経て、v1.1としてついにリリース。
App Storeのページに自分のアプリが並んだときは、すごく嬉しかった。
リリースされると、App Storeからスタイリッシュな広告用動画?が作ってもらえた。
勉強開始からリリースまで
勉強開始からリリースまで、約半年でこぎつけることができた。AIがほぼすべての実装を担ってくれたおかげで、プログラミング未経験に近い状態からでもこのペースで進められたと思う。
普段は会社員として働いているので、作業できるのは基本的に朝だけ。スケジュールはこんな感じだった。
平日:朝5時起き → 7時まで作業(約2時間)
土日:朝5時起き → 10時過ぎまで作業(約5時間)
1ヶ月あたりの作業時間を計算すると:
平日 2時間 × 22日 + 土日 5時間 × 8日 = 84時間 / 月
84時間 × 6ヶ月 = 約504時間
トータル500時間超。数字にするとなかなかのボリュームだが、毎朝コツコツ積み上げた結果だと思う。
やってみてわかったこと
AIがコードを書いてくれると、「あの機能も追加したい、この機能も入れたい」とどんどん実装したくなる。それ自体は楽しいのだが、気づくと実装したいことのリストが膨らんでいって、途方もない感覚になることがあった。
そんなときに助けになったのが「1日1機能を実装すれば、いつかは終わる」というマインドセット。完璧を目指して全部一気にやろうとするのではなく、今日はこれだけ、という小さな積み上げを続けること。このシンプルな考え方があったから、半年間モチベーションを切らさずに続けられたと思う。
これから
・AIリマスター機能
ルーペ機能で拡大すると、どうしても画像が荒くなってしまう。これをAIで補正してクリアに見せる機能を実装したいと考えている。
・拡大鏡の動画対応
現在のルーペ機能はキャプチャした静止画のみに対応しているが、マウスカーソルを合わせた箇所をリアルタイムで拡大したまま動画として記録できる機能を実装予定。再生しながら気になる部分をそのまま動画で残せるようになる。
このブログでは開発の裏側や技術的なトピックをゆるく発信していくので、よかったらまた読みにきてください。
それでは。



コメント