あまりに執筆が遅いのではと思ったので、遅いと思うか早いと思うかは別として、作業量の記録をしてみようと思いました。
やったことは:

  • 執筆ファイルのバイト量をファイルに1行追記するシェル・スクリプトを作成する。
  • launchctrlで、そのスクリプトを毎日午前4時に動かす。
    です。
    できたデータファイルは、適当な表計算ソフトでグラフ化することにします。

シェルスクリプトの内容は以下のものです。
適当なデータファイル(progress_data.txt)に、日時と、執筆ファイルのバイト数を1行記録していきます。
執筆ファイル名は、”ch”+章番号+拡張子”adoc”としています。

1
2
3
4
5
#!/bin/sh
cd $WORKING_DIRECTORY(ファイルがあるディレクトリ名を設定する)
date '+%F' | tr -d "\n" >> progress_data.txt
echo ' ' | tr -d "\n" >> progress_data.txt
wc ch*adoc | tail -n 1 | tr -s ' ' | cut -d ' ' -f4 >> progress_data.txt

このシェルスクリプトを、”watching_progress.sh”として保存。

1
2
% chmod +x watching_progress.sh , 実行権限を与える
% cp /dev/null progress_data.txt , 空の出力ファイルを用意する

次にこれを毎日午前4時に実行させます。Macではlaunchctrlというコマンドが使えます。

com.reinforce-lab.com.watch-progress.plist という次のような内容のファイルを作ります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.reinforce-lab.com.watch-progress.plist</string>
<key>Program</key>
<string>/(作業ディレクトリのフルパス、自分の環境に合わせて)/watching_progress.sh</string>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Minute</key>
<integer>0</integer>
<key>Hour</key>
<integer>4</integer>
</dict>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

このファイルをロードして、登録できていることを確認します。plistを編集して再読込するときは、unloadしてからloadし直します。
ロード時にシェルスクリプトが動くはずなので、データファイルに出力があるかを確認します。

1
2
3
% launchctl load com.reinforce-lab.com.watch-progress.plist
% launchctl list | grep com.reinforce-lab.com.watch-progress
% ls -a watching_progress.sh

アンロードするときのコマンド。

1
% launchctl unload com.reinforce-lab.com.watch-progress.plist

再起動したときに、plistが読み込まれるように、”~/Library/LaunchAgents/“で先程のplistファイルが見えるようにシンボリック・リンクを作成します。

1
2
% cd ~/Library/LaunchAgents/
% ln -s $(作業ディレクトリ)/com.reinforce-lab.com.watch-progress.plist ./

グラフ化してみる

CSVデータをグラフ化するのにNumbersの別ファイルを用意した。そこに日々更新されるCSVデータをコピペするのに、apple scriptでこのようにした。
この処理は、csvファイル名は、progress_data.csv。このファイルをnumbersで開くとカラムA:Bにデータがある。それをグラフ化するファイル progress_data.numbersを事前に用意しておく。そのファイルのカラムA:Bにコピーしたデータをペーストして、ファイルを閉じる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(*
CSVデータをnumbersのファイルに貼り付けるスクリプト。
2017年4月26日 上原 昭宏
*)
tell application "Numbers"
activate
-- CSVのデータをコピー。
open "Your Working Directory/progress_data.csv"
tell table 1 of sheet 1 of document 1
set selection range to range "a:b"
delay 2.0
tell application "System Events" to keystroke "c" using command down -- copy
end tell
close document 1
-- 対象ファイルにペースト。
open "Your Working Directory/progress_data.numbers"
tell table 1 of sheet 1 of document 1
set selection range to range "a1"
tell application "System Events" to keystroke "v" using command down -- paste
end tell
close document 1 saving yes
end tell

CSVを吐き出したあとに、シェル・スクリプトで、このapple scriptを実行するコマンドを追加。

1
osascript progress_data.scpt

Comments

2017-04-24