Open4

Ruby / Railsに関して調べたこと

ピン留めされたアイテム
Kenzo TanakaKenzo Tanaka

【目的】

  • Ruby/Ruby on Railsに関して調べている中で初めて知った挙動などをまとめて見やすくしておく
Kenzo TanakaKenzo Tanaka

openはファイルサイズによって返り値のクラスが違うので、気をつけた方が良い。

具体例:
例えば下記のような処理があったとき、処理が成功するかどうかがファイルサイズに依存する。

# hoge.rb
data = open(video.url)
FFMPEG::Movie.new(data.path)

添付されたvideoが10KBよりも小さかった場合、下記のエラーが発生し、処理に失敗します。

NoMethodError: undefined method `path' for #<StringIO:0x00005604...>

原因はopenは返り値がファイルの大きさによって異なるから。

  • 10KBより大きい:Tempfileのインスタンス(pathメソッドを持つ)
  • 10KB以下:StringIOのインスタンス(pathメソッドを持たない)

参考リンク:
Rails: open() returns StringIO instead of Tempfile - Stack Overflow
Ruby open-uri の open の戻り値 - Qiita

Kenzo TanakaKenzo Tanaka

railsが色々言われているので、その理由や今railsが採用されている理由などに思いを馳せる。
https://blog.unasuke.com/2020/i-have-to-learn-those-things-in-the-future/

弊社のような開発リソースが少ないスタートアップでrailsはよく採用されている。
名前の通りレールに乗って開発するので、プロダクトの立ち上げのコスト・エンジニアの教育コストをミニマムにできる。(実際僕もrailsの分かりやすさのおかげでエンジニアになれたと言っても過言ではない)

Railsを作ったDHHはJSを塩だと発言している。実際簡易なWebアプリケーションであればそれでよかったが、リッチな体験を求められる開発ではそうも言ってられない。

Rubyには型がないため、開発でバグが出やすい。バグが出ない開発をしようとすると、テストを書く必要があるが結構しんどい。JavaScriptはTypeScriptによって型を使用することができるので、JSを採用して静的コンパイルでバグを発見しやすくしておく方が開発効率が上がる。
静的コンパイルは昔のマシンでは遅かったそうだが、現在のマシンでは性能も上がっているので開発の妨げにはならない。