Portfolio Case Study 個人開発 iOS アプリ

IOS APP / FLUTTER / DRIFT (SQLITE) / REVENUECAT / PDF / 4 LANGUAGES 騒音の記録から
管理会社への報告までを、
ひとりで企画し、出荷まで。

SoundLogは、マンション・アパートの騒音に悩む人が dB・日時・音声をワンタップで記録し、 管理会社に提出できるPDF報告書の生成からメール送信、その後の経過管理までをアプリ内で完結できるiPhoneアプリです。 市場分析・要件定義から実装・品質管理・課金設計・CI/CD・App Store公開まで、全工程を一人で担当しました。

iOS版 — App Store公開中(2026年6月公開) Android版 — 展開検討中
担当範囲 市場分析 / 企画 / 要件定義 / UI設計 / DB設計 / 実装 / テスト / 課金設計 / CI/CD / App Store公開 / マーケティング
  • Flutter / Dart 3
  • Drift (SQLite)
  • Provider
  • RevenueCat
  • pdf + NotoSansJP
  • fl_chart
  • record / noise_meter
  • Codemagic CI/CD
  • ARB i18n ×4言語
SoundLog 記録画面 — リアルタイムdBメーターと録音ボタン
SoundLog レポート画面 — 期間選択とPDF生成
測って終わりにしない騒音アプリ 記録 → 蓄積 → 分析 → PDF → メール → 経過管理
一気通貫
code 約16,000行

手書きDartコード(自動生成を除く)。画面13・サービス15クラスを1人で実装

i18n 530キー ×4言語

UI・PDF・メール文面まで日英中韓対応。翻訳の整合性チェックは自作ツールで自動化

database 18 migrations

リリースまでに18回のスキーマ変更。データを失わない3段階フォールバック付き

quality 重大リスク対処

出荷前監査でデータ消失・課金・iOSパス切れなどの重大リスクを設計修正

Problem & Solution

「測って終わり」の騒音計アプリでは、
管理会社に伝わらない。

騒音トラブルの当事者が本当に困るのは「測ること」ではなく「伝えること」。 管理会社に相談しても「いつ・どんな音が・どのくらい」を口頭で説明しきれず、対応が進まない—— その構造的な課題を、記録から報告・経過管理までの一気通貫で解決します。

Why — 着眼点

dBを測るだけのアプリは無数にある一方、「記録を蓄積し、管理会社向けの報告書に整理し、送信し、経過を追う」 までを日本語でカバーするアプリは調査時点で見当たりませんでした(海外のThe Noise App等は日本未参入)。 機能の競争ではなく、「報告」という業務フローの空白を獲りにいくプロダクトです。

Position — 製品の位置づけ

スマホのマイクによる簡易計測である以上、法的証拠としての効力は保証できません。 そこで「証拠を作るアプリ」ではなく「管理会社とのコミュニケーションを支える参考記録ツール」と定義し、 オンボーディング・PDF・ストア記載の各層で限界を明示。期待値を正しくコントロールする設計にしました。

Before

  • 深夜・早朝の騒音は、後から日時や頻度を正確に思い出せない
  • 「うるさいです」だけでは深刻さが伝わらず、相談が前に進まない
  • メモ・録音・報告文・添付ファイルの準備がバラバラで続かない
  • 報告した後の「その後どうなったか」を管理する手段がない

After

  • 騒音の瞬間にワンタップで dB・日時・音声を記録(3秒で完了する設計)
  • 曜日×時間帯ヒートマップや環境基準比較で、発生パターンを可視化
  • 13セクション構成のPDF報告書と音声ファイルを、テンプレート文面のメールに添付して送信
  • 送信履歴をステータス管理し、14日後のフォローアップまでリマインド
Use Scenes

騒音トラブルの「その瞬間」から「解決まで」に寄り添う。

ユーザーが置かれる4つの場面を起点に、機能ではなく体験の流れとして設計しています。

深夜2時、また上の階から

イライラの瞬間に、3秒で記録を残す

設計原則は「騒音が鳴っている瞬間に、3秒以内に記録完了できること」。 アプリを開けばリアルタイムdBメーターが動いており、赤いボタンをタップするだけで録音・dB値・日時が保存されます。 種類(足音・音楽・声など)や発生源の方向、深刻度、写真は、落ち着いてから後追いで追記できます。

  • ワンタップ録音(M4A/AAC)
  • 環境省基準との比較表示
  • 機種差を吸収するマイク較正
記録画面 — 64dBを表示する円形ゲージと録音ボタン
仕事中・就寝中

居合わせなくても、自動監視が録ってくれる

ボタンを押せない場面のために、設定したdB閾値を連続3回超えると自動で30秒録音するモードを用意。 録音後はクールダウンを挟んで連続録音を防ぎ、Android展開ではフォアグラウンドサービスでOSによる強制終了を回避、 iOSではバックグラウンドオーディオで監視を継続します。静かな時間帯の環境音ベースラインも自動学習します。

  • 閾値×3回判定で誤検知を抑制
  • Android FGS設計 / iOS background audio
  • 環境音ベースライン自動計測
自動監視モードで録音中の画面
記録が溜まってきたら

「だいたい毎晩」が「金曜23時台に集中」に変わる

記録は騒音日記とカレンダーに自動整理され、統計画面では曜日×時間帯のヒートマップ、 週次トレンド、平均・最大dB、環境基準の超過状況を確認できます。 感覚的な訴えが、第三者に伝わる客観的なパターンに変わる瞬間です。

  • 曜日×時間帯ヒートマップ
  • 週次トレンド(fl_chart)
  • ベースラインとの差分表示
統計画面 — 週次トレンドの棒グラフ
いざ、管理会社へ

感情ではなく、整理された記録で伝える

3ステップの報告ウィザードで、状況に合うメール文面(初回の相談から緊急報告まで、トーン別の4テンプレート)を選び、 13セクション構成のPDF報告書と音声ファイルの添付を確認して送信。 送信後は相談履歴としてステータス(経過観察中/改善済み/未解決)を管理し、 14日経過でフォローアップをリマインドします。報告して終わり、にしません。

  • 文面テンプレート4種×4言語
  • 添付合計10MBの送信前ガード
  • 相談履歴と経過メモ
報告フロー — メール内容確認画面
Features

記録・分析・報告・経過管理を、
ひとつのアプリに。

5タブ・13画面。すべての機能が「管理会社への報告」というゴールに向かって接続されています。

ワンタップ記録

リアルタイムdBメーター・波形表示・録音を1画面に集約。記録の瞬間に迷わせないUI。

record / noise_meter / カスタム円形ゲージ

自動監視モード

dB閾値を連続超過すると自動録音。プロセス保護やクールダウンなどOS事情を吸収。

flutter_foreground_task / UIBackgroundModes

騒音日記 + カレンダー

時系列とカレンダーの2ビュー。インライン再生、スワイプ削除、写真・メモの追記に対応。

table_calendar / just_audio

統計ダッシュボード

曜日×時間帯ヒートマップ、週次トレンド、環境基準比較で発生パターンを可視化。

fl_chart / SQLite集計

PDF報告書の自動生成

被害サマリー・発生源分析・記録一覧・添付音声対応表など13セクションをA4に自動整形。

pdf / NotoSansJP埋め込み / 4言語出力

3ステップ報告フロー

テンプレート選択→文面確認→添付確認のウィザード。送信はOS標準シートでユーザー自身が実行。

share_plus / MFMailComposeViewController

相談履歴・経過管理

送信済み報告をステータス管理し、経過メモを記録。14日経過でフォローアップを促す。

report_history / flutter_local_notifications

4言語対応

UI・PDF・メール文面まで日英中韓に対応。メールは言語ごとに文化的に自然な文面へ。

ARB 530キー / ReportL10n

バックアップ & 課金

CSV+音声+写真のZIPエクスポート。Pro月額と消耗型チケットの2系統課金を実装。

archive / RevenueCat (Subscription + Consumable)
Architecture

サーバーを持たない、ローカルファースト構成。

騒音記録は「ご近所トラブル」という機微情報。録音・写真・記録はすべて端末内に保存し、 外部送信はユーザー自身のメール操作のみという設計です。結果として固定費は開発者登録料程度(月1,000円強)に収まり、 個人開発でも持続可能な運用になっています。

SoundLog — Flutter iOS App(Android展開を見据えた単一コードベース) local-first / no backend
UI5タブ・13画面 + オンボーディング

記録/日記/統計/レポート/履歴の5タブと、言語選択・規約同意・マイク較正などの初回フロー。ダーク/ライト両対応。

screens ×13widgets(DbGauge / WaveformBar 等)InterTight + JetBrainsMono + NotoSansJP
StateProvider + ChangeNotifier(AppState)

課金状態・クレジット残数・設定・言語を中央集権で管理。DB書き込み→状態更新→通知を1箇所に集約し、不整合を防止。

provider楽観的更新 + 失敗時ロールバック
Services15のサービスクラスに責務分離

録音・dB計測・自動監視・PDF生成・メールテンプレート・課金・通知・ストレージ管理・エクスポート等を独立クラス化し、画面から分離。

pdf_report_serviceauto_monitor_servicepurchase_servicestorage_cleanup_serviceほか11クラス
DataDrift(SQLite)+ ローカルファイル

記録・報告履歴・経過メモ・設定の4テーブル。録音(M4A)・写真・PDFは相対パスで参照し、500MB上限の自動クリーンアップ付き。

drift + build_runnerschema v183段階マイグレーションフォールバック
RevenueCat

サブスク+消耗型課金の購入検証・履歴管理。唯一の外部SaaS

OS共有シート / メール

PDFと音声の送信はユーザー操作で実行。アプリは勝手に送らない

Codemagic CI/CD

gitタグ(ios-v*)起点でビルド→署名→TestFlight自動配信

Point: Firebase等のBaaSをあえて使わず、認証もサーバーも持たない。「個人情報を預からない」ことを プライバシー説明・ストア審査・運用コストの三方良しに効かせています。

Stack

技術スタック

Flutter本体だけでなく、録音・計測・帳票・課金・CI/CDまで、モバイルプロダクトの出荷に必要な周辺領域を一通り扱っています。

なぜFlutterか

iOS版を先行してApp Store公開し、その後のAndroid展開も見据えて単一コードベースのクロスプラットフォームを選択。 一方でマイク監視のプロセス保護(Android FGS)やiCloudバックアップ除外(iOS)など、 OS固有の挙動はMethodChannelやプラットフォーム分岐で個別に対応しています。

CI/CDパイプライン

Codemagic上で ios-v* タグをトリガーに、依存解決→コード生成→署名→ビルド番号の自動採番→TestFlight配信までを自動化。 リリースワークフローでは開発用フラグ(ENABLE_DEV_PRO)の混入をスクリプトで検知して失敗させる安全弁も実装しました。

Design Decisions

6つの設計判断。

「何を作ったか」よりも「なぜそう作ったか」。トレードオフと向き合った判断を、理由とセットで紹介します。

Privacy by Design

クラウドを捨てて、ローカルファーストにする

録音データや記録は一切クラウドに送らず、端末内で完結。共有はユーザー自身のメール操作に限定しました。

Why: 騒音記録は隣人トラブルの機微情報であり、預かること自体がリスク。 プライバシー説明の単純化、ストア審査対応、サーバー費ゼロ(固定費は月1,000円強)を同時に達成。 端末故障リスクはZIPバックアップ機能で補完しています。
Monetize

課金残数を「DBに保存しない」

消耗型チケットの残数をローカルDBに直接持たせず、RevenueCatの購入履歴(トランザクションID)と 累計消費数から毎回算出する方式にしました。

Why: ローカル残数は機種変更・再インストール・改ざんに弱い。tx-ID照合で二重付与を防ぎ、 通信失敗時は付与をスキップする水増しガードも実装。さらにオフライン時にProが誤って剥奪されないよう 7日間のグレースピリオドを設けています。
Data Safety

マイグレーション失敗でもデータは殺さない

18回のスキーマ変更に対し、「正規実行 → カラム単位のリトライ → 設定テーブルのみ再作成」の 3段階フォールバックを用意しました。

Why: このアプリのデータは「数ヶ月かけて溜めた騒音の記録」であり、失えばユーザーの相談自体が振り出しに戻る。 監査で発見した「失敗時に全テーブル再作成(=全データ消失)」のコードを出荷前に廃止し、録音データの保全を最優先しました。
iOS Reality

絶対パスを捨てて、再インストールに耐える

録音・写真・PDFのファイル参照を絶対パスから相対パスへ全面移行(schema v18でデータも一括変換)しました。

Why: iOSはアプリ更新や再インストールでサンドボックスのUUIDが変わり、保存済みの絶対パスが静かに死ぬ。 実機検証で発見し、新規データだけでなく既存ユーザーのデータもマイグレーションで救済する判断をしました。
Measurement

計測の「信頼性」と「限界」を両方設計する

機種ごとのマイク感度差はキャリブレーション(5秒間計測→上下10%の外れ値除去→±20dBで補正)で吸収。 同時に、簡易計測の限界を製品の前提として明示しました。

Why: 「法的証拠になる」と誤解させたまま使われるのが最大の製品リスク。 オンボーディング・PDF報告書・ストア記載・利用規約の多層で「相談のための参考記録」と繰り返し位置づけています。
i18n

多言語を「気合」ではなく「仕組み」で守る

UI(ARB)・PDF/メール(BuildContext非依存のReportL10n)・DB保存値(英字コード化)の3層で多言語を構造化。 4言語ARBファイルの整合性は自作チェックツールで機械検証します。

Why: 翻訳キーの追加漏れは「実行時にしか気づけない」事故になりがち。キー欠落・プレースホルダ不一致を コミット前に検出する仕組みに投資しました。メール文面は直訳ではなく、日本語は敬語・英語はデータ中心など文化的に適応させています。
Quality Engineering

個人開発でも、
出荷品質はチーム開発の流儀で。

25年のSIer経験で身についた「監査・トラッキング・記録」の規律を個人開発に持ち込み、 自動テスト・実機確認・リリース前監査を組み合わせて重大リスクを出荷前に潰しました。

Data Safety

データ消失リスクを除去

マイグレーション失敗時に全テーブル再作成される危険を監査で発見。3段階フォールバックへ設計修正し、蓄積記録の保全を最優先。

Billing

課金・上限の回帰を検証

クレジット計算・購入ID照合・記録上限など、お金と利用制限に関わるロジックを重点的に自動テスト化。

Device QA

実機で録音・権限を確認

iPhone実機でマイク権限、録音中のdB表示、PDF生成、報告フローを確認。審査で問われる導線も動画・画面で検証。

×4言語

翻訳の機械検証

ARB4ファイルのキー欠落・プレースホルダ不一致を検出する自作ツールで、多言語の劣化を防止。

500MB

ストレージ自衛

孤立ファイルの自動削除と容量上限管理(超過時は古い録音から80%まで削減・ユーザー通知付き)。

Release Gate

本番混入を防ぐ安全弁

開発用Pro解放フラグの混入をリリース検証で検知。flutter test/analyzeも通し、出荷判断を機械チェックに寄せました。

Screens

実際の画面

App Store公開ビルドのスクリーンショットです。ダークテーマを基調に、dB数値は等幅フォントで視認性を確保しています。

記録の詳細保存画面
詳細の追記種類・方向・深刻度・写真・メモを保存後に追加
統計ダッシュボード画面
統計ダッシュボード件数・平均/最大dB・ヒートマップを集約
報告テンプレート選択画面
報告フロー Step1相談トーン別の文面テンプレートを選択
添付ファイル確認画面
報告フロー Step3PDFと音声の添付を10MB上限内で確認
PDFレポートプレビュー画面
PDF報告書13セクションのA4レポートを自動生成
相談履歴画面
相談履歴送信済み報告のステータスと経過メモを管理
自動監視モード画面
自動監視閾値超過で自動録音、バッジで状態を明示
レポート作成画面
レポート作成期間選択とプレビューから報告フローへ
Business & PM View

作る前に商売を設計し、数字には誠実に。

エンジニアリングだけでなく、市場分析・価格設計・収益予測・審査対応までをプロダクトマネジメントとして実施しました。

Market

市場規模の見立て(TAM→SAM→SOM)

着手前に市場を定量化し、「小さいが競合不在」のニッチであることを確認してから開発を開始しました。

  • TAMマンション約1,550万世帯 — 騒音トラブル経験率 30〜40%(国交省調査ベース)
  • SAM潜在ユーザー 約500万人(騒音に悩む集合住宅居住者)
  • SOMアプリで解決を試みる層 5〜10万人 — 日本語の直接競合は調査時点で不在
Pricing

「1回だけ報告したい」に合わせた価格設計

騒音問題は解決したら用済み=LTVが短い。月額一本ではなく、単発ニーズを拾う消耗型チケットを軸に据えました。

Free¥0月10件まで記録・PDFプレビュー
チケット¥250〜報告1回分+記録枠追加。3回パック¥500
Pro月額¥480記録無制限・自動監視・報告し放題
Forecast

楽観予測を、自分で棄却する

初版の収益予測は「個人開発・広告費ゼロ」の実績相場と乖離していたため、6日後に自ら全面下方修正。 DL数・課金転換率・サブスク継続期間(平均1.5ヶ月と想定)・ストア手数料を織り込み、 「初年度は年30〜50万円が現実的」と再評価した上でリリース判断をしました。

Point: 予測を盛らないことも、プロダクトマネジメントの仕事と考えています。
Compliance

審査・法務リスクの先回り

プライバシーポリシー・利用規約・サポートページの整備、マイク権限の用途明示、 簡易計測の多層免責、App Store審査向けの課金フロー実演動画の準備まで、 リジェクトリスクを潰してから提出。マーケティングサイトも自作・公開済みです。

Process

開発プロセス — ドキュメント駆動 × AI協働

要件定義書・監査記録・実装ステータスを常に最新へ保ち、AIコーディングエージェントを活用しながら、 要件・優先度・検証は自分で握るスタイルで個人開発の生産性と品質を両立させました。

  1. 2026-03 企画・市場分析・収益予測

    TAM/SAM/SOM試算、競合調査、課金モデル設計。ビジネス分析ドキュメントを作成。

  2. 〜2026-03 コア実装(Phase 1〜6)

    記録・日記・統計・レポート・履歴の5タブと録音/dB計測基盤。要件定義書v3.0として文書化。

  3. 2026-04 全コード監査・品質改修

    監査で37件検出→全件改修。UI/UX改善20件、課金率改善7施策も並行実施。

  4. 2026-05 課金・多言語・耐久性の仕上げ

    tx-ID駆動クレジット管理、4言語整合性ツール、相対パス正規化(v18)。要件定義書をv5.0へ更新。

  5. 2026-06 リリース工程

    Codemagic CI/CD整備、TestFlight配信、マーケティングサイト公開、App Store公開。

  6. Next Android展開検討・継続改善

    Android展開の技術検証、AdMob・年額プランの検討、ASOチューニング。

What This Case Study Shows

このケーススタディが示す、
4つの再現可能なスキル。

SoundLogは「アプリが作れる」ことの証明ではなく、「プロダクトを発見し、設計し、品質を担保し、出荷する」 一連の意思決定を一人で回せることの証明として開発しました。

01 — Product

0→1の全工程を一人で回す

市場分析・価格設計から実装・CI/CD・App Store公開・マーケサイトまで、全レイヤーの意思決定を経験。

02 — Discipline

ドキュメント駆動の開発規律

要件定義書・監査記録・ステータス管理を最新に保つ、25年のSIer経験に裏打ちされた進め方。

03 — AI Management

AI協働時代の品質マネジメント

AIエージェントの出力を監査・機械検証・実機確認で受け入れる、再現性のあるプロセス設計。

04 — Business

数字とリスクへの誠実さ

楽観に流れない収益予測の自己修正、法務・審査リスクの先回り対応。