Rubyでインターネット上の画像をローカルに保存するためには

Ruby

RubyはRuby on Railsなどを用いてWebアプリケーションを作るのにも優れていますが、簡単なタスクをさくっとプログラムするのにも向いています。今回はRubyを用いてローカルに画像を保存するためにはどうしたらよいか学んでいきましょう。

ソースコード

それでは早速どのように保存するのかコードを見てみましょう。

require 'open-uri'

url = "https://example.com/file_name.jpg"
filename = File.basename(url) # => "file_name.jpg"
open("./#{filename}", 'w+b') do |output|
  open(url) do |data|
    output.puts(data.read)
  end
end

解説

ここではFile.basenameを使ってファイル名をURLから取得しています。
また、画像を保存するためにまずはカレントディレクトリにfilenameで設定したファイル名でバイナリファイルを作成します。またそのときの書き込みモードはw+にしておきます。詳しいドキュメントはKernel.#openを確認ください。バイナリモードでファイルを開くのがポイントです。
そしてそのブロックの中でurlから取得したデータを流し込んでいます。

まとめ

Rubyで画像を保存する場合に大切なことはバイナリモードでローカルにダウンロードする画像を入れるためのバイナリファイルを作成し、その中にデータを流し込むことがポイントでした。
理解してしまえばなんてことない話ではあるので、みなさんもぜひ試してみてください。

参考