Write Code Every Day を1年続けたのでアウトプット

はじめに

昨年の11月10日に以下ブログを書きました。
【和田卓人氏 特別講演】若手エンジニアに送る、”心構え”と”キャリア観”

日本におけるテスト駆動開発伝道師 t-wadaさんこと、和田卓人さんの講演会に行った際のアウトプットです。その中で 毎日コードを書く 「Write Code Every Day」 を紹介されていたことをきっかけに翌11月11日から毎日コードを書いて一年が過ぎました。

↓がGitHubの草。生い茂りってます〜!数日だけ実践できなかったけれど、357日コードを書いた一年!
githubの草
※知らない方向けに:大雑把にいうと、GitHubというWEBサービスにコーディング内容を記録できます。一日ごとにその内容は可視化され、コーディング内容が多いほど濃い緑色で表されます。これを「草」と表現するのが一般的なのです。

良い区切りなので継続した中での学びをまとめておこうと思います。

走り出し(2018/11~2019/3):アプリを自作しよう

GitHubの草からコミット履歴をふりかえり、大きく4つのフェーズに分けました。
この「走り出し」のフェーズは、セミナーに触発された影響でモチベーションが高かった時期です。

当時のプログラミングスキルは今と比較すると全くといって良いほど低かったです。

  • Railsチュートリアル終える
  • Ruby Silver合格
  • パーフェクトRails読了

くらいのもので、RSpecを利用したテスト駆動開発なんぞ雲の上の話の、いわゆるド初級者でした。

加えて、業務はソフトウェア開発ではなくそのマネージメント側でした。
概念さえ理解していれば仕事は円滑に回る状況で、コーディングできることは必須ではなかったです。

しかし、昨年の春〜秋にかけて開発会社に常駐のような形で仕事をさせてもらえたことがきっかけとなり、真剣にソフトウェアを自作したい気持ちが強くなりました。
(これは、ソフトウェア開発の現場を昼夜間近で見ることができた、今後の人生にとっても本当に大きな転機だったと思う。このプロジェクトに関わるすべての人に感謝)

その最中に t-wadaさんの講演を聞き、『ソフトウェアを自作するためにはそれに足るスキルが必要。だが一朝一夕には得られない。毎日継続してコードを書けばたどり着けるのではないか?』と考えに至ったのでした。
しかし、その題材がなかった…書籍の写経ではその範囲を超えることが出来ない感覚が強くあったのです。。

そこで、勝手に社内ブログアプリケーションを作り始めたのでした笑
前半の草が生い茂っているが猛烈なスピードでゼロからアプリ開発していた頃です。結果、いろいろな人を巻き込み2018年3月から全社リリースされています。これは嬉しい反面、驚きでもあります。実際に動く物を作ってしまえば提案が却下されることは早々無い『作ってしまった者勝ち』な事実が学びです笑

同じようにスキルアップの種がなく悩んでいる人にはおすすめの行動です。勝手に作ればそのプロセスがめちゃくちゃ勉強になりますし、その後の提案も通るので、運用フェーズの経験もすることが出来ます。リクルートの有名な社是『自ら機会を創り出し、機会によって自らを変えよ』を意図せずやっていました(汗)

中だるみ(2019/3~2019/5)

しかし、アプリリリース後はポロポロ出てくる要望を解消したもののやることがなくなりました。

いわゆる中だるみです。

ちょうど Ruby Gold を取ろうと一念発起してその勉強でコーディングしていました。
この頃の継続モチベーション低下が一番つらかったように思います。。

Ruby Gold という頑張れば届くくらいの適切なストレッチ目標を見つけられなければ1年続かなかったかもしれない。

再点火(2019/5~2019/9):アプリのリファクタリング

リリースしたのは良いものの、「これは作った張本人である○○が居なくなっても管理できるのか?」と社内で話題になったのがこの頃です。当然というか素晴らしい着眼点だと思いますw

見越してドキュメントをマークダウンで書き連ねていたものの、運用・保守の観点からすると

  • テストコードがない
  • スタイルガイドがない
  • セキュリティをあまり意識していない

などかなり杜撰な状況でした。。

そこで外部リソースもお借りしながらリファクタリングを行ったのがこの時期でした。
(これも、外部の力を借りたいという提案に関わるすべての人に感謝。リファクタリングのプロセスで Rails Way な多くの知見を習得することができた)

この過程で学び、スキルとして身につけたのはこのようなものです。

  • RSpecによるテスト駆動開発
  • rubocopの導入によるスタイル担保
  • CircleCIでrubocop, RSpec, brakemanをコミット時に自動で回す
  • dependabotによるgemのメンテナンス(Rails を 5.1.6→5.2.3→6.0.0→6.0.1 と問題なくアップグレード)
  • チーム開発を意識した可読性の実現
  • MVC以外の層の活用
  • concernを利用した共通化
  • ポリモーフィックの利用

rails stats も以下のように変化し、プロダクト品質も天と地の差が生まれたと思っています。テストコード比だけが全てではないですが、テストコード比1:0(やばいwww)から1:4までテストカバレッジを上げることが出来ました。

・リファクタリング前
before

・リファクタリング後
after

ここでの学びは『外部リソースを借りてドライブをかけよう』です。これらのリファクタリングの動きをこの短期間にやりきるのは独学だけではできなかったことです。外部の力を借りてドライブがかかるのであればそれに越したことは無いと思います。

EMとして振る舞う(2019/9~):考える系のアウトプット

  • リファクタリングの過程から社内にエンジニア2人目ができた
  • 事業部本体の仕事が色々とシフトした
  • キャリアや適性について考える時間が増えた

等々あり、社内では Enginnering Manager を自称して振る舞いはじめたのが今です。

ちょうど過渡期にいると捉えていて、組織論や心理学などソフトウェア開発/ビジネス運営どちらにも不可欠なファクターである「人」について学んでいます。そのためコーディングの時間は減りました。最近のコミットは読書で得た学びやそこから行った発想をマークダウンにメモしていることがほとんどです。

マークダウンやドキュメントなど「コード」ではないものを Write Code Every Day にカウントするか?という議論はありますが、私は行き過ぎた原理主義と解釈しています。

Write Code Every Day とは『目に見えない”成長”を草で可視化して不安を低減させ、小さな目標の積み上げで大きなブレイクスルーが起きるように期待する行為』だと思っているからです。大切なのは、何を書いたか?ではなく、書いた内容により今日も成長できたと自分で腹落ちできるかどうか?という自己完結の世界です。組織論について学び考えることで自身の成長を実感するのであればそれで良いのです。

この活動は今後も続けていきますが、やはりコードを書かなくなることは楽しさの減少なので、またアプリを自作したり他の言語(今触っているのはGo)についてもインプットしていこうと思っています。

さいごに

久しぶりに自分の体験・意見をブログとしてアウトプットすることで、ためになりました。

同じような境遇の方に対しては

  • 漫然としたスキルアップを抱くだけではなく、ヘタでもまずはアプリを作ってしまえば良い
  • 自分や社内ではどうにもならない時になったら外部のプロに助けを求めれば良い

ということでまとめとさせていただきます。

この記事の内容が役に立ったと思いましたら、SNSで記事を共有していただけますと幸いです。