ジャーナリングを暗号化してGitHubで管理
ジャーナリングとは
ジャーナリングとは、頭に浮かんだ考えや感情をそのまま紙に書くことで、自己理解を深めて、ストレスを軽減し、メンタルを向上させる手法です。「書く瞑想」とも言われてるらしいです。
日記は「その日の出来事や行動を記録する」のに対して、ジャーナリングは「自分の状態や感情に気づく」ことが主な目的です。
私自身も、仕事や勉強におけるモチベーションを高めるためにジャーナリングを始めました。しかし、エンジニアとして、紙にジャーナルを書くのではなく、vimで書き、gitで管理しています。
また、ジャーナリングには、「内容を他人に見せない」というルールがあります。これは、自分のネガティブな感情や考えもオープンに書き出すことが求められるため、他人の目に触れないようにする必要があるからです。
しかし、私はgithubの草を生やすためにリポジトリはpublicにしたいというポリシーがあります。それに、ジャーナリングを継続出来ている自分をみんなに知ってもらいたいという自己顕示欲もあります。
そこで、ジャーナリングの内容を暗号化することにしました。これにより、ジャーナリングの内容自体は隠しつつ、リポジトリをpublicに出来ます。副作用として、githubのプロフィールの草も生やすことが出来てしまいます。
ジャーナリングを毎日継続すればこうなれる
プロセス
具体的なプロセスは以下の通りです
- ジャーナリングを書く
- ジャーナリングの内容を
git-secret
で暗号化 - 暗号化した内容をpush
git-secret
git-secret
は、指定したファイルの内容を暗号化して、publicリポジトリ内で秘密情報を管理出来るツールです。また、許可した人のみが復号出来るので、チームでの秘密情報の共有も実現できます。
ファイル暗号化の流れ
git-secret
はgpg
(GNU Privacy Guard)を利用するので、まずgpg
をインストールします。
brew install gnupg
次に、gpg公開鍵・秘密鍵を作成します。
--full-gen-key
次に、git-secret
でファイルの暗号化を行います。まずはgit-secret
をインストールします。
brew install git-secret
以降の作業は、対象のgit
リポジトリ内で行います。
まず、.gitsecret
ディレクトリを生成します。
git secret init
次に、暗号化・復号化を行うユーザのメールアドレスを入力します。今回は自分のメールアドレスのみ追加します。
git secert tell [メールアドレス]
リストに追加されたユーザは以下のコマンドで確認出来ます
git secret whoknows
また、ユーザをリストから削除したい場合は、以下のコマンドでユーザを削除できます。
git secret removeperson [メールアドレス]
次に、暗号化したいファイルをgit secret
に追加します。
また、暗号化したいファイルはgitignore
にも追加する必要があります。
echo "journal.txt" > .gitignore
git secret add journal.txt
次に、先ほど追加したファイルを暗号化します。これにより、拡張子.secret
の暗号化ファイルが生成されます。
git secret hide
この先は通常のgithubリポジトリへのpushを行います。
git add journal.txt.secret
git commit -m "add secret file"
git push
これにより、ファイルを暗号化してリポジトリにpushすることができました。
スクリプト化
上記の流れを毎回やるのは流石に面倒なので、一連の処理をシェルスクリプトにまとめ、ジャーナルの生成からpushまでを最低限の動作で行えるようにします。
まずは、ジャーナルファイルを生成してvimで開くスクリプトを作成します。
#!/bin/zsh
year=$(date +%Y)
month=$(date +%m)
day=$(date +%d)
time=$(date +%H:%M)
day_of_week=$(date +%A)
user=$(whoami)
date_string="$year-$month-$day"
date_week_string="$year-$month-$day $time ($day_of_week)"
header="/* *************************************************** */\n"
header+="/* */\n"
header+="/* $date_week_string */\n"
header+="/* */\n"
header+="/* By: $user */\n"
header+="/* */\n"
header+="/* *************************************************** */\n"
file_path=[リポジトリへのパス]/$year/$month/$date_string.txt
if [ -e "$file_path" ]; then
echo "File $file_path already exists."
vim "$file_path" +9
else
mkdir -p $(dirname "$file_path")
touch "$file_path"
echo "$header" >> "$file_path"
echo "\n" >> "$file_path"
vim "$file_path" +9
fi
全くの白紙にジャーナルの書くのは寂しいので、ファイルヘッダーを作ってみました。
こんな感じのファイルを生成します
ジャーナルを書き終わった後、ジャーナルを暗号化してpushする作業をスクリプト化します。
#!/bin/zsh
year=$(date +%Y)
month=$(date +%m)
day=$(date +%d)
date_string="$year-$month-$day"
journal_file=[リポジトリへのパス]/$year/$month/$date_string.txt
cd "[リポジトリへのパス]"
git secret add "$year/$month/$date_string.txt"
git secret hide
git add "$year/$month/$date_string.txt.secret"
git commit -m "Journal entry for $date_string"
git push
echo "Journal entry for $date_string is committed and pushed."
これにより、ジャーナルを生成してpushする操作を、以下の2つのコマンドで行えるようになりました。
sh create_journal.sh # ジャーナルを生成して書く
sh push_journal.sh # ジャーナルを暗号化してリポジトリにpush
まとめ
ジャーナリングを行うことで自分の目標や課題を意識しやすくなったり、自分を客観視出来るようになるので、是非みなさんにもオススメしたいです。
ちなみに、ジャーナリングは本来「紙に書くこと」が重要らしく、ペンとノートで書くことが推奨されているらしいです。
参考文献
Discussion