テストとバージョニング
品質と semver です。
「テストとバージョニング」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
gemをテストする理由
gemは多くのプロジェクトで使われるため、バグがあるとすべてのユーザーに影響します。自動テストがあれば、自信を持ってコードを変更し、gemが引き続き動作することを確認できます。
- テストは期待される動作を記録します。
- リリース前にリグレッションを検出できます。
- 本格的にgemを採用するユーザーは、テストを用意していることを求めます。
フレームワークの選択
人気のある選択肢は、Rubyに同梱されている軽量なMinitestと、豊富なDSLを備え広く使われているRSpecの2つです。どちらを選んでも問題ありません。どちらか1つを選び、gemspecの開発時依存関係に追加してください。
Minitestの例
Minitestのテストは、アサーションメソッドを持つ通常のクラスとして記述します。ここでは、gemのロジックを実行して結果を確認する、自己完結した例を示します。
require "minitest/autorun"
def greet(name)
"Hi, " + name
end
class GreetTest < Minitest::Test
def test_greet
assert_equal "Hi, Sam", greet("Sam")
end
endよく使うアサーション
Minitestで便利なアサーションは次のとおりです。
assert_equal expected, actualassert objとrefute objassert_nil valueassert_raises(Error) { ... }
各テストでは、1つの明確な動作を確認してください。
require "minitest/autorun"
class MathTest < Minitest::Test
def test_addition
assert_equal 4, 2 + 2
end
def test_truth
refute_nil 5
end
endテストの実行と自動化
通常はRakeタスクを追加し、rake testでテストスイート全体を実行できるようにします。その後、継続的インテグレーションによって、複数のRubyバージョンで同じタスクをプッシュのたびに実行し、問題を早期に検出します。
セマンティックバージョニングとは
セマンティックバージョニング(semver)は、バージョン番号MAJOR.MINOR.PATCHに意味を持たせる仕組みです。
- MAJOR:互換性のないAPI変更です。
- MINOR:後方互換性のある新機能の追加です。
- PATCH:後方互換性のあるバグ修正です。
ユーザーは、これを頼りに安全にアップグレードします。
バージョンの読み方
2.4.1の場合、majorは2、minorは4、patchは1です。文字列を分割すると、それぞれの部分を確認できます。
version = "2.4.1"
major, minor, patch = version.split(".")
puts "Major: " + major
puts "Minor: " + minor
puts "Patch: " + patch各部分を上げるタイミング
判断のルールは次のとおりです。
- APIを変更せずにバグを修正した場合は、patchを上げます。
- 古いコードが引き続き動作する新機能を追加した場合は、minorを上げ、patchを0に戻します。
- 既存の動作を削除または変更した場合は、majorを上げ、minorとpatchを0に戻します。
def bump_minor(version)
major, minor, _patch = version.split(".").map(&:to_i)
major.to_s + "." + (minor + 1).to_s + ".0"
end
puts bump_minor("1.3.5")バージョン制約
ユーザーはGemfileで演算子を使い、gemのバージョンを指定します。
'~> 1.4'は1.4以上2.0未満を許可します(悲観的制約)。'>= 1.4'は、より新しいバージョンをすべて許可します。'= 1.4.2'は特定のバージョンに固定します。
悲観的制約の~>は、更新と安全性のバランスがよく、最も一般的に使われます。
変更履歴を保つ
各バージョンで何が変更されたかを記載したCHANGELOG.mdを管理してください。新機能、破壊的変更、移行方法をユーザーに伝えられます。バージョンを上げるたびに、変更履歴の項目も追加してください。
プレリリースバージョン
2.0.0.beta1のようなバージョンは、不安定なプレビュー版であることを示します。ユーザーが明示的に指定した場合だけインストールされるため、通常のインストールに影響を与えずに初期バージョンをテスト用に公開できます。
version = "2.0.0.beta1"
puts "Pre-release? " + version.include?("beta").to_s理解度チェック
バージョン管理についての理解度を確認します。
まとめ:テストとバージョン管理
gemの信頼性を保つ方法について学びました。
- MinitestまたはRSpecでテストを記述し、RakeとCIで自動化します。
- semverの規則、MAJOR.MINOR.PATCHに従います。
- 修正、機能追加、互換性を壊す変更に応じて、適切な部分を上げます。
~>の制約を使い、変更履歴を管理します。
次はgemをRubyGemsに公開します。
よくある質問
「テストとバージョニング」レッスンは無料ですか?
はい。「テストとバージョニング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「テストとバージョニング」で何を学びますか?
品質と semver です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「テストとバージョニング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Gem の構成
- コードの記述
- テストとバージョニング
- RubyGems への公開