SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

レガシーな環境から転職して、テストコードの必要性をより体感できた話

ご挨拶

はじめまして、2022年7月1日に入社した末吉です。 スマートキャンプでは、BALES CLOUDの開発に携わっております。

今回は入社エントリということで、簡単な経歴から、 スマートキャンプを選んだ理由や入社してみてどうだったかみたいなところを 書いていければと思っております。

また、私が本格的に開発を始められたのは25歳からであり、 スタートが遅かったのでそういった方の参考にもなれれば嬉しいです。

経歴

まずは簡単に現在までの経歴を紹介したいと思います。

テスター時代

まず最初の会社では、客先常駐でテストをやっておりました。 もともと開発がやりたかったのですが、テスト仕様書に従いながらアプリを操作する日々で、 「このままではやばい。。。」と思いながらも転職活動に踏み切れずにいました。 そんな時に当時常駐していたチームの元リーダーから、 「人が足りていないから来ないか?」というお誘いがあり、転職をしました。

2社目ではQAとしてテスト工程の管理をすることになりました。 若干はスキルアップしたのですが、開発には携われず、 やはり開発がやりたいと思い転職を決意しました。

やっと開発に辿り着いた

3社目(前職)でようやく開発に辿り着き、主にSIerに常駐してWebアプリやiOSアプリの開発に携るようになりました。

もっといい設計をしたいもっといいコードを書きたい

常駐していたところでは、受託開発ということもあってか、 「納期が最優先」「既存部分はできるだけ触らない」というような方針でした。 そのため、「ここを少し触るだけでもっと良くなる」といった状況でも、 「妥協した既存を触らない方法」を取らざるを得ませんでした。 次第に、もっといいものを作りたいという思いが強くなっていきました。

スマートキャンプへ転職

「これらの不満を解消するのには自社開発へ行くのが最善」だと思っていたことと、 「年齢を考えると自社開発へ行くなら今しかない」という思いから転職を決意、 スマートキャンプに入社しました。

なせスマートキャンプを選んだか

当時、転職活動を始めたばかりで「そんなに早く決まらないだろう」と思っていたことや、 「インサイドセールス」という言葉を知らなかったこともあり、 最初は練習がてらのような軽い気持ちで面談を受けました。 いざ受けてみると下記などから、面接が進むごとに「入社したい!」と思うようになりました。

いいものを作れそう

経歴でも紹介しましたとおり、前職ではもっと品質にこだわった開発をやりたいと思っていました。 そんな中、面接で「納期のために品質を犠牲にしたりすることはない」という方針を聞き、 ここであれば品質を大切にした開発ができそうであると感じました。

またPdMの「エンジニアの意見を大切にしている」という考えや 「ドメインについての経験があり、知識が豊富」という点も非常に魅力的でした。 「エンジニアの意見を大切にしている」点からは、 「"仕様のせいでコードが複雑になり内部品質が悪化する"といったことがない」と、 「PdMがドメインに詳しい」点からは、 「ユーザーが本当に必要としているものを作れる」と感じたためです。

人柄が良さそう

スマートキャンプの面接では、会ったすべての方の人柄が非常に良く魅力的でした。 面接の会話での雰囲気は当然のことながら、 労働環境の話から子供の話題に発展し会話したことからも、人柄の良さや働きやすさを感じました。

最適な労働環境

私は現在子供が2人いるのですが、夫婦共働きしております。 そのため「フレックス」かつ「リモート」という環境は、最適な労働環境でした。

「リモート」という環境については、嬉しい反面、 「馴染むのに少し時間がかかるかも」という懸念も少しありました。 ただ実際には、入社直後は1on1が多く設定されていたり、プロダクト横断でのMTGがあったりして、 チームにはすぐ馴染めました。また、特に不便に感じるようなこともありませんでした。

ちなみにこれは入社後に始まったものですが、 BALES CLOUDの開発チームではドキュメント文化を推進しており、 さまざまなものを非同期化しようとしております。 現在非同期化できているのは朝会のみですが、朝会だけでも細切れの作業が減り効率が上がっております。 また、次第に相談などの付随したものもドキュメント化および非同期化されていき、 これによってMTG時間の短縮や、Slackによるコミュニケーションコストの増加が低減したりといった効果もありました。 課題は色々ありますが、非同期化がうまく進むと、 作業効率が向上したり働き方もさらに融通が効くようになると思われるため、 ドキュメント文化がさらに進んでいけば嬉しいなと思っております。

入社してみて

ノビノビ快適

どんなに良く見える会社でも、本当に良いのか?自分に合うのか?は 入ってみないと分からないと思っています。 なので、少し期待が外れる程度は仕方ないと思って転職したのですが、 驚くほど期待外れの部分がありませんでした。 すごくノビノビできていて現在すごく快適です。

今までのやっていた開発がいかに非効率か痛感した

今まで携わっていた開発では、テストをExcelで書いていたり、 テストコードを書いていてもが老朽化していたりしました。 入社して3ヶ月経過しましたが、これらが如何に非効率でかつ品質を下げるものであるかを実感しました。

テストコードってめちゃくちゃいい

入社してから自分の中で一番良いと思っている変化がこれです。

前職で携わっていた開発でもテストコードを書くことはありました。 ただ納期を優先するあまり、「テストコードを書く時間がないから手動でテストする」といったことが多くありました。 一度これをやってしまうと、終わりの始まりです。 次の開発ではテストコードのメンテナンスから始めなければなりませんが、 前回の開発で時間がなかったのにも関わらず、今回の開発でメンテナンス分の時間が余るわけがありません。 その結果、テストコードを書かなくなり、テストコードが老朽化していき、使い物にならなくなってしまいます。 こういった経験から、入社前までは、テストコードがいいものだとは認識しつつも、 「メンテナンスが大変」という意識も少なからずありました。

BALES CLOUDでは、工数を見積もるときはテストコードも含めた工数を出します。 また、時間がないからといってテストコードを省くこともありません。 これによりテストコードの鮮度を保つことができており、以下のようなテストコードの恩恵を受けることができております。

恩恵の1つ目は、不具合の発生率を低下させられていることです。 私がコーディングしているときに、「修正してテストコードを実行したら、想定外の箇所でエラーが出て助かった」ということがありました。 テストコードがなければ、リリース後に不具合として上がってきたであろうものもあったかと思います。 リリース後の不具合となれば、不具合報告をヒアリングする工数であったり、調査する工数であったりと、 実装時に気付けていたら発生しなかった工数が余分に発生します。 もしこういったことが続いてしまうと、次第に機能開発に割く時間が減り、開発スピードも下がります。

恩恵の2つ目は、リファクタリングを積極的に行なうことができていることです。 私がチームにJoinしてから今までの短い期間でも、 軽微なものや少し大きめなものまで、リファクタリングは何度も行われております。 もしリファクタリングがされていなかったら、構造が複雑化して影響箇所が読みづらかったり、 単純に実装しづらかったりして、開発スピードも品質ももっと低下していると思います。

こういった体感ができたおかげで、私のテストコードに対してのネガティブな意識はすべて吹き飛びました。 結局はメンテナンスが大変というのは、目先の納期だけを優先するから大変になるのであって、 継続していれば負担になるものではないと今では考えます。 また、「テストコードがあるからこそ内部品質が維持でき、開発スピードを維持できる」という考えのもと、 テストコードはプロダクトを成長させていくための歯車であり、プロダクトを開発するうえで必須とも考えております。

前職との違い

色々と違いますが、やはり一番の違いは品質の考え方です。 繰り返しになってしまいますが、前職では納期優先で品質がおざなりになる場面が多々ありました。 スマートキャンプでは、「開発スピードと品質はトレードオフではなく、品質を上げることで開発スピードが上がる」 という考え方が浸透しているので、品質がおざなりになることがありません。

入社後してたこと

入社してからは、「システム構成理解」「環境構築」から始まり、 「軽微な機能追加」を経て、本格的なタスクに入るようになりました。 一番関わっているのはメール配信機能周りで、ライブラリとよく格闘しています。

まとめ

ここまで読んでくださり、本当にありがとうございました! 色々と書いてしまって読みづらかったかもしれませんが、 レガシーな会社で開発をしていた経験があったからこそ、 スマートキャンプに入って色々と気づくことができたり、 本当のありがたみを感じられたと思っております。

同じような境遇に悩まされている方など、誰かしらの参考に少しでもなれたら嬉しく思います!