本記事はアジアクエスト - Qiita Advent Calender 2024の記事です。
はじめに
ソフトウェアの内部品質は開発生産性に大きく関わってきます。
内部品質の中でも保守性が低いと、可読性が原因でソースコードの解読が難しくなったり、設計の複雑さが原因で新機能の追加やバグ修正が難しくなってしまいます。
全てではないですが、ソフトウェアの内部品質は静的解析ツールや自動テストなどを使ってある程度担保することができます。
本稿では、自動化の重要性と自動化環境を構築するスキルがなぜ重要かを考えていきます。
最後に、Node.js環境を例に具体的に自動化環境に必要なツールを紹介します。
自動化しないとどうなるのか
静的解析ツールや自動テストを導入したものの、これらの実行を自動化しないとプロジェクトに悪い影響がでる可能性があります。
ソースコードの変更をコミットする前に手動で確認するよう、個々人の開発者に求めてしまうのは非効率です。
こういった面倒はできるだけ自動化して、開発に集中できるような環境を整えることが重要です。
ソースコードを自動でチェックする環境が構築されずにプロジェクトが進んでしまうと、ソースコードがカオスな状態になってしまう可能性があります。
主に、次のような問題が発生すると考えられます。
- 開発者間でコードの書き方に差異が生まれてしまい可読性が落ちてしまう
- いざビルドしようと思ったときに、コンパイルが通らなくなってしまう
- この前まで成功していた自動テストが失敗してしまう
いずれも、ソフトウェアや開発者にとっては良くない出来事です。
これらの問題は、すべて自動化によって解決可能だと思います。
自動化すると何が嬉しいのか
自動化のデメリットはなんとなく理解できましたが、逆にメリットは何でしょうか。
具体的には、次のような恩恵を受益することができます。
- バグを早期に発見できる
- ソフトウェアの品質をある程度担保できる
- 自動化により手作業が減り、開発者はより開発に集中できる
自動化するスキルがチーム開発にもたらす恩恵
自動化するスキルは、チーム開発において良い恩恵をもたすと考えています。
私が勝手に尊敬しているプログラマであるtwadaさんは自動化することの重要性について次のように述べています。
自動化っていうのは一度やれば、何度でも自動で動いて早期に受益できます。
チーム開発の場合誰か一人が自動化すれば全員が受益者になれます。
これはとても大きいことですね。
これは「一人が皆のため」や「自己犠牲」のような綺麗事ではなく、一人が頑張ってしまえば他の人はノーコストで恩恵を受けられるということです。
このことから、自動化をするスキルを持っていることはチーム開発においてコーストパフォーマンスが高く有益なスキルだと言えるでしょう。
Node.js環境で自動化するにはどうすればいいか
まずは、何をどのタイミングで実行するかを考える必要があります。
よくあるケースとしては、メインブランチにコミットをマージするときにCIを実行するというケースがあります。
CIを実行するケースでは、ソースコード管理をGithubで行っている場合は、Github Actionsを使ってCIを実行することが可能です。
その他にも、AWS CodePipelineやCircleCIなどのサービスを使ってCIを実行することもできます。
また、ローカルのコーディング作業でコミットしたときにも自動化を行うことができます。
Node.jsのプロジェクトであれば、HuskyとLint-stagedを使って、コミット時に静的解析ツールや自動テストを実行することができます。
手段がきまったら次は、何を自動で実行するかを考える必要があります。
静的解析ツールを導入する
静的解析ツールは、ソースコードのコーディングスタイルをチェックするツールです。
よく使われる静的解析ツールはESLintで、最近ではBiomeも人気があります。
設定はできるだけ厳しくすることで、コードの品質を高く保つことができます。
自動テストを導入する
JestやVitestなどのテスティングフレームワークを導入することで、自動テストを行うことができます。
自動テストの導入は比較的コストがかかるため、まずは誰か一人がお手本になるテストを1つだけでも書いてみると良いでしょう。
ビルドを自動化する
ビルドを自動化することで、いつでもデプロイ可能な状態を保つことができます。
なので、できるだけビルドを自動化することをおすすめします。
TypeScriptを使っている場合、tscコマンドを使ってビルドすることができます。
Viteやesbuildなどのビルドツールを使っている場合は、ビルドコマンドを実行すると良いでしょう。
参考資料