コース目次 / 第4章

自分のものにする

ランダムに1つ思い出す機能を足して、自分の日記として続けられる形にします。

第4章 / 全5章目安 約35分この章のゴール: 日記がランダムに1つ返ってきて、明日からも続けられる状態で残る
お使いのエディタ
ファイル操作が切り替わります

最後の章です。書きためたものを、思いがけず読み返せるようにします。

1. ランダムに1つ思い出す

日記の値打ちは、書くことよりも忘れたころに読み返すことにあります。omoide という呼び方を足しましょう。

まず、使い方の説明と種の指定を足します。

nikki.rb+3 / -2
 # はるとの1行日記 #-#   ruby nikki.rb        今日の1行を書く-#   ruby nikki.rb list   これまでの分を読む+#   ruby nikki.rb          今日の1行を書く+#   ruby nikki.rb list     これまでの分を読む+#   ruby nikki.rb omoide   ランダムに1つ思い出す  require "date"

行頭の + - は変更の目印です。コピーすると、記号と削除された行を除いたこの章を終えた時点の内容が入ります。

nikki.rb+3 / -0
 $stdin.set_encoding("UTF-8") +# 同じ思い出をもう一度呼び出したいときのために、種を外から決められるようにしておく。+srand(ENV["SEED"].to_i) if ENV["SEED"]+ def yomu   return [] unless File.exist?(NIKKI)

行頭の + - は変更の目印です。コピーすると、記号と削除された行を除いたこの章を終えた時点の内容が入ります。

nikki.rb+12 / -0
     puts "#{hizuke}  #{honbun}"   end+elsif ARGV[0] == "omoide"+  nikki = yomu++  if nikki.empty?+    puts "まだ1行も書いていません。"+    exit+  end++  hizuke, honbun = nikki.sample.chomp.split("\t")+  puts "#{hizuke} のあなたは、こう書いています。"+  puts+  puts "  #{honbun}" else   print "今日の1行> "

行頭の + - は変更の目印です。コピーすると、記号と削除された行を除いたこの章を終えた時点の内容が入ります。

sample は配列から1つをでたらめに選ぶメソッドです。専用の道具が最初から用意されているところが、いかにもRubyです。

srand の行は「同じ思い出をもう一度出す」ための仕掛けです。ふだんは何もしなくて構いません。SEED を決めて実行すると、何度やっても同じものが選ばれます。
この教材の例が毎回同じ答えを出せるのも、Tsumikiが公開前に自動で検査できるのも、この1行のおかげです。でたらめを使うプログラムには、必ずこの逃げ道を作っておくと、あとで自分が助かります。

2. 動かす

VS Codeのターミナルターミナル
ruby nikki.rb omoide

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

こう出る(どれが出るかは毎回変わります)
2026-08-02 のあなたは、こう書いています。

  尾道で猫がたくさんいた

何度か打ってみてください。日によって違うものが返ってきます。

種を決めると、同じものが返ります。

VS Codeのターミナルターミナル
SEED=1 ruby nikki.rb omoide

行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。

2回続けて打つと、同じ日の分が出ます。(Windowsの PowerShell では $env:SEED=1; ruby nikki.rb omoide)

3. あなたの番

3つとも、書き換えるだけです。

(1) 文言を自分の言葉にする

"#{hizuke} のあなたは、こう書いています。" の部分を、自分がうれしくなる言い方に変えてください。ここが毎日目に入る文字になります。

言い換えの例
puts "#{hizuke} には、こんなことがありました。"

(2) 一覧の見た目を変える

list の表示を、日付とのあいだを線にしたり、新しい順にしたりできます。

新しい順にする例
nikki.reverse.each do |line|
  hizuke, honbun = line.chomp.split("\t")
  puts "#{hizuke}  #{honbun}"
end

reverse を1つ足すだけです。こういうときにRubyは気持ちよく書けます。

(3) 続ける

いちばん大事な改変です。明日も打ってください。 ruby nikki.rb の1行だけです。

nikki.txt はただのテキストファイルです。エディタでも開けますし、他のアプリに持っていくこともできます。あなたのデータが、あなたのパソコンの、読める形で残っている — これがこのコースの成果物です。

持ち帰りカード

フォルダに README.md を置いておきます。3か月後のあなたが読む用です。

README.md
# はるとの1行日記

Tsumiki のミニ体験コース「Ruby — 書き心地を味わう」の成果物です。

## また動かすとき(3行)

1. ターミナルを開く
2. `cd` でこのフォルダに入る
3. `ruby nikki.rb` と打つ(Windowsも同じです)

## 使い方

| 打つもの | 何が起きるか |
|---|---|
| `ruby nikki.rb` | 今日の1行を聞かれて、`nikki.txt` の末尾に足す |
| `ruby nikki.rb list` | これまでの分を全部読む |
| `ruby nikki.rb omoide` | ランダムに1つ思い出す |

## 中身

| ファイル | 何をするか |
|---|---|
| `nikki.rb` | 本体。追記・一覧・思い出しの3つ |
| `nikki.txt` | 日記そのもの。**あなたのデータなので配布ZIPには入っていません** |
| `hello.rb` | 第2章で書いた最初のファイル |

## 覚えておくこと

- **Mac に入っている Ruby は 2.6 という古いものです。** この日記は 2.6 でも最新の
  Ruby でも動くように書いてあります。新しい書き方を試すときは、`ruby -v` で
  自分がどれを使っているかを先に確かめてください
- **`gem install` は使いませんでした。** ここで使った `date` も `File` も、Ruby に
  最初から入っているものだけです
- 同じ思い出をもう一度出したいときは `SEED=1 ruby nikki.rb omoide` のように
  種を決めて実行できます

## この先に進むなら

- Ruby 公式ドキュメント(日本語) https://docs.ruby-lang.org/ja/
- ブラウザで試すなら TryRuby https://try.ruby-lang.org/
- 次は `irb` で気軽に試す癖をつけると、Ruby はぐっと楽しくなります

配布ZIPに nikki.txt は入っていません。あなたの日記だからです。ZIPから戻しても、書いたものが上書きされることはありません。

試食レポート

おつかれさまでした。手元には毎日1行で育っていく日記と、そのデータが残りました。

Rubyは「書いていて気持ちいい」を目的に置いて作られた、めずらしい言語です。今日書いた50行ほどの中にも、5.times、ブロック、sample、|| と、その気配りがあちこちに出ていました。

この言語、合いそうでしたか?
書き方が1つに決まっていない自由さ、irbで試してから書くリズム、そして読みやすさ。合いそうなら、Ruby公式ドキュメント(日本語)が次の一歩です。Rubyは日本発の言語なので、日本語の一次情報がいちばん充実しています。
本格的に続けるなら、そのときこそ新しいRuby(4系)を入れてください。Macなら rbenv や mise といったバージョン管理ツールが定番です。
ぴんと来なかったなら、それも収穫です。別の言語を試食してみてください。

ハマったら

ZIPで戻したい

このページの下のZIPは、この章を終えた状態のフォルダです。解凍して、その中で作業を続けられます。自分で書き換えた部分は消えてしまうので、先に自分のファイルを別の場所へ待避してから使ってください。

こうなっていればOK

うまくいかないときは、この章の完成ファイル一式(ZIP)をダウンロードして続きから進めても大丈夫です。

この章で卒業です。

この章はまだ完了していません。