0Pricing
Ruby Academy · レッスン

テストとバージョニング

品質と 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, actual
  • assert objとrefute obj
  • assert_nil value
  • assert_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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Gem の構成
  2. コードの記述
  3. テストとバージョニング
  4. RubyGems への公開
← Ruby Academyに戻る