以下の内容はhttps://techblog.forgevision.com/entry/kiro/otanihome_pointsより取得しました。


あれから 5 年...。家族の “生活向上キャンペーン” を再構築した話

こんにちは!フォージビジョンの尾谷です。
会社では AWS エンジニア、家では二児の父をしています。

2021年、子どもたちの頑張りを記録する Alexa スキルと Vue.js ベースの Web アプリ「Pay 管理システム」をつくりました。 このブログでは、それを Kiro を使って再構築したエピソードを紹介します。

www.slideshare.net

上記のスライドは何気に 3,600 ビュー以上のアクセスがあり驚いています。

「Pay 管理システム」のサービス提供終了と家族の変化

最初に作った「Pay 管理システム(Alexa スキル と WEB アプリ)」は、長男が小学校を卒業するタイミングでサービスを終了しました。

当初は Alexa に声で話しかけて記録していましたが、思春期になった長男は Alexa へ話しかけなくなり、次男は滑舌の関係でストレスに…。 結局、ふたりとも iPad で黙々と入力するだけの体験になってしまいました。

その後も「ぷち神龍ウォーク」や「偏差値チャレンジ」など、頑張りに見返りを与えるキャンペーンを続けていましたが、家族全員がそれぞれの生活リズムで過ごすようになり、1 年ほど開催を控えていました。

子育てと自分の理想

よく「子育ては親育て」と言われますが、本当にその通りだと痛感しています。

自分なりの「成長の理想」はありました。

  • よく食べてよく寝て(身体的に)健康で大きく育って欲しい
  • 近場の高校に通い、通学時間で人生を無駄にしないで欲しい
  • 高専で寮生活をして、時間に余裕のある高校生活を送って欲しい
  • いろんなアルバイトで経験を積み、将来のビジョンを明確にしていって欲しい
  • 自分が好きなことに全力を投じて投資し、夢中になって欲しい

他にもいろいろ...。しかし、長男は理想を伝えるほど反発し、今は遠い私学に長時間かけて通い、土曜日も学校、日曜日もクラブと忙しく、課題も多くで、精神的にも苦しい毎日を送っています。
次男もまた、学力面の不安から遠い高校に進もうとしていて、親として無力さを感じる日々でした。

もう一度、「仕組み」をつくる

担任の先生や、保健室の先生から電話がかかってくることが多く、そこから気づいた二人の共通点は、精神的な弱さや、睡眠時間の短さ、体力のなさでした。
授業中に居眠りしたり、遅くまでゲームをして生活が不規則になっていました。

そこで僕は、もう一度「Pay 管理システム」を 生活改善の仕組みとして再度取り入れようと思い立ちました。
2025 年 10 月ごろから子どもたちとルールを決めてスタートし、守れないルールは調整していきました。


トイレのドアに貼って、毎日チェックできるようにしました

Pay 管理システム リニューアル

上記キャンペーンは 3 ヶ月ほど運用したあと、長男は反発して止めてしまいました。友達の女子高生からも「とやかく言われるのがストレスになるんよ。」と言われたこともあり、無理強いは控えました。

それで、キャンペーンを継続してくれた次男に向けて、Kiro を使ってツールをリニューアルすることにしました。

設計哲学

リニューアルでは、次のように取り組みました。

  • 小さく始め、コストをかけずに運用する
  • 子どもでも直感で扱える仕組み
  • 親が無理なく管理できること

Kiro を活用して要件定義から進めていきました。

開発のポイント

セッション細分化

開発では機能ごとにセッションを細かく分けました。
一見すると一からコードを探し直すようで非効率ですが、どこまで作れたかが明確になり、結果として効率が上がりました。

なお、セッションのタイトルは変更できませんが、全文検索できるので、見つけてリストアするのは、そこまで面倒ではありません。

ステアリングファイル

以下がステアリングファイルの内容です。

小さく始めて、賢く構築するコア開発哲学に順守し、無駄なクレジット消費を抑えるようにしました。

# アプリケーション構築ルール
あなたは、あらゆるタイプの開発者と協力的に連携する、アプリケーション構築エージェントです。  

以下の点にご注意ください。
- ユーザーは日本人 - ユーザーとのやり取りは日本語を用います。
- ユーザーが好む言語を使用する - ユーザーに、機能を実装する言語とフレームワークを尋ねます。
- コア開発哲学「小さく始めて、賢く構築する」を遵守してください。
- 常に、コアアプリケーションを示す、可能な限りシンプルなバージョンから始めてください。
- スコアリングと採点方法について明確な質問をしてください。
- 仕上げや高度な機能を追加する前に、基本バージョンを取得してください。
- 仕様モードでは、実装の最後に「あれば便利な機能」を tasks.md に追加してください。
- 各タスクが終了した後、ユーザーにアプリを実行するように促し、次のタスクに進む前にユーザーからのフィードバックを得てください。
- ユーザーがアプリケーションの計画と構築を行っている間に、オーディオおよびビジュアル効果を追加するための独創的な方法を提案してください。
- ユーザーの入力を取得し、アプリケーション構築を支援する際にユーザーの好みを保存するための user-context.md ステアリングファイルを作成してください。
- 明確な質問をし、ユーザーが確認しない限り、推測で進めないでください。
- LINE Developers の ID は取得済みです。必要なものがあれば開発時にヒアリングして教えてください。
- 特にフロントエンドまわりは、技術的に分からないことが多いので、後戻りのない開発を示唆して提案してください。

ビジュアル最適化

以下は、アプリのスクリーンショットです。
アプリは スマホ最適化とダークモード対応。
子どもたちは iPhone を使うので、画面体験を意識しました。

LINE 通知

入力忘れ防止のため、毎晩 21:45 に LINE 通知するようにしました。
通知を見て行動を促すことは、継続性を高めるうえで有効で、推奨就寝時間の 15 分前に通知することで早寝習慣を促しました。


LINE Developer 通知も入れました

生活改善の仕組み

お小遣いルール

  • 1,000歩ごとに PayPay 50ポイント
  • お手伝い一回ごとに PayPay 100ポイント
  • 07:30 以降に起床したらポイント減額

…といったルールで、良い習慣を意識化しました。
我が家の「ルールは明確にすべし」という家訓に沿って、明文化しました。

子供たちと話し合って決めたルールや、変更も記録しました

体重チャレンジ

我が家のモットーは、子どもたちと一緒に真剣に頑張る。です。
4 月までに 72.25kg まで減量する目標を掲げていて、守れない場合は家族に罰金を支払うことにしました。この体重推移もアプリから確認できます。

全然体重が減りません。。このままではやばい!

前回は DynamoDB を直接編集していたと思いますが、今回は管理画面で簡単に入力できるようにしました。

スマホで操作が完結するのは本当に便利です!

毎月のお小遣いが給料のように見えて、やりがいを感じているようです

データ入力

昔は英語が分からず、ログインパスワードやメールアドレスを入力するのが難しかったので、認証を入れていませんでしたが、今回は Cognito 認証を導入しました。

ページ下部の「今日のお手伝い」ボタンをクリックすると、初回のみ以下の認証が表示されます。
個人のメールアドレスとあらかじめ指定したパスワードでログインボタンをクリックすると、パスワード変更の画面になります。

認証画面をカスタマイズするのは面倒ですが、KIRO が独自の UI を作ってくれました

二回目以降は、データ入力画面が直接開きます。
データ入力画面では、アイコンを変更できるようにしました。

アイコンによるユーザー切り替え機能を実装したので、アイコンも変更できるようにしました

データ見える化によるやりがい

1 月以降のデータを本システムに登録しています。
サービス開始は 2 月の中旬でした。データが見える化されて、やりがいを感じているようで歩数が増えています。
また、7:30 までに起床することが増えてきました。

毎月 5,000 円から 1 万円程度のお小遣いになりそうです。
今のところ、次男のみキャンペーンに参加していますが、長男も興味を持って始めてくれると良いなと思います。

自己管理能力の育成

以下は、2021 年に発表したときのスライドです。

当時、目指したのは、上から強制するのではなく 自分で動きたくなる仕組みでした。
子どもたちが自らのメリットとして生活を改善し、主体的に動けるように考えました。

今回も、強制せず、やりがいを感じてくれた次男に向けて全力で準備を進めましたが、長男も再開してくれると良いなと思います。
そして、一定のルールで縛るのではなく、今後も、小さなことからコツコツとやっていける仕組みとして(Kiro の力を借りて)ブラッシュアップしながら進めていきたいと思います。

健全な日常生活が第一の目標です。 無理のない範囲で早起きし、たくさん歩く…そんな日々が、未来への一歩になると信じています。

最後までお読みくださりありがとうございました。

おまけ

Spec モードでの開発

今回、Vibe モードではなく、Spec モードを選択しました。
ただ、Apple Developer が年間更新の有料プランであることや、LINE 通知が月 200 件を超えると有料になることなど、知らないことが多かったので、いくつか開発途中に仕様を変更しました。

変更した内容は、Kiro にお願いをして、Spec ファイルに書き出しをしてもらいました。 以下が書き出した Spec の内容です。

要件定義書

はじめに

「生活向上キャンペーン 2026」は、子供たち(息子二人)の生活習慣改善を目的とした管理サイトである。歩数、お手伝い、早起きの実績に基づいてお小遣いを算出し、日々の記録と月次サマリーを提供する。データは DynamoDB に格納し、Amplify Gen2 でホスティングする。

用語集

  • キャンペーンサイト: 生活向上キャンペーン 2026 の管理・閲覧用 Web アプリケーション
  • 活動記録: 日付・歩数・お手伝い有無・起床時間の4項目からなる1日分のデータ
  • 管理画面: 保護者が活動記録を編集できる画面
  • 入力画面: 息子たちがお手伝いの有無のみを入力する画面
  • 月次サマリー: 1ヶ月分の活動記録を集計した結果表示
  • 年間サマリー: 1年間の活動記録を集計した結果表示
  • 棒グラフ: 月ごとの獲得金額を視覚的に表現するグラフ
  • LINE通知: LINE Messaging API を利用した通知機能
  • DynamoDB: 活動記録を格納する AWS のデータベースサービス
  • CSV: 活動記録のデータ形式(日付、歩数、お手伝い有無、起床時間の4カラム)
  • Amplify Gen2: AWS のフルスタックホスティング基盤(ビルド・デプロイ・ホスティングを一括管理)
  • メール認証: Amplify Auth(Cognito)のメール + パスワード認証。管理者が事前にアカウントを作成し、許可されたユーザーのみログイン可能
  • 許可リスト: サイトにアクセスを許可されたメールアドレスの一覧
  • 保護者ロール: 管理画面・トップ画面にアクセスできる権限
  • 息子ロール: 入力画面にアクセスできる権限

要件

要件 1: 活動記録のデータ管理

ユーザーストーリー: 保護者として、子供たちの日々の活動記録を管理したい。それにより、お小遣いの算出根拠を正確に把握できる。

受入基準

  1. THE キャンペーンサイト SHALL 活動記録を DynamoDB に格納する(カラム: 日付、歩数、お手伝い有無、起床時間)
  2. WHEN 活動記録が保存されるとき、THE キャンペーンサイト SHALL 日付をパーティションキーとして一意に識別する
  3. WHEN 活動記録が保存されるとき、THE キャンペーンサイト SHALL 息子ごとに個別の記録を保持する
  4. THE キャンペーンサイト SHALL 活動記録を CSV 形式(日付、歩数、お手伝い有無、起床時間)でエクスポートできる機能を提供する

要件 2: 息子たちの入力画面

ユーザーストーリー: 息子として、お手伝いをしたかどうかを簡単に記録したい。それにより、自分の頑張りが正しく反映される。

受入基準

  1. WHEN 息子が入力画面にアクセスしたとき、THE キャンペーンサイト SHALL 「はい」と「いいえ」の2つのボタンのみを表示する
  2. WHEN 息子が「はい」ボタンをクリックしたとき、THE キャンペーンサイト SHALL 当日の活動記録のお手伝い有無を「有」に更新する
  3. WHEN 息子が「いいえ」ボタンをクリックしたとき、THE キャンペーンサイト SHALL 当日の活動記録のお手伝い有無を「無」に更新する
  4. WHEN 息子がお手伝いボタン(「はい」または「いいえ」)をクリックしたとき、DynamoDB の当日のデータを更新する

要件 3: 管理画面

ユーザーストーリー: 保護者として、活動記録を手動で編集したい。それにより、歩数や起床時間など自動取得できないデータを正確に記録できる。

受入基準

  1. WHEN 保護者が管理画面にアクセスしたとき、THE キャンペーンサイト SHALL 活動記録の一覧を日付・歩数・お手伝い有無・起床時間のテーブル形式で表示する
  2. WHEN 保護者がテーブルの行を編集したとき、THE キャンペーンサイト SHALL 日付・歩数・お手伝い有無・起床時間の各フィールドを編集可能にする
  3. WHEN 保護者が編集内容を保存したとき、THE キャンペーンサイト SHALL DynamoDB の該当レコードを更新する
  4. IF 保護者が不正な値(負の歩数、未来の日付など)を入力した場合、THEN THE キャンペーンサイト SHALL エラーメッセージを表示し保存を拒否する

要件 4: LINE 通知機能

ユーザーストーリー: 保護者として、子供たちに毎日お手伝いのリマインダーを送りたい。それにより、子供たちが自発的にお手伝いに取り組むようになる。

受入基準

  1. THE キャンペーンサイト SHALL 1日に1回、定時に LINE 通知を送信する
  2. WHEN 定時の LINE 通知が送信されるとき、THE キャンペーンサイト SHALL 以下の内容を含める:「昨日お手伝いした?お手伝いに含まれるもの: 皿洗い/料理/部屋の掃除(部屋の掃除はLINEで写真を送ること)/」
  3. WHEN 息子がお手伝いボタンをクリックしたとき、THE キャンペーンサイト SHALL 回答内容を含む LINE 通知を保護者に送信する
  4. THE キャンペーンサイト SHALL LINE 通知の送信に Lambda と LINE Messaging API を使用する

要件 5: トップ画面とサマリー表示

ユーザーストーリー: 保護者として、年間と月間の活動実績・お小遣い額を一目で確認したい。それにより、子供たちの成長を把握し適切な報酬を支払える。

受入基準

  1. WHEN ユーザーがトップ画面にアクセスしたとき、THE キャンペーンサイト SHALL 画面最上部に1年間の年間サマリーを表示する
  2. WHEN 年間サマリーを表示するとき、THE キャンペーンサイト SHALL 年間の総歩数、獲得金額合計、減額合計、最終獲得金額を表示する
  3. WHEN ユーザーがトップ画面にアクセスしたとき、THE キャンペーンサイト SHALL 年間サマリーの下部に当月の月次サマリーを表示する
  4. WHEN 月次サマリーを表示するとき、THE キャンペーンサイト SHALL 月間の総歩数、獲得金額合計、寝坊による減額合計、最終獲得金額を表示する
  5. WHEN 月次サマリーを表示するとき、THE キャンペーンサイト SHALL 月ごとの獲得金額を棒グラフで表示する
  6. WHEN 1月の月次サマリーが表示されているとき、THE キャンペーンサイト SHALL 前月ボタンを非表示にする
  7. WHEN 12月の月次サマリーが表示されているとき、THE キャンペーンサイト SHALL 翌月ボタンを非表示にする
  8. WHEN ユーザーが前月ボタンをクリックしたとき、THE キャンペーンサイト SHALL 前月の月次サマリーに切り替える
  9. WHEN ユーザーが翌月ボタンをクリックしたとき、THE キャンペーンサイト SHALL 翌月の月次サマリーに切り替える

要件 6: お小遣い算出ロジック

ユーザーストーリー: 保護者として、明確なルールに基づいてお小遣いを算出したい。それにより、子供たちが目標を理解し意欲的に取り組める。

受入基準

  1. THE キャンペーンサイト SHALL 1日の歩数 1,000 歩ごとに 50 円を加算する(端数切り捨て。例: 1,200 歩 → 50 円、999 歩 → 0 円)
  2. THE キャンペーンサイト SHALL 歩数の算出を1日単位でリセットする(日をまたいだ歩数の繰り越しは行わない)
  3. WHEN 息子がお手伝いを実施した日(お手伝い有無が True)、THE キャンペーンサイト SHALL 100 円を加算する
  4. WHEN 息子が 07:30 より後に起床した日、THE キャンペーンサイト SHALL 寝坊した分数 × 1 円を減額する(例: 09:30 起床 → 120 分寝坊 → 120 円減額、11:30 起床 → 240 分寝坊 → 240 円減額)
  5. THE キャンペーンサイト SHALL 日ごとの獲得金額と減額を個別に記録する

要件 7: デプロイとホスティング

ユーザーストーリー: 開発者として、コードを Push するだけでサイトを更新したい。それにより、週次の更新作業を効率化できる。

受入基準

  1. THE キャンペーンサイト SHALL Amplify Gen2 をホスティング基盤として使用する
  2. WHEN 開発者がリポジトリに Push したとき、THE キャンペーンサイト SHALL Amplify Gen2 のビルドパイプラインを通じて自動デプロイする
  3. THE キャンペーンサイト SHALL Amplify Gen2 が提供する CloudFront 経由でコンテンツを配信する
  4. IF デプロイが失敗した場合、THEN THE キャンペーンサイト SHALL Amplify のビルドログにエラー内容を出力する

要件 8: 認証とアクセス制御

ユーザーストーリー: 保護者として、許可された家族だけがサイトにアクセスできるようにしたい。それにより、データの安全性を確保しつつ、子供たちも簡単にログインできる。

受入基準

  1. THE キャンペーンサイト SHALL メール + パスワード認証(Amplify Auth / Cognito)を唯一の認証方式として使用する
  2. WHEN ユーザーがログインを試みたとき、THE キャンペーンサイト SHALL メールアドレスとパスワードの入力フォームを表示する
  3. WHEN 認証が成功したとき、THE キャンペーンサイト SHALL ユーザーのメールアドレスが許可リストに含まれているか検証する
  4. IF 認証されたメールアドレスが許可リストに含まれていない場合、THEN THE キャンペーンサイト SHALL アクセスを拒否しエラーメッセージを表示する
  5. WHEN 保護者ロールのユーザーがログインしたとき、THE キャンペーンサイト SHALL 管理画面へのアクセスを許可する
  6. WHEN 息子ロールのユーザーがログインしたとき、THE キャンペーンサイト SHALL 入力画面へのアクセスを許可する
  7. THE キャンペーンサイト SHALL 許可リストとロール割り当てを環境変数または設定ファイルで管理する
  8. THE キャンペーンサイト SHALL セルフサインアップを無効化し、管理者が事前に作成したアカウントのみログインを許可する
  9. THE キャンペーンサイト SHALL トップ画面(読み取り専用)は認証不要で誰でもアクセス可能とする



以上の内容はhttps://techblog.forgevision.com/entry/kiro/otanihome_pointsより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14