【ITニュース解説】I built an Android app for remembering the little things about people you love (no AI, no internet permission)
2026年10月27日に「Dev.to」が公開したITニュース「I built an Android app for remembering the little things about people you love (no AI, no internet permission)」について初心者にもわかりやすく解説しています。
ITニュース概要
大切な人の細かな情報を記録するAndroidアプリ「Little Things」を開発。AIやネット接続なしで、入力内容からキーワードで自動分類し、必要な時に再提示する。高速入力、プライバシー重視、安定動作を実現するため、シンプルなロジックとテストを徹底した工夫が光る。
ITニュース解説
「Little Things」というAndroidアプリは、愛する人たちの些細な情報を覚えておくためのツールとして開発された。日々の忙しさや注意力の特性により、人との会話の中で出てくる好みや習慣といった小さな情報が忘れ去られがちな人々のために、そうした細部を瞬時に記録し、必要な時に思い出せるよう設計されている。
このアプリの最も重要な設計思想の一つは、情報の「素早い記録」にある。せっかくの気づきも、メモを取るのに手間取っていてはすぐに忘れてしまうため、メモの入力プロセスはわずか5秒程度で完結するように工夫されている。アプリのホーム画面には一つの大きなボタンがあり、タップすればすぐにキーボードが開いて入力できる。さらに、複数の情報をまとめて書き留めたい時には、「保存して次へ」というオプションを使って、思考の流れを止めずに次々とメモを残すことが可能だ。
アプリに記録された情報が自動的にカテゴリ分けされる機能も、その「賢さ」を支える重要な要素だが、これは人工知能(AI)に頼っているわけではない。「スマート」なカテゴリ分類は、ユーザーが入力したテキストの中に特定のキーワードやフレーズが含まれているかをチェックする、シンプルながらも巧妙なロジックで実現されている。例えば、「〜が好き」という言葉が含まれていれば「好きなもの」カテゴリに、しかし「〜は嫌い」という否定的な言葉が含まれていれば「嫌いなもの」カテゴリに分類される。ここで重要なのは、キーワードをチェックする「順序」だ。「嫌いな食べ物」という情報が「好きなもの」として誤分類されないよう、否定的な意味合いのキーワードを肯定的なキーワードよりも先にチェックすることで、情報の正確性を保っている。もしどのキーワードにも当てはまらない場合は、アプリが勝手に推測するのではなく、ユーザーが手動でカテゴリを選ぶ仕組みになっている。これは、間違った推測をしてユーザーを混乱させるよりも、少し手間がかかっても確実に正しい情報を保存できる方が良い、という開発者の保守的な判断に基づいている。AIを使わない選択は、他にも複数の利点がある。一つはユーザーの「プライバシー」保護だ。アプリはインターネット接続の許可を一切必要としないため、メモされた個人的な情報が外部サーバーに送信される心配がない。もう一つは「高速性と信頼性」だ。AIモデルを動かすよりもキーワード検索の方が処理が圧倒的に速く、常にオフラインで瞬時に動作するため、ネットワーク状況に左右されず安定して利用できる。さらに、「デバッグのしやすさ」も大きなメリットだ。なぜ誤分類されたのか原因が特定しやすく、新しいキーワードやフレーズを追加するだけで簡単に改善できるため、開発者にとって効率的だ。
アプリのホーム画面やウィジェットには、毎日一つ「今日の小さなこと」が表示される。これは単にランダムに選ばれるのではなく、毎日同じ情報が同じ順序で提示され、日が変わると新しい情報に切り替わる、という「シャッフルされているが安定している」ユニークな仕組みだ。この機能は、データベースに特別な情報を保存することなく実現されている。具体的には、保存されている全てのノートをまず一意のID順に並べ、その日の日付(1970年1月1日からの経過日数、epochDayと呼ばれる)を乱数発生器の「種(シード)」として与えてシャッフルする。こうすることで、同じ日であれば常に同じシャッフル結果が得られ、日が変われば新しいシードによって全く異なる順番で情報が提示されるため、常に新鮮な体験を提供できる。
「繰り返しすぎない」通知機能も、ユーザー体験を考慮した工夫だ。Googleが提供するWorkManagerという技術を使って、特定の日時にリマインダーや「おせっかい(nudge)」通知を送るが、単純にランダムに選ぶだけでは、同じ情報ばかりが頻繁に表示されたり、逆に全く表示されない情報が出たりする可能性がある。これを避けるため、アプリは各ノートが最後に表示された日時を記録しており、通知を送る際には「最も長い間表示されていなかった」ノートを最大8つ選び、その中からランダムに一つを通知する。これにより、全ての情報がまんべんなく表示されるよう工夫されている。さらに、「ニーズ」や「ギフトのアイデア」といった特定のカテゴリの通知には、「今日、サムのためにできる小さなことは?」や「もしかして、今週こそ?」といった、具体的な行動を促す質問が添えられており、単なる情報の再提示にとどまらない実用性が加えられている。WorkManagerは毎日厳密に同じ時刻に実行されるわけではないため、通知の頻度をチェックする際には、多少の時間のずれを許容する「猶予」を持たせることで、まれに通知がスキップされることを防いでいる。
誕生日のリマインダー機能も単なる日付通知以上の価値を提供する。例えば、「明日はサムの誕生日です」という通知に続けて、「保存されているギフトのアイデアが3つあります。タップして確認」のように、ユーザーが既に記録したギフトのアイデアの数を表示する。もしアイデアが一つもなければ、「ギフトのアイデアはまだありません。タップして、相手が好きなものを見てみましょう」といったメッセージが表示され、情報の活用を促す。この機能の実現には、日付計算における複雑な「落とし穴」を回避するための緻密なテストが行われている。例えば、閏年の2月29日が平年には2月28日に繰り下がることや、過去の日付を翌年に繰り越す処理、誕生日には年数を表示しないが記念日には「5周年」のように表示するといった、様々なケースに対応するロジックが組み込まれている。
このアプリはインターネット接続を許可しないため、クラウドサービスを使ったデータの同期やバックアップは行わない。その代わりに、ユーザー自身がアプリのデータを.zipファイルとしてエクスポートし、好きな場所に保存できる「サーバーなしバックアップ」の仕組みを提供している。バックアップファイルには、メモの内容が格納されたdata.jsonファイルと、写真が保存されたphotos/フォルダが含まれる。データ復元時の安全性には特に配慮がなされており、インポートする.zipファイルの中身を完全に解析し、問題がないことを確認してから初めて、既存のデータベースを消去して新しいデータを書き込む。これにより、破損したファイルによってアプリのデータが失われることを防いでいる。また、バックアップファイルからファイルを展開する際には、「zip-slip」と呼ばれるセキュリティ上の脆弱性への対策も施されている。これは、悪意のあるファイルによってアプリが意図しない場所にファイルを書き込んでしまうことを防ぐもので、パス区切り文字や親ディレクトリを示す表現が含まれるファイル名は自動的に拒否される。
このアプリは、Googleが推奨する現代的なAndroid開発技術の多くを採用している。プログラミング言語にはKotlinが、ユーザーインターフェースの構築にはJetpack Compose(Material 3デザイン)が使われている。データの永続的な保存にはRoom、バックグラウンドでの処理にはWorkManager、画面間のスムーズな移動にはNavigation Compose、そしてホーム画面ウィジェットにはGlanceが利用されている。アプリはAndroid 8.0(API 26)以降のデバイスで動作する。