Skip to content
This page has been auto-translated and may contain errors.View in English

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 コマンドを追加する。
  • エントリごとの単語数を表示する。 エントリを表示する際に、各エントリの単語数を表示する。