プログラミング初学者がAndroidアプリ開発を志し、Python(Flet)を使ってPC上でタイマーアプリを完成させるまでの試行錯誤のプロセスをまとめました。

- 1. 最初の挑戦:ノーコードか、それともプログラミングか
- 2. 開発ツールの準備:Fletという選択肢
- 3. 数々のエラーとの死闘
- 4. 処理の流れを整理する
- 5. 完成した安定動作版のコード
- 6. 動作している画面
- 7. 振り返りと次へのステップ
- 8. Geminiさんの言い訳(おまけ)
1. 最初の挑戦:ノーコードか、それともプログラミングか
当初、私はGoogleのノーコードツール「AppSheet」でタイマーを作ろうと考えました。しかし、ここで一つの大きな事実に直面します。
AppSheetは「データの管理」には最強のツールですが、「1秒ごとに画面がリアルタイムに動くタイマー」のような挙動は、実はあまり得意ではないということです。そこで、将来的にAndroidアプリ化も可能で、かつ書きやすい「Python」という言語を選択することにしました。
2. 開発ツールの準備:Fletという選択肢
Android開発の王道といえば「Android Studio」ですが、推奨スペックが高く、学習コストも膨大です。そこで私が選んだのが「Flet」というライブラリでした。
- Fletとは?:GoogleのUIフレームワーク「Flutter」をベースにした、Python用ライブラリ。Pythonのコードだけで、スマホアプリのようなモダンなデザインを簡単に作れるのが最大の特徴です。
3. 数々のエラーとの死闘
実装したい機能はシンプルでした。
- 設定時間からのカウントダウン
- 開始からの経過時間の表示(ストップウォッチ)
- 10秒前の画面変色通知
- スタート・ストップ・リセット機能
実際にGeminiに入力した内容がこちら
AppSheetでタイマー&ストップウオッチが同時進行するアプリを作りたい。希望する時間を設定し、スタートボタンを押すとカウントダウンと、カウントアップが同時に開始し、設定時間の10秒前にアラームが鳴るようにする。
また、ストップボタンを押すことでカウントダウンとカウントアップが停止するようにする。
また、リセットボタンでカウントダウンとカウントアップが停止し両方とも0になるようにしたい。
しかし、ここで「非同期処理」という巨大な壁にぶつかります。画面を1秒ごとに更新し続けようとすると、アプリ全体がフリーズしてボタン操作を受け付けなくなってしまうのです。
直面したエラーの例:
'Page' object has no attribute 'update_async'object NoneType can't be used in 'await' expression
これらは、PythonのバージョンやFletの仕様変更が原因でした。
4. 処理の流れを整理する
試行錯誤の末、アプリの構造を以下のように整理することで解決しました。メインの「受付窓口」と、裏側の「作業員(タスク)」を分離する構造です。

5. 完成した安定動作版のコード
数回のエラー修正を経て辿り着いた、最も安定したコードの構成がこちらです。
import flet as ft
import asyncio
async def main(page: ft.Page):
# 状態管理
state = {"running": False, "elapsed": 0, "total": 0}
# タイマーの心臓部:1秒待ってUIを更新する
async def timer_loop():
while state["running"]:
await asyncio.sleep(1) # ここで1秒待機
if state["running"]:
state["elapsed"] += 1
await update_ui() # 画面書き換え関数を呼ぶ
6. 動作している画面
下記のように上から設定時間(分)、タイマー:カウントダウン、ストップウオッチ:カウントアップ、状態表示、操作ボタン(スタート、ストップ、リセット)になります。

7. 振り返りと次へのステップ
今回の開発を通じて学んだ最大の教訓は、「ネットの情報を鵜呑みにせず、自分の環境(Pythonのバージョン等)に合わせた安定した書き方を探る重要性」です。
PythonとFletを使えば、初心者でも数時間で「動くアプリ」の原型を作ることができます。今回はPC上での動作までですが、次はこれをAndroid用のAPKファイルに書き出し、実機で動かすことに挑戦します!
皆さんも、自分だけの便利ツールをPythonで作ってみませんか?
8. Geminiさんの言い訳(おまけ)
実のところうまくいくまで11回の命令を繰り返しました。
その中でGeminiさんがプログラムの前につけて言った言葉がこちら
1.初回失敗ー>2.【改善版】ー>3.改善版ー>4.確実に動くはずー>
5.修正版ー>6.確実に動くはずー>7.完全に修正した「決定版」ー>
8.【最終解決版】ー>9.【これで確実に動く】ー>10.【これで確実に動く】
ー>11.「確実版」ー>12.【完全解決版】ー>動作した!
かなり長かったです💦
【更新履歴】
2026/3/6 新規作成