GithubのContributionsを使ってアウトプットを150日続ける

というわけで、GithubのContributionsを利用して、
毎日何かしらのアウトプットを150日続けるということをやりました。

何故こんな事をしたのか

私はまじめ系クズな上に意志薄弱なので、やった方がいいようなことでも、
いろんな理由をつけてやらないのがいつものことでした。

特にインプットに重きを置く性質のため、いろいろなことを調べたりしますが、
アウトプットは何かしらの理由をつけて避けてしまう傾向があります。
実際、このブログにしたのは2013年9月ですが、そこから半年で1エントリのみ、
その後の3ヶ月も月に1回程度とほとんど書いてないに等しいです。

別にそのままでも問題は無かったのですが、せっかく色々インプットしているのに、
定着させないのはもったいないと思い、継続的にアウトプットする方法を模索しました。

継続的なアウトプットをどう実現するか

毎日継続的アウトプットを頑張る!と奮起しても、それが継続しないのが今回の問題です。
そのため、頑張る/頑張らないといった意思に関係なく続けられる、
もしくは歯磨きをせずに寝ようとした時のように、
継続してアウトプットしないと落ち着かないといった状態を目指します。

幸いにも、私の性格には続けたことを辞めるのを凄くもったいなく感じるというものがありました。
大学時代には、一日一冊づつ本を読んでいて、たまたま数十日続けたところで辞めるのがもったいなくなり、
結局1000日ぐらい毎日本を読み続ける、みたいな事をするぐらいには、
ある程度続いたものを途中で辞めるのを嫌う性格です。

この性質を利用し、最初のアウトプットを頑張って続けている状態から、
低いコストで継続してアウトプットを続けられれば、以降はそれを途中でやめるのがもったいなくなり、
継続的なアウトプットが出来るのではないか?と考えました。

おそらくは数日かけてじっくり練ったアウトプットよりかは質が落ちますが、
ほとんど出ない質のいいアウトプットより、継続的に低い質のアウトプットをした方が、
私にとっては良い影響になると考えました。

ルール設定

数日程度なら意思の力で何とかなるため、それを低コストで継続的に行いやすく、
かつ続けるうちに辞めるのが勿体ないようなルール設定を作ります。

1. アウトプットは外部に公開

自分だけにしか見えないところにアウトプットすると、
結局なんだかんだでやらない未来が容易に想像できるため、必ず外部公開します。
今回みたいに定期的に続けてますエントリを書くことで、万が一検証されたら嘘がばれる…という力が働き、
サボったのをごまかすことがなくなると考えました。
(検証されるかは重要ではなく、検証される可能性があるだけでサボり抑止には十分)

2. 1日1コミット以上Githubにpush

毎日続けた事を記録するのはとてもとても面倒です。
ですが、Githubなら最初の画像のように、コミットがあった場合にそれを可視化して表示してくれます。
そのため、アウトプットをコミットすることでGithubにpushするだけで良くなり、
前述の外部公開するという条件も同時に満たせるためかなり敷居が下がります。
特に、プログラミング関係の作業がそのまま記録できたり、ブログをOctopressにしているため、
新しいエントリを書くのもコミットになっているという所も大きいです。

3. コミットを溜めるのは可

風邪を引いたり、仕事が忙しいときなどはどうしても何も出来ない場合があります。
そんな場合に、事前にブログの記事やコミット等を溜めておき、当日は公開するだけというのもありとしました。
今回の最大の目的は継続的なアウトプットであり、
毎日アウトプットするのは私の性格を利用して継続的アウトプットを成し遂げるための手段に過ぎません。

そのため、継続的なアウトプットが実現するならば、事前にそれを溜めておくのは良しとしました。
特にこの方法は途中で辞めるのがもったいないと感じるという所を利用して、継続的アウトプットを実現しているため、
一度でもそれが崩れると挽回は不可能であるためです。

また、私はゲームでもHPやアイテム、リソースを十分すぎるほどため込むのが好きな正確なため、
何日分の溜めがあると可視化されると、十分な量の溜めを確保しようと動くだろうという予想もしていました。
gitだと別の日のコミットも、git rebase –ignore-dateでそのときのコミットに書き換えられるため、
溜めを作りやすい状態でもあります。

4. 意味のあるコミットだけカウント

Githubだとpull-requestをマージするだけで1コミットが作られるため、ボタンを押すだけで1日分稼げてしまいます。
ですが、これは当初の継続的なアウトプットには繋がらないため、
最低限意味のあるコミットを行うのをルールとしました。

ただし、今回の目的は定期的なアウトプットであるため、アウトプットの質自体は考慮せず、
どんなに小さくてもバグ修正や、関数単位では出来ているものは1コミットとして考えるようにしました。
無意味なコミットは禁止するが、あまり価値のないコミットでも許可するといった具合です。

150日続けた結果

利点

誰かが「何かをやめる最良の方法は、別の何かを始めることだ」と言っていましたが、まさにそれを感じでいます。
一日の時間は限られているため、この継続的にアウトプットすることより優先度が低いものは後回しになり、
惰性で続けていただけの事は自然と後回し、辞めていきました。
どうしても続けたいような事の場合、その作業にかかる時間を削ろうと、
作業の補助をするプログラムを作ったりするようにもなりました。

また、溜めはあればあるほど安心できるため、暇なときはすぐに何かまとめられるネタが無いか、
新しいパッケージにするようなことが無いかを考えるようになり、いろいろな技術などに手を出すようになりました。
特に、何となく理解しているが検証していないことに対して検証するようになり、
正確な知識を作れている…きがします。

問題点

外に出せない作業をやらなくなる

部屋の片付けや不要なものの整理、サイトのクローリングなど、公開出来ない作業をしにくくなります。
前者に関しては生活に支障がでるとさすがにやらざるを得ないため問題がありませんが、
後者は毎日やってるのを自動化したら楽になるが、公開できないので手をつけ辛いといった問題があります。

これに関しては溜めを作ることである程度時間のコントロールが可能になり、
「自動化すれば日々の作業量が減って毎日楽になるし、溜めを数日分使ってでもやる」
という事が出来るようになったため、だいぶ解決しました。

細かく終わる作業ばかり選ぶようになる

数日かけてやる作業や、まとめにくい作業(コードリーディングとか)が出来なくなってしまいます。
これは、時間をかけてもせいぜい1コミット程度にしかならず、
細かい作業でコミット量を増やした方が溜をたくさん作れるため、
このルール下ではそちらの方が合理的な選択になってしまうのが原因です。

実際、アドベントカレンダーで書いたラブライブ関連の記事は2ヶ月ぐらい少しずつ作っていましたが、
最終的には3日分のコミットにしかなっていません。
作業を選べばおそらく同じ時間で10倍ぐらいのコミットが稼げてしまうため、費用対効果がかなり薄いです。

今回の目的は定期的にアウトプットすることであり、たくさんの小粒のコミットを生み出すこと自体は問題ありません。
ですが、同じ状態を維持できるなら、アウトプットの質は上げたほうが望ましいです。
一応溜めがあれば、それを消費して数日かかる長い作業も出来ますが、
費用対効果が悪いために手を出しにくいという問題は解決していません。
ここについては今後、ブログに途中作業を書くのは良しとするなどのルールを加えて解決していこうかと思います。

まとめ

世の中にはこんな面倒な決め事をしなくても、価値のある行動を延々と続けられる凄い人もいますが、
私みたいなまじめ系クズ+意志薄弱でも、その性格を分析して適切なルールを敷いて行動することで、
少なくとも三日坊主にならずに物事を続けられるぐらいには持って行くことが出来ます。

このルールは、継続している状態を辞めてしまうのは勿体ないという、
私の性格や思考に完全に合うように作っているため、他の人の場合は全く違うルールが必要です。

そのため、はてなブックマークのブックマーク数が増えることや、テキストファイルのバイト数が増えること、
自分の友人の反応など、そういったことがいいと感じる人は、
それを継続のベースにしたルールを作る必要があります。

ルールの作成は大変ですが、その人にあったルールを作ることで、
同じように何かを継続したり、もっと凄いことも出来るようになる…と思います。

ただ、私の感覚として、できる限り頑張るといった意思の力に頼る事は避けた方がいいと思います。
やる気は容易に無くなるため、やる気が無い状態でもいかに継続するかについては、
ルールに上手く含めておいた方がいいと思います。