1. まずは簡単にやってみる
module TestInterface def method1 raise NotImplementError end end class SomeClass include TestInterface def method1 puts "hoge" end end SomeClass.new.method1
実装はココから拝借。
愚直にmoduleで書いたほうが良いんじゃないかなぁと思っている。 そのほうが明示的でわかりやすいというか… 業務でどうしても欲しい場合は、消去法でコレで良いんじゃないんですか。という感じ。
2. Gem使う
その名もズバリなInterFaceというGemがあるので、コレを使ってみることにする。
実装もここから読めるし、100行もないくらいの短いコードなので、興味がある人は読んでみて欲しい。 interface/interface.rb at master · djberg96/interface · GitHub
require 'rubygems' require 'interface' TestInterface = interface{ required_methods :method1 } class SomeClass def method1 puts "hoge" end implements TestInterface end SomeClass.new.method1
Interfaceをそれっぽく、かつRubyっぽい感じ*1でかける。 ただ一番しっくりこないのは、implements*2を必ずメソッドの定義よりも下に書かないと動かないことだろう。 多分これは実装上の都合なだけな気がするので、もしかすると修正されて、メソッド定義よりも上に書いてみても大丈夫になるかもしれない。 業務で使うのはあまりオススメ出来ない…
まとめ
結局少し試してみたけど、これならやらんでもいいかな…となってしまった。
*2:コード見れば解るけど、このGemのimplementsの実体はただのincludeのエイリアスだったりする。 https://github.com/djberg96/interface/blob/master/lib/interface.rb#L106