title: 個人日記 description: 日付付きのエントリをファイルに書き込み、過去のエントリを読むことができるスクリプト。
個人日記
Dex やあ。正直なところ、ミッションが大変で、ログをつけたいと思ってた。シンプルな日記アプリを作ってくれないか?新しいエントリを入力して、日付をつけて保存できて、古いエントリも読み返せるようにしたい。複雑なことは要らない。頭の中のモヤモヤを整理するだけでいいんだ ✍️
何を作るのか
Commands: new / read / quit
> new
2026-05-24
朝から充実していた。在庫管理ツールのプロジェクトを完成させた。
JSON シリアライゼーションの仕組みがようやく分かった。
[エントリを保存するには空行を押す]
Entry saved.
> read
--- 2026-05-24 ---
朝から充実していた。在庫管理ツールのプロジェクトを完成させた。
JSON シリアライゼーションの仕組みがようやく分かった。
--- 2026-05-23 ---
...
> quit必要な知識
- Files and exceptions - 新しいエントリのための追加モード、ファイル全体の読み込み、初回実行時のファイル欠落対応
- Modules and the standard library - 日付を文字列として取得するための
datetime - Strings - 日付ヘッダーのフォーマット、ファイル内容をエントリに分割
- Control flow - コマンドループ、エントリ入力用の複数行入力ループ
- Output and input
ヒント
追加モードが重要。 "a" でファイルを開くと、既存の内容に影響を与えずに末尾に追加できる。新しいエントリを追加する際、古いエントリを削除しないで済む。
datetime.date.today() で今日の日付が取得できる。 str() または f-string で文字列に変換して、エントリヘッダーとして使う。datetime モジュールは標準ライブラリに含まれている。
エントリを書き込む前に収集する。 ユーザーが複数行を入力できるようにして、各行をリストに追加する。ユーザーが空行を送信したら、リストを結合してエントリ全体を一度に書き込む。
さらに進める
コア機能の日記アプリが完成したら:
readに表示制限を設ける。 ファイル全体を常に表示すると、すぐに扱いにくくなる。デフォルトでは最後の3つのエントリだけを表示し、さらに表示するオプションを用意する。- エントリを検索する。 キーワードを含むエントリを表示する
searchコマンドを追加する。 - エントリごとの単語数を表示する。 エントリを表示する際に、各エントリの単語数を表示する。

