【Go言語学習|初心者向け】Go開発の効率を劇的に上げる!テスト時間短縮テクニック「go test -short」の活用術

導入

Go言語で開発を進めていると、テストの数が増えるにつれて「テストの実行時間が長すぎて待ち時間が苦痛」という課題に直面することがあります。特に外部APIとの通信や重い計算処理を含むテストは、開発中のちょっとした確認のたびに実行するのは非効率です。
そこで活用したいのが、Go標準の「go test -short」フラグです。これを使うことで、ローカル開発時には一部の重いテストをスキップし、素早くフィードバックを得ることが可能になります。

基礎知識

Goのテストコード内では、`testing.Short()` という関数を使うことができます。この関数は、テスト実行時に `-short` フラグが渡されているかどうかを判定し、渡されていれば `true` を、そうでなければ `false` を返します。
この仕組みを利用して、「このテストは時間がかかるから、-shortが指定されているときは実行しなくていいよ」という条件分岐をコード内に組み込むのが、Goにおける標準的なテスト管理手法です。

実装/解決策

具体的な手順は非常にシンプルです。テストコードの中で `testing.Short()` を呼び出し、結果が `true` であれば `t.Skip()` を呼び出してテストを中断させます。これにより、CI/CD環境ではすべてのテストを実行し、ローカル開発時だけ時間を短縮するという柔軟な運用が可能になります。

サンプルプログラム

以下のコードを `main_test.go` として保存し、`go test -v` と `go test -v -short` をそれぞれ実行して動作の違いを確認してみてください。


package main

import (
"testing"
"time"
)

func TestHeavyProcess(t testing.T) {
// -shortフラグが指定されているか確認
if testing.Short() {
// -shortが有効なら、このテストをスキップしてメッセージを表示
t.Skip("短縮モードのため、重いテストをスキップします")
}

// 本来なら時間がかかる処理をシミュレート
time.Sleep(3 time.Second)
t.Log("重い処理が完了しました")
}

func TestQuickProcess(t testing.T) {
// このテストは短縮フラグの影響を受けずに常に実行される
t.Log("これはすぐに終わるテストです")
}

応用・注意点

現場で活用する際の注意点として、「重要なテストまでスキップしすぎないこと」が挙げられます。特にDBへの書き込みや重要なビジネスロジックは、-shortで除外せず、あくまで「外部連携」や「大量データの処理」など、実行時間に比例して開発体験を下げるものに限定して適用するのが賢い使い方です。
また、CI/CD環境では `-short` を付けずに実行するように設定を分けることで、リリース前の品質担保を確実に担保するようにしましょう。この機能を使いこなすことで、サクサクと開発が進む快適な環境を作ることができます。

コメント

タイトルとURLをコピーしました