2日目のゴール
2日目のテーマは
「JSONを使って“ユーザーが入力したデータ”を保存し、起動時に復元できる小さなアプリを作ること」 です。
1日目は、PythonのdictやlistをJSONに保存して、また読み戻す「技」を学びました。
2日目は、その技を一歩進めて、
プログラムを実行するたびに消えてしまうデータではなく、
「前回の続きから使えるアプリ」 を作るところまで行きます。
ここが「ただのスクリプト」と「アプリ」の大きな境目です。
1日目の復習をアプリ目線で捉え直す
「メモ帳アプリ」を頭に思い浮かべる
例えば、簡単な「メモ帳アプリ」を考えてみます。
ユーザーがメモを入力して、次に起動したときにもそのメモが残っている。
これを実現するには、次の流れが必要です。
プログラム起動時に、前回までのメモをファイルから読み込む。
ユーザーが新しいメモを追加する。
終了するときに、すべてのメモをファイルに保存する。
この「ファイル」が、今日の主役である JSON です。
1日目でやった「dict/list ↔ JSONファイル」の往復が、そのまま使えます。
今日の題材:シンプルな「メモ保存アプリ」
データの形を先に決める
まずは、「メモ1件」をどう表現するかを決めます。
最初はシンプルに、テキストだけを持つことにしましょう。
Pythonでは、1件のメモをこう表せます。
memo = {
"text": "牛乳を買う"
}
Python複数のメモは、リストで持ちます。
memos = [
{"text": "牛乳を買う"},
{"text": "Pythonの勉強を30分する"}
]
PythonJSONにすると、こうなります。
[
{
"text": "牛乳を買う"
},
{
"text": "Pythonの勉強を30分する"
}
]
この「リストの中に辞書が並んでいる形」が、
JSON保存アプリの基本パターンになります。
JSONファイルに保存する関数を作る
「保存処理」を毎回書かないようにする
まずは、memos を JSON ファイルに保存する関数を作ります。
ファイル名は memos.json としましょう。
import json
FILENAME = "memos.json"
def save_memos(memos):
with open(FILENAME, "w", encoding="utf-8") as f:
json.dump(memos, f, ensure_ascii=False, indent=2)
Pythonここで大事なのは、「保存のやり方」を一箇所にまとめていることです。
アプリのあちこちで open や json.dump を書き散らすのではなく、
「保存したいときは save_memos(memos) を呼ぶだけ」という形にしておくと、
後から直すときも、読むときも、とても楽になります。
JSONファイルから読み込む関数を作る
初回起動でもエラーにならないようにする
次に、起動時に memos.json からデータを読み込む関数を作ります。
ここで重要なのは、「ファイルがまだ存在しない場合」の扱いです。
import os
import json
FILENAME = "memos.json"
def load_memos():
if not os.path.exists(FILENAME):
return []
with open(FILENAME, "r", encoding="utf-8") as f:
memos = json.load(f)
return memos
Pythonこの関数のポイントを深掘りします。
まず、os.path.exists(FILENAME) でファイルの有無を確認しています。
初めてアプリを起動したときは、まだ memos.json がありません。
そのときに open(..., "r") をするとエラーになってしまうので、
ファイルがなければ「空のリスト」を返すようにしています。
これにより、アプリ側は
「メモが1件もない状態」として自然に動き始めることができます。
ユーザーからメモを受け取って、リストに追加する
「入力 → 追加 → 保存」の流れを作る
次に、ユーザーからメモを入力してもらい、memos に追加する処理を書きます。
def add_memo(memos):
text = input("メモを入力してください: ")
if text == "":
print("空のメモは追加しません。")
return
memo = {"text": text}
memos.append(memo)
print("メモを追加しました。")
Pythonここでのポイントは、
「空文字は追加しない」という簡単なバリデーションを入れていることです。
こういう小さな工夫が、アプリの使い心地を良くします。
メモ一覧を表示する
JSONから戻ってきたデータを「見える形」にする
保存して終わりではなく、
今どんなメモがあるのかを表示できるようにします。
def show_memos(memos):
if not memos:
print("メモはまだありません。")
return
print("=== メモ一覧 ===")
for i, memo in enumerate(memos, start=1):
print(f"{i}. {memo['text']}")
Pythonここでは、enumerate を使って
「1番、2番、3番…」と番号を振って表示しています。
この番号は、後で「削除」や「編集」をするときにも使えます。
2日目のミニアプリ:メモをJSONに保存するアプリ
起動時に読み込み、終了までメモを保持する
ここまでの部品を組み合わせて、
1ファイルの小さなアプリにしてみます。
import json
import os
FILENAME = "memos.json"
def load_memos():
if not os.path.exists(FILENAME):
return []
with open(FILENAME, "r", encoding="utf-8") as f:
return json.load(f)
def save_memos(memos):
with open(FILENAME, "w", encoding="utf-8") as f:
json.dump(memos, f, ensure_ascii=False, indent=2)
def add_memo(memos):
text = input("メモを入力してください: ")
if text == "":
print("空のメモは追加しません。")
return
memo = {"text": text}
memos.append(memo)
print("メモを追加しました。")
def show_memos(memos):
if not memos:
print("メモはまだありません。")
return
print("=== メモ一覧 ===")
for i, memo in enumerate(memos, start=1):
print(f"{i}. {memo['text']}")
def main():
memos = load_memos()
print("JSONファイルからメモを読み込みました。")
while True:
print("\n=== メニュー ===")
print("1: メモを追加")
print("2: メモ一覧を表示")
print("0: 終了")
choice = input("番号を選んでください: ")
if choice == "1":
add_memo(memos)
save_memos(memos)
elif choice == "2":
show_memos(memos)
elif choice == "0":
save_memos(memos)
print("終了します。")
break
else:
print("正しい番号を入力してください。")
main()
Pythonこのアプリは、次のように動きます。
プログラムを起動すると、memos.json があれば読み込む。
メモを追加すると、そのたびに JSON に保存される。
終了するときにも、最新の状態を保存する。
次に起動したとき、前回のメモがそのまま残っている。
ここまで来ると、
「JSONを使ってアプリの状態を永続化している」
と言っていいレベルです。
2日目で絶対に押さえてほしいこと
「アプリの起動前と起動後」をつなぐのがJSON
今日の本質は、これです。
プログラムの中の list や dict は、
実行が終わると消えてしまう。
でも、JSONファイルに書き出しておけば、
次に起動したときに「前回の続き」から始められる。
その橋渡しをしているのが、
load_memos() の「起動時に読み込む」save_memos() の「変更したら保存する」
という2つの関数です。
そして、もうひとつ大事なのは、
ファイルがないときは空リストを返す
保存処理を関数にまとめる
という「ちょっとした設計の工夫」です。
これが、後の3日目以降の「検索・更新・削除」や
「フィルタ・ソート」にそのままつながっていきます。
次の日へのつながり
3日目では、
このメモアプリの考え方をそのまま使って、
JSONに保存されたデータを
「検索する」「直す」「消す」
という、アプリに必須の操作を追加していきます。
もし余裕があれば、
今日のメモアプリを少し改造してみてください。
例えば、メモに「作成日時」を追加する。
例えば、「重要」フラグをつける。
それだけで、JSONが
「ただの保存形式」ではなく
「あなたが設計したデータの形」 になっていく感覚がつかめます。


