約6ヶ月毎日コミットがんばってみた話

約半年ほど、毎日1コミットしようと決めてから、少し失敗もありつつもやりきれました、という話です。

# きっかけ

直接のきっかけはこちらのスライド、[Write Code Every Day](https://speakerdeck.com/twada/write-code-every-day)に触発されたからです。

このスライドを見て、「t-wadaさんですらチャレンジだったんだ」と衝撃を受け（当たり前にやっていそうだと思っていた）、それなら自分にとってもよい機会になりそう、というのと当時手を動かす機会をすっかり失っていたので手慰みにもなるだろう、といった理由でやってみることにしました。

あとはgithubの芝生がすごくて、一回くらいやってみようかなと思ったのもあります。

ただ、はじめは何を得たいか、そこまで深く目的は置かず、見切り発車的にチャレンジをはじめてみました。

# ルール

何もなくやっていたわけではなく、いくつかルールを設定していました。とはいえ、かなりシンプルなものでもあります。

1. 毎日1コミット以上すること
2. 意味のあるコードを書くこと（ドキュメントやコメントの更新だけはノーカン）

そもそも、「続けること」を目標に始めたので、高い目標を置いてやめてしまうような状況を避けることを一番の優先事項としました。つまり、まずは毎日1コミット以上すればOKとしました。

2つ目なのですが、さきほどのスライドに「意味のあるコードを書く」とあり、続ける上で効果を得るためにこれだけは守ったほうがよいと思い実践していました。

![スクリーンショット 2023-05-07 10.29.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183073/67cb7d48-d0ca-7c09-c64d-afd7300cf0ab.png)

また、自分も書いたものはすべてgithubに置いて見える成果物としていました。これはOSS化したほうがよいといった高尚なものではなく、たんにやったことの可視化程度です。

毎日続けられて、その上でなにかを得ようとする際にきつすぎず、それでいてちょうど良い縛りだと思ったのでほとんどそのまま参考にしていました。

# どうなったか

冒頭のキャプチャの通り、だいたい半年コミット達成した（と言いたい）。

![スクリーンショット 2023-05-07 10.30.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183073/672269be-c165-4896-f602-3f898665d724.png)

間に何日か抜けているのは

- ワクチン接種後の副作用でそもそも起きているのすらしんどかった時期がある
- どうしてもネタを絞り出せなかった
- まとまった区切りまでいったけどコミット忘れてた（笑）

でした。なので正確には達成したとは言い切れないのですが…

3つめは純粋に忘れてただけなので悔しいですね。

とはいえ、旅行中も少しずつ進められていたし、トータルで見ると多くのものを得られたので良しとします（笑）

その後、仕事をどうしても優先したい時期が2週間ほど続いたので、まとまった期間トライできたということで一度チャレンジを打ち切ることにしました。

なお、現在は時間取っても調整できるようになったので再開してみています（再開というかもう習慣のようなものなのですが…）。

# 得られたもの

はじめてから2ヶ月くらいは変化感に自覚的ではなかったものの、最近変化を感じるようになりました。

## 成果物（コード類）

人生の中でもこれでもかというくらいしっかりコード書いた時期だったと思います。業務でコードを書くのと自分のものを自分でメンテするのだと方向性が違っていて、制約がかなり小さい中でまとまったコードを書けていました。

このチャレンジの間に転職を挟んでいるのもあり、転職先での技術スタックキャッチアップは大きな課題でした。そういった事情もあり、特にフロントエンド/UIコンポーネントは実務経験がほぼゼロだったため、よくテーマにしていました。

### フロントエンド

Vue.js Nuxt.jsのコードを中心に5つほどリポジトリを作り、それぞれ80 - 100コミットくらいずつ更新していました。内容はばらつきがあって、

- 普通のメモ帳アプリ
- テーマを決めて個人開発
- リアクティブの実装

などなど、宣言的UIを使ったUI作りをやっていました。業務ではVue.js、Nuxt.jsを使っているのでフレームワークの使いこなしを中心に、まずは人並みにアウトプットできるようコーディングしていました。

- [https://github.com/simonNozaki/artproducesmana](https://github.com/simonNozaki/artproducesmana)
- [https://github.com/simonNozaki/capacidor](https://github.com/simonNozaki/capacidor)
- [https://github.com/simonNozaki/miactive](https://github.com/simonNozaki/miactive)

転職先にフロントエンド周りを色々教えてくださる方がいて、そのおかげもありスムーズにキャッチアップが進みました。

### バックエンド

前述のとおり、ちょうど転職と軌を一にして技術キャッチアップの必要性が高まった時期でした。というわけで、バックエンドはRailsで、RubyとRailsが手に馴染むレベルにはいくつか書いていました。

Railsチュートリアルちょっと流したくらいで、人に見せるほどのアウトプットはなかったのですが！

### システムプログラミング

以前から興味のあったプログラミング言語作りもテーマにしていました。当時、いろいろな課題感から、自分が仕事で使うならこういう仕様になっていてほしいというのがぼんやりと、けどはっきりとした感覚としてあって、いつか作ってみたかったものでした。

リアルタイムではなかったものの、[WEB+DB PRESS Vol.125](https://amzn.asia/d/buaPOVz)が作って学ぶプログラミング言語の回で、興味のあった内容なのでトレースしつつ拡張するといったことをやっていました。

- [https://github.com/simonNozaki/koy](https://github.com/simonNozaki/koy)

その他、新しい言語を学ぶときにLispインタプリタを書いてみているというのをTwitterで見かけ（その少し前にZig試されているのを見た）、今後自分もサンプル作るならそれだと思ったので、その参考になるものをRubyやClojureで書くなどしていました。

- [https://github.com/simonNozaki/lisby](https://github.com/simonNozaki/lisby)
- [https://github.com/simonNozaki/clop](https://github.com/simonNozaki/clop)

システムプログラミングから得られたものはとても多いのですが、それを振り返っていると紙幅が半端じゃなくなってしまうのでここでは割愛です。勉強にもなったし、できてから遊べて楽しいですよね。

## スキル、習慣

技術的な側面はもちろん、マインド面でも少し変化が出てきたように思います。

### もはやエディタ開かないと気持ち悪い

まず思いつくものはこれです。エディタを開かないと気持ち悪く感じる体質になりつつあります。

エディタを開いて静かに考えていると、ゾーンのような没頭できる時間があると思います。その傾向がより顕著になった感覚で、落ち着いて考える時間から安心感・充実感を得られるようになりました。その時間は結構大事にしていて、これからも継続していきたい。

### できることが増えた

何回か言及しているとおり、いくつかの理由から技術的なキャッチアップを迫られていたのですが、お題を決めて継続的にコードを書いていたので純粋に扱える技術の幅は広がりました。

仕事で書くようになったのもあって、特にフロントエンドはほぼゼロスタートでしたが今はとりあえずなんとか仕事できるくらいにはなったかなと…まだまだなのは事実なんですが、少なくとも抵抗なく業務にあたったり周辺知識に触れられるようになったとは思います。

### 明らかにコーディングが早くなった

早ければいいわけではないし、毎日書いていることだけが寄与しているわけではないけど、考えてからコードにするまでが明らかに早くなったと思います。

それまでは、このへんがうーん、みたく少し考えてから書いていたけど考えながら書いてみてもあまりおかしなアウトプットにはならなくなった気がします（どっちかというと仕事の影響が大きいかもしれない…）。

ただ、軽く書いて試す抵抗が小さくなったので、アイデアを試してみたくなってから試して検証してみるサイクルが短く、かつ楽にはなりました。

## その他

### 達成感

こうやって振り返ってみると、まとまったコードが手元に残るのは達成感があります。githubに置いていたので、コミット履歴とともにアウトプットが可視化され、結構ちゃんとコーディングしてたんだなあなんて思いました。

本当は1年くらいがんばって継続してみても良かったかもと思う反面、ほぼ習慣化してもいるので嫌でも数ヶ月は継続する状態でもあります。

### お題が難しい

自分は、毎日コードを書くと決めて取り組むのは全然苦にならない一方で、お題決めにちょいちょい苦戦していました。

この期間はライブラリやフレームワークといった役立ちそうなものに興味がなかったのもあり、ネタを決めるのに難航していました。jQueryの作者も、jQueryという壮大なアジェンダがあったので、継続してコミットする必要性が高かったんだと推測していますが、自分の場合は続けることをテーマにはじめたのではて…？となることもあり…

今でもネタに困ることもありますが、100 - 150コミットくらいは必要そうな、一定入り組んだテーマを常に仕入れたりアンテナ貼っておく必要はあるかなと思います。

平日は仕事やなんかでそこまで考える時間も取れなかったりするので、ネタ決めや情報収集は土日にやるようにしていました。

### 意味のある単位で毎日コミットするには工夫がいる

まとまりの大きい変更を加えたいがまとまった時間が取れないとか、書く前に時間とって考えたいとか、そういう状況もままあって、毎日毎日いいコードを置けたかというとそんなことはなかったです。

そういうときは、正直本質的ではないなという気もしつつ、毎日コミットすることを優先して作業の区切りでwipにしていました。なので、次の日に考え直してまるっと書き換えたり消したりといったこともやっていました。

このへんが業務と違うところで、普通は意味のある単位でコミットを置いていくのでコミットすることを目的とした作業単位を意識する必要が出てきます。

最近は少し慣れてきて、まとまりが大きそうなら後回しにするとか、そもそも形にする速度が上がったのもあってwipにするケース自体が減りました。やっていくうちに慣れるので、はじめのほうは雑にでもコミットすることを優先してもいいんじゃないかとは思います。

# おわりに

深く考えずにやってみようかな程度ではじめたチャレンジで、特になにかを得られると期待していたわけではないけど、自分の作ったもの・書いたものが残っていくのがたのしかったです。

収益を生むほどブログが続くブロガーは、全体の中でも非常に少ないそうですが、プログラミングも同じで興味がないとなかなか続けるのが難しいとは感じます。自分は、なにかしらテーマを決めるだけで飽きずに続けられたのですが、そうではない場合、もっといろいろな工夫が必要そうではあります。

## 今後

毎日なにかを残すこと自体は問題がなくなりつつあるので、少し縛りをキツめにしてみるチャレンジ中です。

「イケてないコード出してくる人は時間を与えてもいいものを出せない」という話を聞いたことがあり、最近自分もたしかになと思ったので「一回で人に見せられるものを書く」ようにしています。この話は、昔スポーツをしていたときに聞いた「練習は本番のように」と似通っていて、その観点でも雑に残すのはやめようとしてみています。

で、まだまだ試行錯誤中です。限られた時間でまともな成果物を生み出していきたい。