【コピペで動く】Pythonでタイマーアプリを作ってみよう!(timeモジュール活用)
「プログラミングって何から始めたらいいの?」「本を読んでも、エラーばっかりで心が折れそう…」
ほんの数ヶ月前の私も、まったく同じ気持ちでした。知識ゼロからスタートして、AIの助けを借りながら試行錯誤を重ね、今では2つのWebサイトを運営するまでになりました。
この記事では、そんな元・初心者の私が、皆さんと全く同じ目線で「動く」楽しさを体験してもらうことを一番の目標にしています。今回は、Pythonに標準で入っている「時間の魔法使い」、`time`モジュールを使って、驚くほど簡単なタイマー兼アラームアプリを作っていきます。
難しい理論は後回し!まずはコピペして、あなたのパソコンがタイマーに変わる瞬間を味わってみてください!
ステップ1:まずは体感!3秒だけ待つ超シンプルプログラム
百聞は一見に如かず。まずは、コンピュータに「3秒だけ待ってね」とお願いするだけの、世界一シンプルなタイマーを動かしてみましょう。以下のコードをコピーして、お手元のPython環境で実行してみてください。
# 「時間の魔法」を使うための呪文
import time
print("タイマーを開始します。")
# 3秒間、プログラムの実行を止めます
time.sleep(3)
print("3秒経過しました!お疲れ様です。")
実行すると、「タイマーを開始します。」と表示された後、少し間が空いてから「3秒経過しました!」と表示されたはずです。たったこれだけ!これこそがタイマーの基本なんです。
- `import time`: Pythonに「これから時間の機能を使いますよ!」と宣言するおまじないです。`time`という名前の、時間に関する様々な魔法(機能)が詰まった道具箱を読み込んでいます。
- `time.sleep(3)`: これがタイマーの心臓部。`time`の道具箱に入っている`sleep`(眠る)という魔法で、カッコの中に入れた数字の秒数だけ、プログラムの実行を一時停止させます。
どうです?思ったよりずっと簡単じゃないですか?これが「動く」という体験です。この小さな成功体験が、プログラミング学習を続ける一番の燃料になります。
ステップ2:あなた専用に!秒数を自由に設定できるようにしよう
3秒固定のタイマーもいいですが、せっかくなら料理や勉強に使えるように、好きな時間を設定したいですよね。次は、プログラムを実行するたびに「何秒待ちますか?」と聞いてくれるように改造してみましょう。
ここで登場するのが、ユーザーからの文字入力を受け取る`input()`という魔法です。
import time
# input()でユーザーからの入力を受け取る
input_seconds_str = input("何秒後に通知しますか? 数字で入力してください:")
# 【重要ポイント!】入力された「文字列」を「整数」に変換する
seconds = int(input_seconds_str)
print(f"{seconds}秒のタイマーをセットしました。")
time.sleep(seconds)
print(f"{seconds}秒が経過しました!時間です!")
これを実行すると、今度はプログラムが一旦止まり、カーソルが点滅するはずです。好きな秒数(例えば `10`)をキーボードで入力してEnterキーを押してみてください。入力した秒数だけ待ってから、メッセージが表示されますね。
⚠️ 初心者が絶対ハマる罠:`input()`は全部「文字列」
ここで、私が最初につまずいた超重要なポイントを共有します。それは、`input()`で受け取ったものは、たとえ数字を入力したとしても、すべて「文字列」として扱われるというルールです。
`time.sleep()`は「数値」の秒数しか受け付けません。「文字列」の`"10"`を渡そうとすると、「それは数字じゃないよ!」と怒られてエラーになってしまいます。
そこで必要なのが、`seconds = int(input_seconds_str)` の一行。これは、文字列を `int()` という魔法で囲むことで、コンピュータが計算できる「整数(integer)」に変身させる処理です。この「型の変換」は、プログラミングのあらゆる場面で登場する超基本かつ超重要な概念なので、ぜひ覚えておいてください!
ステップ3:見た目をカッコよく!カウントダウン機能の実装
タイマーが動いている間、本当に動いているのか不安になりませんか?「あと何秒だろう?」と分かるように、残り時間を表示するカウントダウン機能を付けてみましょう。
ここでは「繰り返し」の魔法、`for`ループを使います。そして、表示を1行に固定して数字だけが更新されていくように見せる、ちょっとしたテクニックも使います。
import time
seconds = 10 # 分かりやすいように10秒に固定
# 10から1まで、1ずつ減らしながら繰り返す
for i in range(seconds, 0, -1):
# f-stringで見やすく表示。end="\r"が魔法の呪文!
print(f"残り時間: {i} 秒", end="\r")
# 1秒待つ
time.sleep(1)
# カウントダウンが終わった後のメッセージ
# 前の行を消すために、後ろに空白を入れるのがポイント
print("時間になりました! ")
実行してみてください。どうですか?ターミナルの同じ場所で、数字だけが `10, 9, 8...` と減っていく様子が見られたはずです。まるで本物のタイマーアプリみたいですよね!
- `for i in range(seconds, 0, -1):`: `range(開始, 終了, 増減)` を使って、「`seconds`(10)から始めて、1になるまで(0は含まない)、-1ずつ減らしながら」という繰り返し処理を作っています。`i`という変数に、毎回のカウント(10, 9, 8...)が自動的に入ります。
- `print(..., end="\r")`: これが今回のキーテクニックです。通常`print`は表示後に改行しますが、`end="\r"` を付けると「改行せずに、カーソルを行の先頭に戻す」という動きに変わります。これにより、次の`print`が前の表示を上書きするため、数字だけが変化しているように見えるのです。
ステップ4:ついに完成!アラーム音を鳴らす本格タイマー
いよいよ最後のステップです。時間が来たらメッセージを表示するだけでなく、実際に「音」で知らせてくれるアラーム機能を付け加えましょう。
特別なライブラリは不要です。ほとんどのパソコン(のターミナル)には、特定の「特殊な文字」を表示させると「ビープ音」が鳴る、という隠し機能のようなものが備わっています。その文字が `\a` です。
これまでの機能を全部盛り込み、さらにユーザーが数字以外を入力したときのエラー処理も加えた、完成版のコードがこちらです!
# timeモジュールをインポート
import time
# try...except構文で、エラーが起きる可能性のある処理を囲む
try:
# ユーザーから待機秒数を入力してもらう
input_seconds_str = input("何秒後にアラームを鳴らしますか? 数字で入力してください:")
# 入力された文字列を整数(int型)に変換する
seconds = int(input_seconds_str)
print(f"{seconds}秒のカウントダウンを開始します。")
# 指定された秒数から1まで、1ずつ減らしながらループ
for i in range(seconds, 0, -1):
# f-stringを使って、見やすいように残り時間を表示
# end="\r" で、次のprintで同じ行に上書きするようにする
print(f"残り時間: {i} 秒 ", end="\r")
# 1秒待つ
time.sleep(1)
# ループが終わったら(時間になったら)メッセージを表示
# \a はターミナルのベルを鳴らす特殊文字(Alert)
print("時間です! アラームが鳴っています! \a")
except ValueError:
# 数字以外が入力されたとき(int()でエラーになる)の処理
print("エラー: 有効な数字を入力してください。")
except KeyboardInterrupt:
# ユーザーがCtrl+Cでプログラムを中断したときの処理
print("\nタイマーを中断しました。")
これで、あなたのパソコンは完全にタイマー兼アラームアプリとして機能します。数字以外の文字(例:`abc`)を入力すると、ちゃんとエラーメッセージを出して終了する、少し賢い作りにもなっています。
注意: `\a` によるビープ音は、お使いのOSやターミナルの設定によっては鳴らない場合があります。もし音が鳴らなくても、プログラムの動きとしては正しいので安心してくださいね。
まとめ:小さな「動いた!」が未来の大きな力になる
お疲れ様でした!今回は`time`モジュールという、Pythonの基本的な機能を組み合わせるだけで、実用的なタイマーアプリが作れることを体験してもらいました。
- `time.sleep()` でプログラムを待たせる
- `input()` でユーザーからの指示を受け取る
- `int()` で文字列を数値に変換する(超重要!)
- `for`ループで処理を繰り返す
- `print(end="\r")` で表示をカッコよく見せる
- `\a` でアラーム音を鳴らす
- `try...except` でエラーに備える
一つ一つの機能はシンプルですが、組み合わせることで、ちゃんと「誰かの役に立つツール」を生み出せるのがプログラミングの面白いところです。今日体験したこの「コピペで動いた!」「自分で改造できた!」という小さな成功が、これからあなたがもっと複雑で面白いものを作っていくための、何よりの原動力になります。
ぜひこのコードをベースに、「分」でも入力できるように改造してみたり、ポモドーロタイマー(25分作業+5分休憩)に挑戦してみたりと、自由に遊んでみてください!
【おまけ】この記事の全コードを体験できるHTML
この記事で紹介した完成版のPythonコードは、下のコードブロックからコピーして、ご自身のPCに `timer.py` のような名前で保存すれば、いつでも実行して試すことができます。ぜひ、あなたのパソコンで動かしてみてください。
<!-- timer.py として保存して実行してください -->
# timeモジュールをインポート
import time
# try...except構文で、エラーが起きる可能性のある処理を囲む
try:
# ユーザーから待機秒数を入力してもらう
input_seconds_str = input("何秒後にアラームを鳴らしますか? 数字で入力してください:")
# 入力された文字列を整数(int型)に変換する
seconds = int(input_seconds_str)
print(f"{seconds}秒のカウントダウンを開始します。")
# 指定された秒数から1まで、1ずつ減らしながらループ
for i in range(seconds, 0, -1):
# f-stringを使って、見やすいように残り時間を表示
# end="\r" で、次のprintで同じ行に上書きするようにする
print(f"残り時間: {i} 秒 ", end="\r")
# 1秒待つ
time.sleep(1)
# ループが終わったら(時間になったら)メッセージを表示
# \a はターミナルのベルを鳴らす特殊文字(Alert)
print("時間です! アラームが鳴っています! \a")
except ValueError:
# 数字以外が入力されたとき(int()でエラーになる)の処理
print("エラー: 有効な数字を入力してください。")
except KeyboardInterrupt:
# ユーザーがCtrl+Cでプログラムを中断したときの処理
print("\nタイマーを中断しました。")
次のステップへ
タイマーが作れるようになったら、次はコンピュータと対戦するゲームを作ってみませんか?乱数を扱う`random`モジュールを使えば、プログラミングの次なる楽しさが見えてきます。