Ruby / Railsに関して調べたこと
【目的】
- Ruby/Ruby on Railsに関して調べている中で初めて知った挙動などをまとめて見やすくしておく
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
railsが色々言われているので、その理由や今railsが採用されている理由などに思いを馳せる。
弊社のような開発リソースが少ないスタートアップでrailsはよく採用されている。
名前の通りレールに乗って開発するので、プロダクトの立ち上げのコスト・エンジニアの教育コストをミニマムにできる。(実際僕もrailsの分かりやすさのおかげでエンジニアになれたと言っても過言ではない)
Railsを作ったDHHはJSを塩だと発言している。実際簡易なWebアプリケーションであればそれでよかったが、リッチな体験を求められる開発ではそうも言ってられない。
Rubyには型がないため、開発でバグが出やすい。バグが出ない開発をしようとすると、テストを書く必要があるが結構しんどい。JavaScriptはTypeScriptによって型を使用することができるので、JSを採用して静的コンパイルでバグを発見しやすくしておく方が開発効率が上がる。
静的コンパイルは昔のマシンでは遅かったそうだが、現在のマシンでは性能も上がっているので開発の妨げにはならない。
カラムの型を変更したいときは、using cast
を使う。
change_column :hoges, :hoge, 'bigint using cast(hoge as integer)'