pockestrap

Programmer's memo

毎日日記を書く技術

最近、 https://commits.hatenablog.com で毎日日記を書いている。 この毎日というのは一日も欠かさずという意味で、実際日記を書き始めた2019-12-17から一日も欠かさずに続けている。1

これを続けるために2つ工夫していることがあるので紹介したい。1つは仕組み化で、もう1つは日記への向き合い方である。

仕組み化

この日記を書くために必要なことは徹底的に仕組み化している。 なぜならば、そうしないとめんどくさくなってすぐ書くのをやめてしまうのが目に見えているからだ。

まず、記事をVimで書けるようにした。 これによってはてなブログにアクセスすることなく記事を書けるようになった。 コミットログを見ると、2019-12-20(つまりブログを書き始めてから3日目)にはVimから記事を書くことができるようになっていた。

そして、記事の公開とツイートを完全に自動化した。 Vimから記事を書けるようにしてからも、しばらくは手で翌朝に記事を公開して、手でその記事をツイートしていたのだけど、それを自動化した。 これは今日(2020-01-18)からなので、記事を書き始めてから1ヶ月経ってからの自動化になった。記事の公開は後述するhatenikki publishコマンドを実行するだけだったので(忘れなければ)簡単だったのが大きい。

この仕組み化がなかったらすぐに日記は途絶えていたと思う。

仕組み化には hatenikki gem と hatenikki.vim の2つのプログラムが関わっているので、それぞれを簡単に紹介したい。

hatenikki gem

rubygems.org

github.com

hatenikki gemはこの仕組み化を行うために作成したgemである。 今回は「自分が毎日記事を書けるようにする」というところにフォーカスするために、提供する機能を自分が必要なもの最低限に絞って、設定もなにもできないようにした。 そのため他の人がそのまま使うにはむいていないかもしれない。2

このgemによってインストールされるhatenikkiコマンドは、load, save, publishの3つのサブコマンドを提供する。 load, saveサブコマンドはそれぞれその日の日記をはてなブログから読み込み、下書きとして保存する。日記の本文は標準入出力を使ってやり取りされる。 そしてpublishサブコマンドは前日までの日記で下書きになっているものがあればそれを公開する。

コードを単純にするため、hatenikkiでは「当日の日記」に触る機能しか提供していない。つまり、前日の日記を編集することはできない。

また、どの記事が当日の日記かを判定するために記事のタイトルを使用している。 記事のタイトルは設定できず、必ずYYYY-MM-DDになるようにした。

ちなみに、"当日"の判定には4時間前の時刻を使っている。これは「午前4時までは前日の日付になる」ことを意味している。 自分が午前3時ぐらいまでは起きていることも多く、4時にはだいたい寝ているのでこの指定になった。

毎日午前10時にRaspberry Piからhatenikki publishコマンドを叩くことで記事の公開を自動化している。 またはてなブログRSSと自分のTwitterアカウントをIFTTTでつなげることで、公開した記事を自動でツイートするようにしている。

なおこのgemはhatenablog gemを使ってはてなブログAPIを叩いている。 このgemのおかげでだいぶ楽をできたので感謝を示したい。

hatenikki.vim

github.com

hatenikki.vimは上述のhatenikki gemをVimから使うためのVimプラグインである。

このVimプラグインを使うと、当日のブログ記事をあたかもファイルのように読み書きできる。

私は<Space>nに当日の記事を開くキーマップを割り当てている。

nnoremap <Space>n :tabe hatenikki://today<CR>

つまり、なにか書きたいことがあったら<Space>nを押して記事を開き、適当に追記して:wするだけで下書きが更新されるようになっている。

hatenikki.vimは標準入出力を通してhatenikki gemとやり取りするだけのプログラムなので、とてもコードは少ない。 これは他のエディタでも同様のプラグインを作りやすいであろうことを意味する(おそらく)。

日記への向き合い方

もう1つ工夫していることは日記への向き合い方である。

この日記はそれほど人に読んでもらいたいわけでもないので、人が読みやすいように文章を書くことはあまり考えていない。3また、文章の装飾もなるべくしていない。 最低限の労力で情報を書くことだけに注力している。

あとで自分が読み返した時に何をやっていたのか思い出せるようにはしておきたいので、そう分かるようなコメントとリンクを書くようにしている。

とはいえ日記を書いているモチベーションが曖昧なので、「とりあえず雑に書いて続けられればよいかな」ぐらいに思っている。

最後に

日記を書くために使っているプログラムについて紹介した。 興味あれば紹介したプログラムを読んだり使ったりしてみてほしい。


  1. 記事を公開するのを忘れていて投稿日が翌日にずれてしまって一日空いているように見える日はある。

  2. 機能追加のPRを受け付けないわけではないけど、自分では満足しているので自分から設定などを足すつもりはない。

  3. とはいえ記事を読んでコメントをもらえるのはとても嬉しい。範囲指定はてなスターも好き