はじめに
こんにちわ。求人検索エンジンスタンバイを提供している株式会社スタンバイでエンジニアリングマネージャーをしている辻です。
スタンバイ Advent Calendar 2023 の記事として、私がソフトウェア開発において大事にしていきたいなと思っていることの1つ「継続的に開発がしやすい状態にする」についてポエムっぽく書きたいと思います。
TL;DR
継続的に製品やサービスを開発していくために、コード本体以外の部分にも力を入れて整備しておくことが大事だと思います。
継続的に開発しやすいことが大事だと思う理由
ソフトウェア開発において大事な観点はたくさんあります。
UX、コードの品質、リリースタイミング、性能、コスト効率、セキュリティ、etc... どれも大事ですがどの観点を重視するか、そしてこれらの優先順位というものはケースバイケースで流動的に変わってくるものです。
しかし、ほとんどの製品やサービスは最初にリリースして終わりということはなく、継続的に改善し続けながらユーザーに安定提供し続けていく状態になるので、
「継続的に開発がしやすい状態にする」という観点は、いつも共通して大事になってくるものだと考えています。
どういう観点で考えるのが大事だと思っているか
「自分(自チーム)以外の人でもスムーズに開発に参加できるか」という観点で考えることが大事だと思っています。
ずーっと現状の自分(自チーム)が構成員が変わらずに、その製品やサービスを継続的に開発していくとは限らないです。
新しくチームにジョインする人たち、あるいは将来引き継ぐ人たちがスムーズに製品やサービスの開発に入れる状態にしておくことが、製品やサービスを品質高く継続的に開発していくために重要だと思います。
どのような状態にしておくのが良いと思っているか
コード本体の品質(設計や可読性など)や技術選定ももちろん重要ですが、それだけでなく以下のようなことが重要になってくると思います。
書いてみるとどれも当たり前なことではありますが、当たり前をちゃんとやり続けることは何事においても実はとても難しいことだと思うので、常に意識しておくべきだと思います。
README に開発に必要な情報をまとめておく
該当製品の Git リポジトリは開発する際に最も頻繁に見るところだと思います。
そのため、 README に以下の項目に記載しているの情報や資料へのリンクを置いておき、開発に必要な各種情報にスムーズに辿れるようにしておくことが重要です。
製品やサービスの概要を端的に記述しておく
製品やサービスの目的と提供しているものを端的に記述しておくことが、新規に開発に参加したばかりの人が製品やサービス、責務の理解をしやすいと思います。
例えば「求人の検索結果を返却する API 」など、概要がぱっとわかる一言があるくらいが良いと思っています。
容易に開発環境を構築できるようにしておく
開発環境の構築は、手順を明記したり自動化したりしてすぐに迷いなく実施できるようにしておくことが大事です。
この手順が複雑だったり情報が不足していると、開発に参加したばかりの人はかなりモチベーション下がりますし、普段の開発中も「自分の環境は正しいのだろうか?」という不安が常に付きまとうのも生産性を下げますし、開発環境の再構築が必要になったときのコストも高くなります。
コンテナやセットアップスクリプト等を用意して、ぱっと正しく開発環境を構築できるようにしておくと良いと思います。
CI/CD の整備をしておく
コードを変更してデプロイする。この工程を手作業で全て確実に行うことは非常に困難です。
製品やサービスによってそのプロセスは様々かつミスれないところなので、特に開発に参加したばかりの人はここが一番不安なところだと思います。
「知らなかった」や「うっかり」で本番環境を壊してしまうことが起きないように、テストとデプロイは可能な限りの自動化と主導の場合はその手順を明記し、開発に参加したばかりの人でも安心してコードの変更ができるようにしておくことが大事です。
ちなみに慣れている人でも油断や疲れといった要因でミスすることがあったり手間がかかる部分なので、開発の初期段階から充実させておくべき部分だと思います。
開発ルールを明記しておく
コーディングガイドライン、プルリクエストのテンプレート、ライブラリの更新や追加の方針等々、開発に関する共通ルールは明示しておくと、特に開発に参加間もない人たちはチーム開発に関する不安が軽減されて良いと思います。
ルールに縛られるのも窮屈ですが逆にルールが無い不安というのもあります。「どんな観点でコードレビューされるのだろう、レビューしたらいいのだろう」など、開発のお作法は明記されているほうが良いのかなと思います。
また、コードのフォーマットになど自動的に制御可能な部分は自動化しておくことが良いと思います。
ログ、アラートを適切に設定しておく
運用中の製品やサービスで異常が発生した際に迅速かつ正確に対応できるように、ログ出力とシステムメトリクスのモニタリングを整備し、異常があった場合にアラートが発火するように設定しておくことは継続的に製品やサービスを提供していくうえで重要になります。
ログは「Error」の一言や例外だけでなくちゃんとエラー原因をすぐに追えるような情報を付加して落とす。アラートに関しては SLA や SLO といった基準を決めてそれに準じた設定にしておく。など、いざというときに慌てずに対応できるように備えておくことは大事です。
変更履歴を確認しやすくしておく
Git のコミットログ、プルリクエストのタイトルや中身などは後から見返してちゃんと内容がわかるように、変更の概要や目的を記載しておくと良いと思っています。
運用中に問題が発生したり開発をしている中で、コードの変更履歴を確認することは度々あると思います。そんな時に「fix」の一言だけのコミットログだけしか情報が無かったりすると、混乱するし時間もかかるしストレスが溜まります。
後から変更履歴を追う人、あるいは将来の自分のためにもコミットログやプルリクエストの内容は雑にし過ぎないようにすることは大事です。
おわりに
内容が非常にざっくりした記載かつ他にも大事なことは多々あるかと思いますが、まずは思っていることを記事にしてみました。
これからも安定してサービス提供を続けられるように、これらの当たり前のことを丁寧に継続していけるようにしていきたいと思います。
スタンバイでは一緒に求人エンジンスタンバイの開発をしてく仲間を募集中です!
カジュアル面談で弊社の事業や技術等について説明させていただければと思うので、興味を持たれた方はぜひご連絡ください!