Ruby Academy · レッスン

コードの記述

Gem を整理します。

レッスン 2/413 ステップ

「コードの記述」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

gemのコードを整理する

優れたgemのコードは読みやすく、requireしやすく、他のライブラリと衝突しないように名前空間が付けられています。重要な役割を果たすのは、すべてを包むトップレベルのモジュールです。

  • gemごとに1つの名前空間モジュールを定義します。
  • 名前空間に対応させ、クラスごとに1つのファイルを用意します。
  • 公開する機能は小さく保ちます。

名前空間モジュール

すべてのクラスを、gemの名前に合わせたモジュールで包みます。これにより、自分のClientが他のライブラリのClientと衝突するのを防げます。

module Greeter
  class Hello
    def message
      "Hi there"
    end
  end
end

puts Greeter::Hello.new.message

ファイル命名規則

Rubyのツールは、ファイルパスが定数名に対応していることを前提とします。

  • Greeterはlib/greeter.rbに定義します。
  • Greeter::Helloはlib/greeter/hello.rbに定義します。

この規則により、オートローダーがファイルを自動的に見つけられます。

内部ファイルのrequire

エントリーファイルでは、require_relativeを使ってすべてを結び付けます。各クラスのファイルを一度ずつrequireすることで、require 'greeter'を1回実行するだけでライブラリ全体を読み込めます。

明確な公開API

ユーザーが実際に呼び出すメソッドだけを少数公開します。よくあるパターンは、モジュールレベルの便利なメソッドから内部クラスに処理を委譲する方法です。

module Greeter
  def self.say(name)
    "Hello, " + name + "!"
  end
end

puts Greeter.say("Ada")

内部実装を隠す

ヘルパーメソッドにはprivateを指定し、公開インターフェースの一部にならないようにします。公開するものはユーザーへの約束です。その範囲は意図的に、そして小さく保ってください。

class Calculator
  def total(a, b)
    add(a, b)
  end

  private

  def add(x, y)
    x + y
  end
end

puts Calculator.new.total(2, 3)

設定のパターン

多くのgemでは、ユーザーがオプションを一度に設定できるconfigureブロックを提供します。シンプルな実装では、設定オブジェクトに設定値を保存します。

module App
  class Config
    attr_accessor :api_key
  end

  def self.config
    @config ||= Config.new
  end

  def self.configure
    yield(config)
  end
end

App.configure { |c| c.api_key = "secret" }
puts App.config.api_key

カスタムエラー

gem固有のエラークラスを名前空間の下に定義すると、ユーザーは自分のエラーだけを正確にrescueできます。StandardErrorを継承してください。

module Payment
  class Error < StandardError; end
  class DeclinedError < Error; end
end

begin
  raise Payment::DeclinedError, "card declined"
rescue Payment::Error => e
  puts "Handled: " + e.message
end

モンキーパッチを避ける

Stringのようなコアクラスをグローバルに編集するのは避けてください。他のコードで予期しない問題が起こります。拡張が必要な場合は、refinementsを使って変更の適用範囲を限定するか、自分のクラスにヘルパーメソッドを追加してください。

依存関係を軽く保つ

追加した実行時依存関係は、すべてのユーザーが抱える依存関係になります。可能な場合は標準ライブラリを優先し、それだけの価値がある場合にのみgemを追加してください。

依存関係が少なければ、バージョンの衝突が減り、インストールも速くなります。

公開APIをドキュメント化する

各公開メソッドの引数と戻り値を説明するコメントを追加してください。YARDなどのツールを使うと、コメントから閲覧しやすいドキュメントを生成できます。また、例を含む優れたREADMEが、ユーザーがgemを採用するかどうかを左右することもよくあります。

理解度チェック

gemのコード整理についての理解度を確認します。

まとめ:コードの記述

gem内部の整理方法について学びました。

  • すべてを名前空間モジュールで包みます。
  • ファイルパスを定数名に対応させます。
  • 公開APIを小さく保ち、ヘルパーにはprivateを指定します。
  • カスタムエラークラスを定義し、グローバルなモンキーパッチを避けます。
  • 依存関係を軽く保ち、APIをドキュメント化します。

次はテストとバージョン管理を追加します。

無料で開始

AI チューターと学ぶ Ruby — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
29
レッスン
109

よくある質問

「コードの記述」レッスンは無料ですか?

はい。「コードの記述」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「コードの記述」で何を学びますか?

Gem を整理します。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「コードの記述」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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