ねこものがたり

プログラミング学習の記録

読書記録用のファイルを作成するコマンドを作りました

今年に入り、GitHubにプライベートリポジトリを作って読書記録を残すようにしてみました。

neko314.hatenablog.com

そのリポジトリはReading-Notesというんだけれど、前回の記事を書いた段階ではcp format.md 2019/01/読んだ本のタイトル.mdとコマンドを叩くことで事前に用意していたformat.mdを複製し、そこに感想を書くようにしていました。

しかしめんどくさい!

以前、Fjord Boot Campの課題で、コマンドのlsやらwcやらをRubyで再現するっていうのに挑戦したことがあったんですけど、それと同じように適当にファイル作るようにしたほうが簡単だと思いました。 それにコマンドを作るという点でいい復習になりますし。

ということでやってみました。

作ったもの

#!/usr/bin/env ruby

require 'date'
require 'fileUtils'
require 'pathname'

class Note < File
  attr_accessor :title

  def initialize
    @title = STDIN.gets.chomp + ".md"

    year = Date.today.year.to_s
    month = "%02d" % Date.today.month.to_s
    path = Pathname.new(year).join(month)
    path.mkpath unless path.exist?

    FileUtils.cp('format.md', path.join(@title).to_s)
  end
end

Note.new

学びになったこと

Pathname

るりまを開くと

パス名をオブジェクト指向らしく扱うクラスです。

だそうです。ふむふむ。わかったようなわからないような。Pathnameクラスがあって振る舞いがあるんだな〜っていうざっくりとした感覚では掴んだ気がします。

mkpathメソッドを使ったらwarningがだーーーーっとでて「ひょえっ」と思いましたが、どうやら鋭意解決に取り組んでおられる模様。自分でも考えたいけどそれは無理なので心から応援しています!w

fileutils conflict in Ruby 2.5.1 · Issue #22 · ruby/fileutils · GitHub

Pathnameは初めて触ったとおもっていたのですが、Rails.root~~がまさにこれらしく、railsでは使ったことがありました!

シバン

久しぶりにやったのでどうやるんだっけなとすっかり忘れちゃっていました。

  1. ファイルに#!/usr/bin/env ruby(これがシバン)と記載
  2. ファイル名は拡張子なしに(今回の場合note.rbとしていたのをnoteに変更しました)
  3. chmod +x noteパーミッションを変更
  4. 実行するときは ./note

感想

夫にコードレビューはしてもらったけど、ほぼ自力で書けたので良かったです! 楽しかったのでこれくらいの簡単な操作は今後も自分でコマンド書いて行くようにしてみようと思いました。