はじめまして、サーバーサイド開発部の梶原です。 某都市銀行の営業職からやってきました新人エンジニアです。
この度タスク完了APIをリリースしたので、 その概要とそこから得たものやら何やらをお伝えしたいと思い、この記事を書きました。
自己紹介
改めまして、こんにちは。サーバーサイド開発部の梶原です。2018年11月入社です。
前職は金融系の営業職をやっておりまして、それまで社会人としてのエンジニア経験はありません。
つまり弊社がエンジニアキャリア1社目というわけです。そんな背景も踏まえながらご覧いただければと思います。
タスク完了APIとは?
Chatworkは開発者向けAPIを提供しています。
ユーザーはこちらを使って、Chatworkに関する様々な操作を行えるわけですね、便利です。
その中に異色な存在が1つおりました。そう、タスク作成APIです。
ユーザーはこのAPIを通じてタスクを作成することができるようになりました。タスクを作成するための入り口が提供されていることはとてもよいことです。しかしながら、ひとつ悲しい事実が存在します。
APIを通じてタスクを作成することはできますが、完了させることはできないのです。
というわけで、今回はそんなタスクたちをAPI経由で完了/未完了にできるようにタスク完了APIを作成しました。
上の画像は作成後の私の喜びを示したものです。 そんな私がタスク完了API実装を通して学んだことを記したいと思います。
学んだこと
1. 自動テストの重要性
言わずもがな、ですね。単体テストとE2Eテストによる自動テストです。
今回新人の私がリリース後に安眠できたのは単体テストと結合テストのおかげな部分がかなりあると思います。
想像に難くはないと思いますが、Chatworkのコードベースは巨大です。
そんな巨大な既存のコードベースに手を加えることは私にとってなかなかの重圧でした。
ここで初めてしっかりと自動テストに向き合うことになります。
これまで、テストは大事だよ、ということを本で読んだりや話では聞いていても「まあないよりあったほうが安心なんだろうな」くらいに受け止めていました。
しかし、今回のように修正対象のファイルが他の部分とどう関わっているか全て把握できていないような大きいコードを相手にするときは、テストがないとファイルに1行追加することすら安心して行うことができません。
私が特にテストの有用性に気づいたのは、コードレビューを受けた後の修正時です。
自動テストを行う仕組みがあるおかげで、指摘事項について修正した後の動作確認を正確かつ瞬時に実行することができます。これによって誤実装にもはやめに気づけることができるようになったので、作業の工数が大幅に短くなりました。
また、自動テストは精神衛生上においても私にとてもいい影響を与えてくれました。 「この変更をほんとにしていいものか・・・」といったことに関する検証を瞬時に行うことができるようになったことにより思い切ってコードを書けるようになったためです。
2. 既存のコードとの距離感 (つかずはなれず)
これもこれまでの経験では学ぶことができていなかった点だと思います。先ほど記載したように、Chatworkのコードベースは巨大です。もちろん技術的負債を抱えている部分もあります。
最初のほうは、既存のコードに合わせた形に書かないのは悪だと思って実装していました。でも今思うとその考えが技術的負債を増やしていく原因の一つなのかなと思います。
メンターや部署の方とのペアプロやレビューを通して、今までの書き方とは異なる書き方でも保守性をあげることができるのであればむしろ推奨されるのだということを実感しました。
新しい試みをすることは保守性を下げることとは限らないということですね。あくまで基本的なこと(アノテーション、ドキュメンテーションなど)は確実に行う、ということは前提として。
もちろん職場の心理的安全性に依存するところはあると思いますが、根拠があるリファクタなら取り入れてもらえるということがわかったのは大きな収穫でした。ひとまず心配だったらこまめに部署の方に相談する、というのがなによりも確実ですね。
まとめ
今回は自己紹介も兼ねて、ということだったので個人的な学びに関する話に話がそれてしまいましたが、
ぜひ!みなさんもタスク完了APIを一度使ってみてください。