Edited at

できるだけ楽にテキストファイルにメモを残す

More than 1 year has passed since last update.


概要

何かしら業務を行っている際に、自分の考えや作業内容を記録したいことはないだろうか。

私の場合、問題を解決するまでの過程や、判断を下した根拠を記録しておきたいことが多々あった。

しかし、エディタを開いてファイルを作成・選択してメモを記載するという流れは面倒であり、作業対象への集中を途切れさせてしまう。

そこで、極力楽にメモを記録できるようなスクリプト類を作ったので以下に作成手順を記す。

なお、私は元々Windowsでスクリプトを作っていたが、最近環境をMacに切り替えたので、両方の環境について記載している。


何ができるか


  • 一行だけ入力するエディタ(以下、一行版)と、複数行入力できるエディタ(以下、複数行版)をできるだけ楽に起動できるようにする。

  • 一行版では、入力を行なってEnterキーを押せば、所定のファイルに日時と合わせて入力が記録される。

  • 複数行版では、適当なエディタを立ち上げて入力を行なって保存すれば、所定のファイルに日時と合わせて入力が記録される。

(実行イメージ: Mac 一行版)

oneliner.gif

(実行イメージ: Mac 複数行版)

editor.gif


Macの場合

環境: macOS Sierra


一行版


  • 1. Automatorを起動し、書類の種類: サービスとして新規作成する

  • 2. 次の選択項目を受け取る: 入力なし、検索対象: すべてのアプリケーション を指定

  • 3. ユーティリティ > AppleScriptを実行 を追加し、以下を入力する

on run {input, parameters}

tell application "System Events"
display dialog "memo:" default answer "" buttons {"OK", "Cancel"} default button {"OK"}
set inputValue to text returned of the result
end tell
return {inputValue}
end run


  • 4. ユーティリティ > シェルスクリプトを実行 を追加し、シェル: /bin/bash, 入力の引き渡し方法: 引数として を指定して以下を入力する


    • OUT_FILEには出力先のファイルパスを入れる



# 出力先のパスを入れる (以下はファイル名を YYYYMM.md のようにしている)

OUT_FILE=~/note/log/`date '+%Y%m'`.md

echo -n "`date '+%Y/%m/%d %H:%M:%S'` " >> $OUT_FILE
echo $1 >> $OUT_FILE


  • 5. 適当な名前をつけてサービスを保存する

  • 6. 環境設定 > キーボード > ショートカット > サービス から、作成したサービスにキーボードショートカットを割り当てる

なお、最初のAppleScriptを実行のところは "テキストの入力を求める" でも同様のことができるが、この場合で表示される入力欄には自動的にフォーカスが当たっていない(マウスでクリックする必要がある)ため使用せず、AppleScriptの方法で行なっている。


複数行版

ここではエディタとしてCotEditorを使用している。


  • 1. Automatorを起動し、書類の種類: サービスとして新規作成する

  • 2. 次の選択項目を受け取る: 入力なし、検索対象: すべてのアプリケーション を指定

  • 3. ユーティリティ > シェルスクリプトを実行 を追加し、シェル: /bin/bash を指定して以下を入力する


    • TEMP_FILEには一時ファイルのパスを入れる(必要ならば)

    • OUT_FILEには出力先のファイルパスを入れる



# 一時ファイルのパス

TEMP_FILE=~/temp/__t__.md
# 出力先のパスを入れる (以下はファイル名を YYYYMM.md のようにしている)
OUT_FILE=~/note/log/`date '+%Y%m'`.md

echo -n '' > $TEMP_FILE
/usr/local/bin/cot -w $TEMP_FILE
[ ! -s "${TEMP_FILE}" ] && exit
echo
-n "`date '+%Y/%m/%d %H:%M:%S'` " >> $OUT_FILE
cat $TEMP_FILE >> $OUT_FILE
echo "" >> $OUT_FILE


  • 4. 適当な名前をつけてサービスを保存する

  • 5. 環境設定 > キーボード > ショートカット > サービス から、作成したサービスにキーボードショートカットを割り当てる


Windowsの場合

環境: Windows 10


一行版


  1. Windows版rubyを使用するので、インストールしていなければインストールする

  2. パスの通っているディレクトリに以下のようなバッチファイルを作成する



    • RUBY_EXE にはruby.exeの絶対パスを入れること


    • OUT_FILE には出力先のパスを入れる



@echo off

set monthstr=%date:~-10,4%%date:~-5,2%
:ruby.exeの絶対パスを入れる
set RUBY_EXE=C:\env\ruby\Ruby23-x64\bin\ruby.exe
:出力先のファイルパスを入れる(ここではファイル名を YYYYMM.md のようにしている)
set OUT_FILE=C:\memo\%monthstr%.md

%RUBY_EXE% -e "puts('memo: '); tw = gets; File.open('%OUT_FILE%', 'a') { |f| f.write('%date% %time:~,8% ' + tw.encode('UTF-8', 'Shift_JIS')) }"

以上より、ファイル名を指定して実行からバッチファイルを呼び出すことができる。

(例として、ホームディレクトリに t.bat とかで保存しておけば、ファイル名を指定して実行で t と打てば良い。私はC:\shortなどのディレクトリを作り、それをPATHに追加していた)

なおrubyを使っているのは、コマンドプロンプトの SET /P で標準入力を受け取った場合、標準入力の値に | が入っていたりするとその後の処理でエラーになってしまうなどして実用に耐えられなかったためである。

しかし書いていて気が付いたが、PowerShellのスクリプトを用意して Read-Host を呼び出し、それを powershell -ExecutionPolicy RemoteSigned -File xxx.ps1 のようにして呼び出す形でもできたかもしれない(要検証)。


複数行版


  1. Windows版Gitを使用するので、インストールしていなければインストールする

  2. パスの通っているディレクトリに以下のようなバッチファイルを作成する



    • TEMP_FILE には一時ファイルのパスを入れる(必要ならば)


    • GIT_USR_BIN にはGitの/usr/binディレクトリのパスを入れる


    • EDITOR_CMD にはエディタを呼び出すコマンドを入れる(以下例ではGit環境下のvimを利用している)


    • OUT_FILE には出力先のパスを入れる



@echo off

set monthstr=%date:~,4%%date:~5,2%
:一時ファイルのパス
set TEMP_FILE=hogehogetmp.md
:Gitの/usr/binディレクトリのパスを入れる
set GIT_USR_BIN=C:\Program Files\Git\usr\bin
:エディタを呼び出すコマンドを入れる
set EDITOR_CMD="%GIT_USR_BIN%\vim.exe" -n -c ":set paste" -c start
:出力先のファイルパスを入れる(ここではファイル名を YYYYMM.md のようにしている)
set OUT_FILE=C:\memo\%monthstr%.md

echo. > %TEMP_FILE%
%EDITOR_CMD% %TEMP_FILE%
set PATH=%GIT_USR_BIN%;%PATH%
echo %date% %time:~,8% | tr -d '\r\n' >> %OUT_FILE%
cat %TEMP_FILE% >> %OUT_FILE%

なお、コマンドプロンプトでは TYPE CON > out.txt のようにすれば複数行の入力をout.txtに出力できるが、この入力の場合は改行すると前の行に戻ることができなくなるなど不便なので使用しなかった。