rakeで日記を書く
そこそこ安定してきたようなので、この日記の編集ツールをさらしてみる。添削プリーズ。いまだにrakeよくわかってないし。
基本的にはすべてローカルのターミナル上の作業で
- rake edit_todayでテキスト編集
- rake sendではてなにアップ
- ブラウザで日記ページを確認
- 気になるところがあれば、1.にもどって修正
というループ。はてダラ単体で運用してもよかったのだけど、送信済み=svnにコミットされている、としたかったので周辺をいじってみた。
はてダラがあってよかった。結城さん++
# $Id: Rakefile 1051 2009-04-19 15:08:27Z kimuraw $ # # = はてダラによる日記環境 # # subversionで送信したテキストファイルをバージョン管理する # という運用環境を構築する # # == 想定される使い方 # # 年や月ごとのディレクトリを作成し、そこで日付名のファイルを書く。 # `rake send'すると、はてダラにより日記ファイルがはてなダイアリーに # 送信される。 # # ファイル構成の例 # # ./200811/2008-11-01.txt # ./200812/2008-12-01.txt # ./2009/2009-01-01.txt # ./2009/2009-02-01.txt # ./Rakefile # ./tool/hw.pl # ./config.txt # ./template.txt # # ディレクトリを新規作成したときは`svn add'すること。 # (めんどいので対応していない) # # == 利用できるrakeタスク # # `rake -T'の結果を参照のこと # # == 必要なもの # # * perl # * svn # * rake # # == SEE ALSO # # :はてなダイアリーライター(略称:はてダラ) # http://www.hyuki.com/techinfo/hatena_diary_writer.html # require 'fileutils' require 'time' # 実行につかうコマンド、好みでフルパスに PERL = 'perl' SVN = 'svn' # 設定 HDW_PATH = 'tool/hw.pl' #はてダラのパス(Rakefileからの相対パス) HDW_OPTIONS = '-c' CONF_TXT = 'config.txt' TMPL_TXT = 'template.txt' EDIT_CMD = 'vim "%s"' #編集コマンド HOUR_DELTA = -6 task :default => :list # 数字で始まるファイルを日記ディレクトリと見なす diary_dirs = FileList.new('[0-9]*') # 今日のファイル today_file = (Time.now + HOUR_DELTA * 3600).strftime('%Y-%m-%d.txt') today_path = File.join(Rake.original_dir, today_file) #### タスク desc '未送信の日記ファイルを一覧表示します' task :list do |t| if t.prerequisites.size > 0 puts t.prerequisites.join("\n") else puts "未送信のファイルはありません。" end end desc '未送信の日記ファイルをはてなに送信します' task :send do |t| files = t.prerequisites if files.size == 0 puts "未送信のファイルはありません。" else # すべてをコミット sh "#{SVN} ci -m 'post: #{Time.now.rfc2822}' #{diary_dirs.join(' ')}" end end desc '今日の日記ファイルをエディタで開きます' task :edit_today => :touch do sh (EDIT_CMD % today_path) end desc '今日の日記ファイルがなければ作成します' task :touch do unless File.exists? today_path puts "touch \"#{today_file}\"" sh "cat \"#{TMPL_TXT}\" > \"#{today_path}\"" end end # はてダラで送信する rule '.send' => '.txt' do |t| sh "#{PERL} #{HDW_PATH} #{HDW_OPTIONS} -f #{t.source} -n #{CONF_TXT}" end # バージョン管理下にないファイルを追加 rule '.add' => '.txt' do |t| sh "#{SVN} add \"#{t.source}\"" end #### 対象ファイルの抽出 #### listまたはsendタスクが指示されたときは未コミットのファイルを収集 if ([:list, :send] - Rake.application.top_level_tasks).size > 0 uncommited_files = `#{SVN} st #{diary_dirs.join(' ')}` uncommited_files.lines.grep(/\A[AM\?]/).each do |line| line.slice(/(\S).\s+(.*)/) svn_type = $~[1] path = $~[2] # テキストファイル以外は無視 next if File.extname(path) != '.txt' if svn_type == '?' task path.pathmap('%X.send') => path.pathmap('%X.add') end task :send => path.pathmap('%X.send') task :list => path end end