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

個人日記

Dex やあ。正直、任務がいろいろ大変で、ずっと記録をつけたいと思ってたんだ。シンプルな日記アプリを作ってくれないかな?新しいエントリーを入力して、日付付きで保存して、過去のものを読み返せるようにしたい。複雑なものじゃなくていいんだ。ただ頭の中の考えを吐き出せるようなものでいい ✍️

作るもの

Commands: new / read / quit

> new
2026-05-24
Had a productive morning. Finished the inventory manager project.
Figured out how JSON serialisation works properly.

[press Enter on an empty line to save]
Entry saved.

> read
--- 2026-05-24 ---
Had a productive morning. Finished the inventory manager project.
Figured out how JSON serialisation works properly.

--- 2026-05-23 ---
...

> quit

必要なもの

  • ファイルと例外 — 新しいエントリーの追加モード、ファイル全体の読み込み、初回実行時にファイルが存在しない場合の処理
  • モジュールと標準ライブラリ — 今日の日付を文字列として取得するための datetime
  • 文字列 — 日付ヘッダーのフォーマット、ファイルの内容をエントリーごとに分割する処理
  • 制御フロー — コマンドループ、エントリー書き込み用の複数行入力ループ
  • 出力と入力

ヒント

追加モードが鍵です。 ファイルを "a" で開くと、既存の内容に触れずに末尾に追加されます。これによって、古いエントリーを消さずに新しいエントリーを書き込めます。

datetime.date.today() で日付を取得できます。 str() か f-string で文字列に変換すれば、エントリーのヘッダーとして使えます。datetime モジュールは標準ライブラリに含まれています。

書き込む前にエントリーを集めましょう。 ユーザーに複数行入力させ、それぞれをリストに追加していきます。空行を入力したら、リストを結合してエントリー全体を一度に書き込みます。

さらに先へ

中核の日記機能が動いたら:

  • read の表示を制限する。 毎回ファイル全体を表示するとすぐに扱いづらくなります。デフォルトでは直近の3つのエントリーだけを表示し、もっと表示するオプションを用意しましょう。
  • エントリーを検索する。 キーワードを含むエントリーを表示する search コマンドを追加しましょう。
  • エントリーごとの単語数。 エントリーを表示するときに、その単語数も一緒に表示しましょう。