俺用日記スクリプト。

毎日かかさず日記を書いている、こう人に言うとかなり驚かれます。つまりそんな風貌をしている私なのです。さらにお小遣い帳を付けているというと天変地異でも起きたかのようなリアクションを取られてしまいます。つまりそんな風貌をしている私なのです。
お小遣い帳はいいとして、日記です。今は自分でテキストファイルを作り、しこしこと書いているのですが、やはり面倒。単にファイル、ディレクトリを作って、作ったファイルに日時を挿入するという簡単な手順なので、習作としてちょうどいいや、ということでRubyで書いてみました。

require 'date'
require 'fileutils'

DIARY_ROOT = "Documents/Diary"

wday_list = ['日', '月', '火', '水', '木', '金', '土']

now = DateTime.now              # 現在の日時を取得

diary_dir =                     # 保存先のディレクトリ名を作成
  sprintf("%s/%d/%02d/",
          File.expand_path(DIARY_ROOT, '~'),
          now.year,
          now.month
          )

diary_file_name =               # ファイル名を作成
  sprintf("%d-%02d-%02d.txt", now.year, now.month, now.day)

FileUtils.mkdir_p(diary_dir)    # ディレクトリ作成

diary_full_path =               # フルパスを作成
  File.join(diary_dir, diary_file_name)

# 日記に出力する文字列を作成
if FileTest.exists?(diary_full_path) # ファイルが存在する場合は区切りと時刻
  out = sprintf("---?n%02d:%02d?n",
                now.hour,
                now.min
                )
else                            # ファイルが存在しない場合は日時
  out = sprintf("%d/%02d/%02d(%s)%02d:%02d?n",
                now.year,
                now.month,
                now.day,
                wday_list[now.wday],
                now.hour,
                now.min
                )
end

# ファイルを作成、日時などを書き込む
open(diary_full_path, "a") do |file|
  file.print(out)
end

# 作成したファイルをエディタで開く
`open -a emacs #{diary_full_path}`

作成時に知ったことをメモメモ。

  • File.expand_pathメソッドは第一引数を第二引数を基準に絶対パスを作成し返す
File.expand_path("dir", "~")

とすると、

/Users/ユーザ名/dir
  • FileUtils.mkdir_pは指定したパスの途中のディレクトリも存在しなければ作成する
    • FileUtilsクラスにはファイル、ディレクトリ操作に便利なメソッドが多数そろっている
  • File.joinは引数で渡した文字列を/で区切って返す
    • 引数の終端に/が入っていた場合、//とならない
  • ``(バッククォート)で囲まれた文字列はコマンドとして実行される
    • 変数展開も可