はじめに
はじめまして。私はiOSアプリエンジニアのあっきーといいます。これまでいくつかの企業でアプリ開発に携わってきましたが、この度思うところあり個人でのアプリ開発・リリースまで進めました。実際にリリースしたアプリはこちらです。興味があればぜひ触ってみてください。
この記事では、アプリ開発で詰まったところや工夫したところについて、いくつかの記事に分けて書いていきます。私と同じように個人もしくは少人数でアプリをリリースしようと計画している方々の参考になれれば幸いです。
今回は、環境の準備から書いていきます。
ひとり開発の準備
アプリを開発するにあたり、ぼんやりとした完成イメージは持っていましたが、ターゲット層やマネタイズ、多言語対応をするのかなどは詰められていなかったので、その辺りの資料作成から着手することにしました。
作った資料
| ドキュメント名 | 主な内容 |
|---|---|
| アプリ仕様・要件定義書 | アイデアの明確化、ラフレベルの画面構成、リリース対象とする国リスト |
| コンセプト・目的 | 誰がアプリを使い、どんな問題を解決できるのか?アプリの提供価値は何になるのかなど |
| 技術スタック | Xcode、Swiftなどのバージョンやサーバ構成など |
資料は初めから完成を目指さず、更新しやすいように常にVSCodeで開いた状態にしていました。ドキュメントはGitリポジトリで管理していましたが、過去バージョンを見ることはなかったので、Gitを使わなくてもいいかなとも思いました。
選ばれたのはChatGPTでした
ひとりで開発をするので、実装ミスやタイポに気づいてくれるレビュワーが欲しくて、対話型AIを導入することにしました。これまでにも業務でGemini、Copilotは使ってきましたが、ChatGPTはプライベートで相談相手として使っていたので、今回の開発ではChatGPTを使うことにしました。
今となっては色んなことで相談に乗ってもらっています。結局、開発完了までの長い付き合いになり、たくさんの的確なアドバイスと、最終的にはだいぶ馴れ馴れしい口調で話してくるようになりましたが、信頼しすぎない程度の距離感で付き合っています。
ChatGPTを開発作業で実際に使ってみて、「任せやすい仕事」と「人間側で確認すべき仕事」をまとめてみました。
やってもらえることと信頼度
| タスク | 信頼度 |
|---|---|
| 設計相談 | ○ |
| UI案 | △ |
| 最新仕様の調査補助 | △ |
| コードのたたき台 | △ |
| ローカライズ | ◎ |
| 利用規約などの初稿 | ○ |
| タスク整理 | ◎ |
任せやすい度合いなどはありますが、基本的には全てのタスクで人の目によるレビューが必須だと思った方が良いです。あくまで補助としての利用と考えて、最新情報は公式サイトなどで確認する必要があります。
タスク整理
ChatGPTの頼りなさをはじめに書いてしまいましたが、タスク整理やローカライズ処理はとても頼りになりました。タスクの優先度を付けるときにも、他のタスクとの兼ね合いやユーザ影響を考慮した上での提案をもらって、自分では気づかなかった観点を指摘されることもありました。
また、CSVやJSON、スプレッドシート形式への変換もすぐに対応してもらえる点は便利でした。開発期間が長くなると、タスク管理も迷走しがちであちこちに散らばったりすることもあるので、とても助かりました💧
ローカライズ対応
ローカライズ対応は単純な直訳ではなく、各言語で自然になるようニュアンス調整もしてもらえるので、自分ではほとんど分からない言語でも対応しやすくなりました。
- xcstringsをJSONで開く
- 別保存したファイルをチャットに添付
- ローカライズとニュアンスチェックを依頼
- 必要であれば文字数制限の指定
- キー数が絶対に変わらないように指示
私が開発していた時点では、xcstringsをそのまま扱わせるとうまく読み込めないことがあり、「そのファイル形式は読めません」と返されるので、JSONに保存しなおして渡していました。ボタンタイトルなどで使うテキストは、文字列長などもチェックした上で指定した方が手間を省けます。
JSONでまとめてローカライズを依頼するとき、返されるJSONのキー数をチェックする必要があります。何度か繰り返して渡していると、重複する情報を省略して返されることがあり、いつの間にかローカライズ処理が壊れていました。文字列長と合わせて、キー数を変更しないようにプロンプトを調整することで、事故は防げます。
投稿サンプルデータ
その他の比較的安心して任せられたタスクとしては、投稿サンプルデータの生成があります。ペルソナを予め用意した上で、そのユーザが実際に投稿しそうな内容を考えてもらい、対象言語でいくつか出してもらっていました。Lorem Ipsumではなく本番に近い状態での動作確認をするために必要でした。
ChatGPTが苦手だったこと
ChatGPTとの共同作業をする中で、ChatGPTが苦手なことを知ることもできました。何度指摘しても改善されなかったり、前にも指摘した間違いが繰り返されることもありました。主に下記のような処理が苦手で、同じ間違いを繰り返しがちだと感じました。
- 既存画像をそのまま維持した合成
- 指摘内容を記憶しておく(一度決めたことを忘れる)
- できないとは言わずにそれっぽく間違える(要目視レビュー)
画像の合成についてですが、既存のイメージを渡して、その部分は変更せずに合成するように依頼しても、変更されたくない箇所が変更されてしまっていました。ストアで使うスクリーンショットの生成を依頼していたのですが、アプリの画面キャプチャを変更されてしまうので、途中からあきらめてFigmaを使って自分で作るようにしました。
ChatGPTと共同開発して感じたこと
ChatGPTと共同開発しましたが、用法・用量を守って使っていければ開発スピードも上がり、品質を上げることも可能だと思いました。
- 知らない分野に着手しやすくなる
- ひとりでも設計レビューの相手がいる
- 面倒な文章作成を後回しにしなくなる
- 言われたことを鵜呑みにしない知識は必要
サーバ側の実装はTypeScriptで、私としても経験の少ない言語でしたが、ChatGPTの力を借りて進めることができました。渡されたコードをそのまま使うことは危険ですが、設計・実装内容を自分でレビューし、必要なテストや動作確認まで行えば、十分に実用的な補助になると感じました。
次回以降
次回からも、今回のアプリ開発で発生したテーマを個別に掘り下げて書いていく予定です。どうぞよろしくお願いします。
投稿予定の内容
- 終わらないApp Storeリジェクト対応
- 個人開発だけどセキュリティは十分過ぎるほど対応したい
- 個人開発アプリのサーバコストをできるだけ抑えたい
- 言葉の壁を越えたい ~iOSアプリに翻訳機能を組み込む~
- iOSアプリの投稿をWebでシェアする ~ディープリンクとOG画像~
- いろいろあってアプリの配信国を制限した