※トリスタinsideに投稿された記事の再掲載です。
こんにちは。バックエンド開発グループのシゲタです。 普段はRailsを使って、ニコニコ漫画バックエンド(以下、バックエンド)のリプレイス、新規機能の開発に携わっています。
昨年に中途入社して早くも約半年が経ちました。ちょうどいい機会なので、今回はトリスタで半年働いて得られた技術スタックについて、振り返りをしてみようと思います。
また、私は前職でSEをしていましたが、Webサービスの開発経験は少ないです。私的振り返りという形ではありますが、似た経歴をお持ちの方には、「(ほぼ) Web未経験のエンジニアがトリスタで半年働くとこういった経験ができる」という参考にもなれば幸いです。
経験した技術
以下は私がこの半年に業務で経験した技術スタックになります。
- 言語・フレームワーク
- Ruby
- Ruby on Rails
- 開発ツール
- Git
- VSCode / RubyMine
- インフラ関連
- AWS
- Terraform
- CircleCI
- Docker
- DB
- 開発スタイル
- モブプロ
- スクラム開発
- テスト駆動開発
- オブジェクト指向プログラミング
細かく上げるともう少しあるのですが、ざっとこんなところでしょうか。
それでは、それぞれについて簡単に振り返っていきます。
言語・フレームワーク
Ruby / Ruby on Rails
Railsでコードを書くことが、この半年における私のメインタスクです。 Railsチュートリアルから始めて、ある程度仕様が固まっていればという前置きがつきますが、実装とPRのレビューには概ね問題なく対応できるようになったと思います。1
開発ツール
Git
前職ではバージョン管理をSVNで行っていたので、業務でGitを使うのは初めてになります。自在に操作できるという訳にはいきませんが、rebase -i
で履歴を綺麗にしてからリモートにプッシュするくらいには小慣れてきました。2
分散型バージョン管理システムの概念は慣れないと難しくもあるのですが、チーム開発においてはもはや不可欠なツールなので、今後もコツコツと手を動かして理解を深めていくことにします。
VSCode / RubyMine
基本的にはエディタや統合環境に何を使うかはチーム、個人の裁量に任されています。
私は業務では見出しの2つを使い分けています。モブプロをする際にはLive Shareでコードを共同編集したいので、VSCodeを使っています。また、それ以外の個人タスクでRailsを書く際には、コードジャンプやデバッグのしやすさからRubyMineを使っています。
インフラ関連
AWS
バックエンド開発グループでは週に2回ほど、雑談会の時間を設けているのですが、AWS関連のトピックはよく話題として上がってきます。そのため、自分も最低限は知っておかねばということで、コアタイム外でコツコツと学習していました。
最近ではTerraform上からVPCやELBのようなリソース構築も経験できてるので、半年前までインフラ関連の知識が殆どなかったことを考えれば、できることは増えつつあると思います。
Terraform
IaCというインフラをコードで管理するためのミドルウェアです。今回はTerraform上でAWSリソースの構築を行いました。Terraformに対しては何故か難しそうな印象がありましたが、意外と文法やルールは簡潔で、現状も書くだけであれば大きく困ることはありません。
ただ、Terraformそれ自体は、対象のリソースに習熟していることが前提の技術です。バックエンドではインフラにAWSを利用しているので、AWSやその他の関連分野については引き続き知見を深めていく必要があると思っています。
CircleCI
CI/CDのある環境で開発をすることも初めてになります。ワークフローを構築すれば、変更をリモートにプッシュするだけでテストを走らせる、masterにマージされたら指定の環境にデプロイする、なんてことを自動化できます。バックエンドでも上記のようなワークフローを構築しており、生産性向上に一役買っています。
Docker
Dockerは開発環境の構築に利用しています。現状、コンテナ is 何?
からは脱却して、現状はDockerfileを書いて検証用に環境を立てるくらいのことはできるようになりました。
余談ですが、Dockerについてあれこれ振り返っているときに、数年前に仕事でJavaの環境構築に数日費やしたことを思い出しました。そのときは「この作業どうにかならないかな..」と溜め息をついていたと思いますが、今考えてみると、環境構築手順をコードに落とし込めるというのはDockerを使う利点でもあるので、ユースケースを身を持って体験していたことになりますね。
DB
エンジニアがDBのパフォーマンスやスケーラビリティを踏まえたテーブル設計について気を配ることは必須ですが、そもそもの前提になるトランザクション、インデックス、正規化のような基本事項も私は不安があったので、この機会に一から学習し直しました。とにかくインフラ全般は鋭意勉強中といった具合です。
開発スタイル
モブプロ
バックエンドチームでは属人性の排除や手戻りの削減などを目的として、モブプロを採用しています。コロナ禍により入社翌日からリモートワークが始まるという状況だったのですが、業務に慣れるまでの間、実装等をメンバーにナビゲートしてもらう等のサポートを受けられたので、個人的にはそういった点においても大変助かりました。
スクラム開発
バックエンドチームでは開発手法としてスクラム開発を採用しています。前職までは、ウォーターフォール型の開発で半年や1年先の納期に向けて、粛々と開発を進めることが中心だったので、1週間という短いスプリントを区切りに開発を進めるというのは新鮮でした。また、トリスタではスクラムガイド3の輪読会なども行っており、トリスタ全体でスクラムに対する理解を深め、活用することに熱心な印象もあります。
テスト駆動開発
いわゆるTDD(Test-Driven Development)と呼ばれる開発手法です。4
TDDでは、以下のサイクルを繰り返して開発を進めていきます。
- テストを書く
- テストがパスするようにコードを書く
- リファクタする
複雑な仕様に頭を悩まされるときには、状況を再現するテストを書くことで、早い段階で誤りを検知して正すことができます。さらに、動く最小単位のコードを担保しながら実装できるので、コードが煩雑になってしまった場合にも、心置きなくリファクタができるというお釣りまでついてきます。
つまり、TDDのよって丁寧な開発体験を享受できるわけです。丁寧な暮らしを開発にまで持ち込みたい方にはTDDをオススメしたいです。一度このまとまりの良さを体験してしまうと、テストコードがない開発にはもう戻れないですね。
オブジェクト指向プログラミング
SOLIDやGoFといった設計原則、デザインパターンについても手を動かしながら学んだのですが、本当に奥が深いですね。数あるメリットはここでは語りませんが、アンチパターンを避けて丁寧に設計されたクラスに芸術性を感じてしまうのは、きっと私だけではないはずです。この半年のハイライトは間違いなく、オブジェクト指向に根ざして設計する意識を得られたことだと思います。
まとめ
ここまで私がトリスタで経験した技術スタックについて振り返ってきました。こうしてみると、この半年間で盛り沢山に詰め込むことができたと思います。とはいえ、課題もあるのが現状なので、今後もこうした形でアウトプットするなど、試行錯誤してスキルとサービス価値の向上に努めていきます。