20210901のRubyに関する記事は14件です。

[コーディングスキル] アウトプット用メモ

用途 コーディングスキルを磨くために、随時用語を纏め内容を理解するのが目的です。 ※アルファベット、50音順に纏めていきます。 変更履歴 9/2 sortメソッド sortメソッド 配列に対してsortメソッドを使用すると中身を順々に並び替えが可能。 array = [1, 4, 3, 2] array.sort => [1, 2, 3, 4] reverseメソッドを組み合わせれば降順も可能! array.sort.reverse => [4, 3, 2, 1] また、文字列にも使用可能 array = [ "e", "b", "a", "d","c"] array.sort => ["a", "b", "c", "d", "e"] 除数 除法(割り算)で、割るほうの数。 被除数 除法(割り算)で、割られるほうの数。 フィボナッチ数列 フィボナッチ数列は、「2つ前の項と1つ前の項を足し合わせていくことでできる数列」 プログラミング言語の実装では、再帰的処理の例としてよく紹介されています。 1,1,2,3,5,8,13,21... n番目の数(n-1)番目と(n-2)番目の数の和からなっている数列。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ruby puts print pの違い

Rubyで出力する時に使うputs p  printの違いをそれぞれ見ていきましょう。 putsの特徴 1 改行する 2 配列では要素の順番に出力する 3 戻り値はnil 4 一般ユーザーが使う 5 呼び出すメソッドはto_sによって文字列に変換 printの特徴 1 改行しない 2 戻り値はnil 3 呼び出すメソッドはto_sによって文字列に変換 4 一般ユーザーが使う pの特徴 1 改行する 2 戻り値は引数で配列で返す 3 オブジェクトの情報をわかりやすく出力 4 デバック用(開発者用)に使う 5 呼び出すメソッドはinspectによって文字列に変換 それぞれの違いのまとめ それぞれ違いがありますが特にputsとpがわかりづらいかと思います。 下の参考記事からの引用します。 printは、引数を文字列にして出力し、改行をいれません。 putsは、引数を文字列にして出力し、改行をいれます。 pは、引数を読み取りやすい形式で出力し、改行をいれ、デバッグでよく使用します。 上の3つを押さえればいいと思います。 特に注目すべきはputsとprintが改行するかしないか* pはデバック用(開発者向け)に使う。 最低限このあたりを押さえておくといいと思います。 あとは実際に動かして確認してみてください。 ⚫︎参考記事 https://yukimasablog.com/ruby-print-puts-p https://qiita.com/yyykms123/items/2706d14ee4515c2ba406
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WebpackerでHotReloadは動くが、コンパイル結果が反映されない

はじめに 最近は仕事でWebアプリケーションを作成しています。 本日もいつも通りWebページを作成し、Javascriptを書いたのですが、なぜかリロードしてもJavascriptが反応しませんでした。 色々調べたのですが、同じ現象の方がいなかったようなので、簡単にメモしていきます。 また、この解決に会社の上司の方が手助けをしてくれました。 タイトルも上司の方につけていただきました。 環境 Docker Desktop for Windows WSL2 VSCode 問題 Docker(WSL2)環境で以下の問題がいきなり発生しました。 ローカルとコンテナをマウントしている状態で、JavaScriptのファイルを編集しましたが、なぜか反映さません。 JavaScriptはwebpackerのコンテナをDockerで立ち上げて管理しています。 JavaScriptを編集した後に保存(Ctrl+s)をすると、ホットリロードが働いていることはターミナルから確認ができます。 そして、ターミナルではCompling....と走っていました。 しかし、変更内容が反映していません。 久しぶりにJavaScriptを書き、以前はこのような事象にはなりませんでした。 また、最近Hyper-VからWSLに環境を変更したので、それが問題化と思いましたが先輩の環境でも同じ事象になりました。 おそらく何かしらの設定がおかしいようでした。 また、時々コンテナの立ち上げの問題でWebページのスタイルがつかないことがあるのですが、今回はF5でリロードしてもスタイルがつくことがありませんでした。 始めにスタイルがついていないとそれ以降はつくことはありませんでした。 解決方法 以下の記事を確認して解決できました。 [Rails] Webpacker の使い方 webpacker/development.ymlの以下の箇所が問題になっていました。 webpack.yml # developmet cache_manifest: true この設定をいつ増やしたのかは忘れてしまいましたが、何かあって追加したのでしょう。 cache_manifestをtrueにすると初めにコンパイルした内容がCacheとして保存されるためそれ以降の変更が効かなくなります。これが原因でJavaScriptが反映されていませんでした。 以下のように修正します。 webpack.yml # development cache_manifest: false また、該当行を削除することで、デフォルトのfalseに設定されます。行ごと削除したほうがよいです。 おわりに かなり沼ってしまい、時間がかかってしまいました。 とりあえず原因特定としては別の環境で同じことを確かめたほうがいいと思いました。 詳細にコードを載せたいところでしたが手元に環境がないためメモ程度にまとめてみました。 明日からやっと仕事が再開できます。先輩ありがとうございました。 参考 [Rails] Webpacker の使い方
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Ruby] AtCoder過去問 B - Card Game for Two

はじめに AtCoderのB問題をRubyで解いて見ました。 いろんな考え方や書き方が自分の中でもたくさんあって、どの書き方を記事にしようか迷いましたが、一番自分がわかりやすいコードを載せることにしました! よろしくお願いします。 問題は以下から確認してください。 B - Card Game for Two まずは入力受け取りの記述を書きます。 n = gets.to_i points = gets.split.map(&:to_i) 続きまして、2行目で受け取った配列の順番を後々、処理がしやすいように降順に並べ替えます。 sort.reverseを使います。この使い方は以前記事にしていますのでそちらも見ていただければと思います。↓ こちら、破壊的メソッドではないのでもう一度pointsに入れ直すような書き方をしておきます。 これで配列の先頭から数字が大きい順に並んでいます。つまりAliceとBob達は最善のカード取っていくので配列の先頭からとっていくことになります。 n = gets.to_i points = gets.split.map(&:to_i) points = points.sort.reverse 次にAliceとBobのポイントを用意します。 そのあと、繰り返し処理を行うのでcountも用意しておきます。 n = gets.to_i points = gets.split.map(&:to_i) points = points.sort.reverse alice = 0 bob = 0 count = 0 ここからはtimesメソッドを使ってn回処理を行なっていきます。(n枚のカードしか存在しないので) n = gets.to_i points = gets.split.map(&:to_i) points = points.sort.reverse alice = 0 bob = 0 count = 0 n.times do if count == 0 || count % 2 == 0 alice += points.shift elsif count == 1 || count % 2 == 1 bob += points.shift end count += 1 end このような繰り返し処理をします。 最初のif文のif count == 0 || count % 2 == 0はcountが0または偶数のときに実行させる条件分岐の条件式です。 その中のalice += points.shiftですが、このshiftメソッドがキーとなります。 これは配列の先頭を取り出して、削除してくれます。 つまりここで行なっている処理は、今存在するカードの中から最も大きい数を取り出してAliceのポイントに加算した後、配列pointsからは削除されます。 elsif以下の処理は、Bob版の処理ということになります。Aliceの時と同じです。 最後にAliceからBobのポイントを引いたものを出力すれば完成です。 n = gets.to_i points = gets.split.map(&:to_i) points = points.sort.reverse alice = 0 bob = 0 count = 0 n.times do if count == 0 || count % 2 == 0 alice += points.shift elsif count == 1 || count % 2 == 1 bob += points.shift end count += 1 end puts alice - bob
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】投稿カテゴリ機能(メモ)

目標 カテゴリ機能の実装 環境 Rails: 6.1.3 ruby: 3.0.0 mac: OS 前提 簡易的なTodoApp 投稿機能実装済 実装 categoryモデル作成 ターミナル $ rails g model Category name:string マイグレーションファイル生成。 class CreateCategories < ActiveRecord::Migration[6.1] def change create_table :categories do |t| t.string :name t.timestamps end end end $ rails db:migrate postテーブルにカテゴリカラムを追加 ターミナル $ rails g migration AddCategoryIdToPosts category_id: integer マイグレーションファイル生成。 class AddCategoryIdToPosts < ActiveRecord::Migration[6.1] def change add_column :posts, :category_id, :integer end end ターミナル $ rails db:migrate モデルの関連付け(アソシエーション) postは複数のカテゴリを持てるのでhas_many :categories app/models/post.rb class Post < ApplicationRecord has_many :categories カテゴリは1つの投稿に属しているのでbelongs_to :post app/models/category.rb class Category < ApplicationRecord belongs_to :post ルーティング記述 config.routes.rb Rails.application.routes.draw do resources :categories end categoryコントローラ作成 ターミナル $ rails g controller categories 生成されたコントローラに記述。 app/controllers/categories_controller.rb class CategoriesController < ApplicationController def index @categories = Category.all end def create @category = Category.new(category_params) @category.save end end private def category_params params.require(:category).permit(:name) end app/controllers/posts_controller.rb private def post_params params.require(:post).permit(:content, :title, :category_id) end ビュー記述 カテゴリを追加できるフォーム。 app/views/categories/new.html.erb <h2>カテゴリの追加 </h2> <%= form_with model: @category, local: true do |f| %> <div class='from_input'> <%= f.label :name %> <%= f.text_field :name %> </div> <div class="form_action"> <%= f.submit "登録する", class: "btn btn-primary" %> </div> <% end %> 追加したカテゴリを確認できます。 app/views/categories/index.html.erb <h1>カテゴリ一覧</h1> <table class="table table-hover"> <tbody> <% @categories.each do |cate| %> <tr> <td><%= link_to cate.name, posts_path(category_id: cate.id) %></td> <td><%= cate.created_at.to_s(:datetime_jp) %>作成</td> </tr> <% end %> </tbody> </table> 新しい投稿をする際にカテゴリを選択できるようにフォームに追記。 app/views/posts/new.html.erb <h2>投稿ページ</h2> <%= form_with model: @post do |f| %> <div class="form-input"> <%= f.label :title, 'タイトル' %> <%= f.text_field :title, class: "form-control" %> </div> <div class="form_input"> <%= f.label :content, '本文' %> <%= f.text_field :content, class: "form-control" %> </div> <div class="form_input"> <%= f.label :category_id %> <%= f.collection_select :category_id, Category.all, :id, :name, { prompt: '選択してください' }, class: 'form-control' %> </div> <div class="form_action row"> <%= f.submit "投稿する", class: "btn btn-primary"%> </div> <% end %> これでカテゴリが選択できます。 まとめ 今後も使う可能性のある機能だと思うので備忘録として残しておきます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

public private protected の違いを調べてみた。(備忘録)

それぞれの違いを簡単にまとめてみる。 メソッド 呼び出し可能範囲 public クラス内外どこからでも呼び出し可能。 private クラス、同じインスタンス内からのみ呼び出し可能。 protected クラス、同じインスタンス内に加え、同じクラスの他のインスタンスからも呼び出し可能。 rubyのデフォルトが、publicで他の二つとの違いは、わかりやすいのですが、他の2つ(privateとprotected)の違いがよくわからなかったので調べてみました。 privateとprotectedの具体的な違いを調べてみた。 privateprivateメソッドを呼び出す時は、レシーバは指定できない。 protectedprotectedメソッドを呼び出す時は、レシーバは指定できる。 この呼び出し時にレシーバを指定できるかできないかの違いがこの2つを理解するポイントになります。 レシーバとは レシーバーは特に Ruby の用語というわけではなく、オブジェクト指向一般に使われる用語です。 下記コードのrunメソッドを呼び出している、car1がレシーバーです。 class Car def run print run end end car1=Car.new car1.run #左側がレシーバー 参照:rubyのレシーバとは 具体的にprivateメソッドをコードで確認してみる class Sample1 def s1_call_private s1_private # 通常の呼び出し end def s1_call_private_with_receiver self.s1_private # あえてレシーバ(self)を明示して指定 end private def s1_private p "Welcome to my private room!" end end s1 = Sample1.new s1.s1_call_private => "Welcome to my private room!" s1.s1_call_private_with_receiver => NoMethodError: private method `s1_private' called for.. 引用:[Ruby] privateメソッドの本質とそれを理解するメリット このように、privateメソッドは、呼び出し時にレシーバーを指定できないルールとなっています。 次に、protectedメソッドもコードで確認してみましょう。 具体的にprotectedメソッドをコードで確認してみる class Sample2 def s2_call_protected s2_protected # 通常の呼び出し end def s2_call_protected_with_receiver self.s2_protected # あえてレシーバ(self)を明示して指定 end protected def s2_protected p "Welcome to my protected room!" end end s2 = Sample2.new s2.s2_call_protected => "Welcome to my protected room!" s2.s2_call_protected_with_receiver => "Welcome to my protected room!" 参照:[Ruby] privateメソッドの本質とそれを理解するメリット このように、protectedメソッドは、呼び出し時にレシーバーを指定できます。 まとめ(public,private,protectedの使い分け) どのレベルでメソッドを外部から隠蔽したいのか 機能実装のために他のインスタンスを参照する必要があるのか で使い分けをするのが良さそう。 他のクラスからもメソッドを使用したい場合は、publicメソッドを使う。 基本的に他のクラスやインスタンスでメソッドを使用したい場合は、privateメソッドを使う。 2項演算子の実装にその他のインスタンス(オブジェクト)の状態を参照する必要がある、もしくは、調べる必要があり、そのクラス内でのみメソッドを使用したい(他のクラスから隠蔽したい)場合は、protectedを使う。 参照 Ruby の private と protected 。歴史と使い分け rubyのレシーバとは [Ruby] privateメソッドの本質とそれを理解するメリット Rubyのメーリングリストのやりとりより。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

今が特定の時間範囲内かどうやって判断する?(システム運休期間とか)(リファクタリング)

やりたいこと 現在時刻が特定の時間範囲内かどうかをスマートに判断したいです。 例えば、特定の時間帯、ユーザーグループごとシステムへのアクセスや一部機能を制限するのに使えるかと思います。 今日も弊社先輩のリファクタリングに息を呑んでしまったのでメモメモ。 Modelは例えばこんな感じ↓ 「利用一時停止」をsuspensionとしてその期間を持たせています。 # == Schema Information # # Table name: user_groups # # id :bigint not null, primary key # name :text not null # description :text # created_at :datetime not null # updated_at :datetime not null # suspension_started_at :datetime # suspension_ended_at :datetime 環境 ruby 3.0.0 Rails 6.0.3 実装! Ruby歴8ヶ月の人の実装例 def suspension? return if suspension_started_at.nil? || suspension_ended_at.nil? current_time = Time.current current_time >= suspension_started_at && current_time < suspension_ended_at end リファクタリング例 def suspension? return false if suspension_started_at.nil? || suspension_ended_at.nil? current_time = Time.current (suspension_started_at...suspension_ended_at).cover?(current_time) end 最終行の可読性がグッと上がった印象です。 ポイントを以下に3つまとめておきます。 ?で終わるメソッド 先輩から「?で終わるメソッドは毎回Booleanを返すべき」とレビューが返ってきました。それを読んだ僕は、「何をおっしゃいます。このメソッドの最終行はちゃんとtrue/falseを返しますよ?ふふ」と思ったら...あ、一行目が...!参りました!というわけで、return falseにしました。 範囲演算子... ...は範囲演算子で、x以上y未満という範囲オブジェクトクラスのインスタンスを生成することができます。ちなみに今回はドット2つだけど..も見かけるような?と思ったら、そちらは未満ではなく以下の意味になるそうです。下記、Rubyのリファレンスマニュアルから引用です。 Rubyリファレンスマニュアル Range.new(1, 5) # 1 以上 5 以下 1..5 # 同上 1...5 # 1 以上 5 未満 cover?メソッド cover?は、include?と似ていますが、違いがあるようで、上のコードをRspecテストの中で単純に置き換えてみるとテストはパスしますが、下記のような注意を受けました。 DEPRECATION WARNING: Using Range#include? to check the inclusion of a value in a date time range is deprecated. It is recommended to use Range#cover? instead of Range#include? to check the inclusion of a value in a date time range. (called from suspension? at /Users/kakudaisuke/.../app/models/user_group.rb:83) datetimeの範囲に値が含まれているかをチェックするにはinclude?は非推奨だよってことですね。ちなみに..にするとこのwarningは出現しませんでした。 cover?とinclude?両者の違いは、ドキュメントに書いてありました↓ Range#include? と異なり <=> メソッドによる演算により範囲内かどうかを判定します。 Range#include? は原則として離散値を扱い、 Range#cover? は連続値を扱います。(数値については、例外として Range#include? も連続的に扱います。) (Rubyリファレンスマニュアルより https://docs.ruby-lang.org/ja/latest/method/Range/i/cover=3f.html) 最後に 何かご指摘あれば、ぜひよろしくお願いします。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails serverした時に(ActiveRecord::ConnectionNotEstablished Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2))と出る時の対処法

 やりたいこと rails s時ブラウザに出るエラーを消したい ※この記事では、MacOS Xを使用しています。  問題 rails sしたら以下エラーがブラウザに表示 ActiveRecord::ConnectionNotEstablished Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)  原因 調べると ・mysql.sockファイルがない ・pidファイルがない ・pidファイルに適切な権限が設定されていない この3つを対処します ※mysql.sockを作成したらサーバー起動できる場合もあるようですが、私の場合は3つやって解決できました  解決策 mysql.sockがないので作成 $ sudo touch /tmp/mysql.sock mysql再起動 $ sudo mysql.server restart 今度はpidファイルがないと言われた $ sudo mysql.server restart  ERROR! MySQL server process #13658 is not running! Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/****.pid). なのでpidファイル作成 ※****には マシンのホスト名 を入力。 ※ホスト名はuname -nで確認できます $ touch /usr/local/var/mysql/****.local.pid しても依然エラー  ERROR! MySQL server PID file could not be found! Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/****.pid). ※念のためcdで /usr/local/var/mysqlまで移動しlsで確認 →pidファイルあった。なので原因は別 以下のコマンドで、/user/local/var/mysql以下のファイルの所有者をすべて_mysqlにする sudo chown -R _mysql:_mysql /usr/local/var/mysql/ すると username@**** mysql % sudo mysql.server restart  ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS!  なぜかnot foundですがいけました!!! 無事railsサーバー起動できました  参考記事 ・mysqlが起動できない(Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)) ・mysql 起動時のThe server quit without updating PID file エラーの回避法
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby on Rails】exists?とpresent?って何が違うの???

前置き ランキング機能を実装中 サーバー立ち上げたら下記の箇所で怒られた exists?じゃダメなの???? 適当に知っているメソッドを入れているとpresent?だと問題なく稼働した。理由がわからなかったので、2つのメソッドになんの違いがあるか調べてみた。 目的 2つの違いをはっきりさせる 1.結論 データベースからデータを取得する前か後かで違う データベースから取得した値が文字列か配列か又は存在するかで違う exists? データベースからデータを取得する前に、データが存在しているかどうか present? データベースからデータを取得した後、条件に該当したデータの存在を調べるとき 2. 原因 実際に初めに挙げた例では@today_ranksには配列でデータを渡していたので、present?で正常に稼働しました。 ranks_controller.rb def rank @today_post_ranks_user = Article.group(:user_id).where(created_at: Time.current.all_day).order('count(user_id) desc').limit(10).pluck(:user_id) # 今日投稿した記事 @today_ranks = [] @today_post_ranks_user.each do |user_id| @today_ranks.push({ "user" => User.find(user_id), "count" => Article.where(created_at: Time.current.all_day).where(user_id: user_id).count, }) end end ちなみに!blank?も同じ意味になり、正常に動きました。 参照 nil? empty? blank? present? exists? メソッドを状況に応じて使い分けよう[Rails] 投稿者コメント 適当に書いてたらなんか動いた じゃなくて、ここではこういう使い方があってこうだから動いたんだ! とちゃんと理由がわかるように勉強していきます! My Profile プログラミング学習歴3ヶ月目のアカウントです! プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。 また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。 もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[jQuery]ランキングしたものをslickで表現する

はじめに 本記事では、slickを用いた記述をいたします。 slickはjQueryベースのスライダーを作成するためのプラグインです。 コード いろんなサイトやYouTubeの動画を参考にしましたが、 CDNを使用するのが一番良いなという結論に至っています。 (ファイル保存とか色々グダってトラウマ) <!DOCTYPE html> <html> <head> 省略 <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css"/> <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css"/> </head> <body> <%= yield %> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script> </body> </html> これだけです。 あと、gem 'jquery-rails'は予めbundle installしています。 以下長いのでランキングの部分だけ。 <h2 class="ranks-title">Ranking !</h2> <div class="ranks"> <% @ranks.each do |food| %> <div class="ranks-img-content"> <h2 class="food-post-user"> <%= link_to user_path(food.user_id) do %> <%= food.user.nickname %> <% end %> </h2> <%= link_to food_path(food) do %> <%= image_tag food.image, class: "food-img" if food.image.attached? %> <div class="food-img-info"> <h2 class="shop-name"> <%= food.shop_name%> </h2> <h2 class="food-name"> <%= food.food_name%> </h2> </div> <% end %> </div> <% end %> </div> <script type="text/javascript"> $(function() { $('.ranks').slick({ dots: true }); }); </script> ドットは付けたいなと思ったので、即記述しました。 矢印が画面外にいってしまっているので、明日調整しようと思います。 また、 scriptタグを一番下にして記述しましたが、まあまあ汚いコードだと思っています。 ここ含めてリファクタリングのこと考えないとな。 ランキングのことをお話ししているので、 コントローラーも記載します。 def index @foods = Food.order("created_at DESC") @like = Like.new @ranks = Food.find(Like.group(:food_id).order('count(food_id) desc').limit(5).pluck(:food_id)) end いいね数が多い順番で、上から5位までをとっています。 難点なのが、過去の投稿全てのランキングになってしまっているので、改善が必要。 1週間や1ヶ月にいいね獲得数ランキングにするのが一番ベスト。 考えます。 また、リファクタリングの点では、モデルに記載するのが良いですが、 出来上がったことの満足感で後回しにしてしまっています。 後々改善します。 終わりに 導入しましたが、プラグインは便利でかっこいいですね。 導入後、楽しくていっぱい遊んでしまいます。 矢印が画面外にいる点が気持ち悪いので、明日の目標です。 以下参考サイトです。 【Rails】 便利なpluckメソッドをマスターしよう! Railsで週間いいねランキングを作る! slickの公式サイト 【Rails】slickでスライドショーを表示させる slickの使い方からカスタマイズまで【スライダープラグイン決定版】 jQueryスライダープラグイン9選!スライドショーを手軽に作成 どこよりも詳しい万能スライダーjQueryプラグインslick.jsの使い方 【jQuery】一行でスライダーが動く!slickをご紹介! それでは、明日も頑張りましょう!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[ 備忘録 ] Ruby3.0以降の画像ファイルの開き方

動作環境 Ruby3.0.2 Ruby3.0で openメソッド は使えない open-uriを使って画像ファイルを開く際、openメソッドを使用する記事をよく見かけます。 しかしRuby2.7以降、openメソッドは非推奨となり、Ruby3.0以降では使用不可となりました。 Ruby2.7以降の環境でopenメソッドを使うと warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open といった警告が出ます。 Ruby3.0以降の環境でopenメソッドを使おうとすると No such file or directory といったエラーが発生するはずです。 Ruby3.0以降における画像ファイルの開き方 さっそく結論です。 Ruby3.0以降では以下のようにすれば画像ファイルを開くことができます。 require 'open-uri' URI.open('https://hoge.png') 今まではopenで良かったところをURI.openとするだけです。簡単ですね? 参考記事 Ruby 3.0.0 リファレンスマニュアル > ライブラリ一覧 > open-uriライブラリ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

◤備忘録◢ 画像ファイルのダウンロード

動作環境 Ruby3.0.2 Ruby3.0で Kernel#openメソッド は使えない open-uriを使って画像ファイルを開く際、openメソッドを使用する記事をよく見かけます。 しかしRuby2.7以降、openメソッドは非推奨となり、Ruby3.0以降では使用不可となりました。 Ruby2.7以降の環境でopenメソッドを使うと warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open といった警告が出ます。 Ruby3.0以降の環境でopenメソッドを使おうとすると No such file or directory といったエラーが発生するはずです。 Ruby3.0以降における画像ファイルの開き方 さっそく結論です。 Ruby3.0以降では以下のようにすれば画像ファイルを開くことができます。 require 'open-uri' URI.open('https://hoge.png') 今まではopenで良かったところをURI.openとするだけです。簡単ですね? 参考記事 Ruby 3.0.0 リファレンスマニュアル > ライブラリ一覧 > open-uriライブラリ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

◤備忘録◢ Ruby3.0以降の画像ファイルダウンロード方法

動作環境 Ruby3.0.2 Ruby3.0で Kernel#openメソッド は使えない open-uriを使って画像ファイルを開く際、openメソッドを使用する記事をよく見かけます。 しかしRuby2.7以降、openメソッドは非推奨となり、Ruby3.0以降では使用不可となりました。 Ruby2.7以降の環境でopenメソッドを使うと warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open といった警告が出ます。 Ruby3.0以降の環境でopenメソッドを使おうとすると No such file or directory といったエラーが発生するはずです。 Ruby3.0以降における画像ファイルの開き方 さっそく結論です。 Ruby3.0以降では以下のようにすれば画像ファイルを開くことができます。 require 'open-uri' URI.open('https://hoge.png') 今まではopenで良かったところをURI.openとするだけです。簡単ですね? 参考記事 Ruby 3.0.0 リファレンスマニュアル > ライブラリ一覧 > open-uriライブラリ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

◤備忘録◢ Ruby3.0以降の画像ファイルの開き方

動作環境 Ruby3.0.2 Ruby3.0で openメソッド は使えない open-uriを使って画像ファイルを開く際、openメソッドを使用する記事をよく見かけます。 しかしRuby2.7以降、openメソッドは非推奨となり、Ruby3.0以降では使用不可となりました。 Ruby2.7以降の環境でopenメソッドを使うと warning: calling URI.open via Kernel#open is deprecated, call URI.open directly or use URI#open といった警告が出ます。 Ruby3.0以降の環境でopenメソッドを使おうとすると No such file or directory といったエラーが発生するはずです。 Ruby3.0以降における画像ファイルの開き方 さっそく結論です。 Ruby3.0以降では以下のようにすれば画像ファイルを開くことができます。 require 'open-uri' URI.open('https://hoge.png') 今まではopenで良かったところをURI.openとするだけです。簡単ですね? 参考記事 Ruby 3.0.0 リファレンスマニュアル > ライブラリ一覧 > open-uriライブラリ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む