コードの記述
Gem を整理します。
「コードの記述」は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フィードバックを取得できます。ローカル設定は不要です。