タグ

Rubyに関するakatakunのブックマーク (245)

  • Ruby の引数の種類をまとめてみた - Secret Garden(Instrumental)

    普段何気なく書いている Ruby なんですが実はメソッドの引数の種類って思ったよりも多くてまとめてみました。 実際自分も Ruby の AST をいじっている時に引数の種類が多すぎて混乱したのでまとめておくと色々と役に立つかなーと。 と、軽い気持ちで書いてみたんですが結構なボリュームになってしまいまsた。 引数の名称とかは調べつつ独断と偏見で書いてあるのでそこら辺はご注意ください。 諸注意 この記事は基的に Ruby 3.1 を元にして動作確認しています 下にも書いてあるんですが 仮引数(parameter) についての解説で 実引数(argument) の話はあんまりでてきません 引数の名称は日語に寄せていますが Ruby 界隈だと英語で書いてある事が多いかも 調べる時は英語の方で調べてもらったほうが情報はでてくると思う 引数という言葉の意味とは 『引数』という言葉には厳密に言うと『

    Ruby の引数の種類をまとめてみた - Secret Garden(Instrumental)
    akatakun
    akatakun 2024/08/15
    位置引数 = 必須引数(a), オプショナル引数(a=nil), 残余引数(a, *b), 後置引数(a*, b), 分割引数([a, b]), キーワード引数 = 必須引数(a:), オプショナル引数(a: nil), 残余引数(**a)
  • Documentation for elasticsearch-api (8.14.0)

  • クラス変数とクラスインスタンス変数を理解する - Qiita

    クラス変数とは クラス変数とはクラスで定義する変数である。クラス変数はクラスメソッド内とクラス定義内、またはそのサブクラスがアクセスでき共有される。 定義方法 class A # @@プレフィックスを使用 @@value = 1 def self.value; @@value; end end クラス変数と継承 クラスAが変数@@valueを定義する場合、そのすべてのサブクラスが@@valueを使える。これは継承のように見えるが、実際は違う。どこかのサブクラスがクラス変数@@valueに値を代入すると、クラス変数のプライベートコピーは作成されず、スーパークラスから見える値がすべて変更される。 class A @@value = 1 def self.value @@value end end A.value # 1 class B < A @@value = 2 end A.value #

    クラス変数とクラスインスタンス変数を理解する - Qiita
    akatakun
    akatakun 2024/03/15
    クラス自体もRubyはオブジェクトとして扱うため、@XXXはインスタンス変数であり、小クラスなどからは参照できない。クラス変数は@@XXXで定義できる
  • [Ruby]あなたはメソッドの再定義(alias_method)を理解しているか。 - Qiita

    alias_methodとは alias_methodは、既存のメソッド名に新しいメソッド名を付けて再定義するメソッドのことです。 また、これによって古いメソッドを新しいメソッドの名前で呼び出すことをアラウンドエイリアスと言います。 class String # lengthメソッドは文字列の長さを測定する 'ABC abc'.length #=> 7 # lengthメソッドからreal_lengthメソッドという名前でメソッドを再定義 alias_method :real_length, :length # 元のlengthメソッドをオーバーライド def length real_length > 10 ? 'Long' : 'Short' end # 元のlengthメソッドの動きが可能(アラウンドエイリアス) 'ABC abc'.real_length #=> 7 # オーバーライ

    [Ruby]あなたはメソッドの再定義(alias_method)を理解しているか。 - Qiita
    akatakun
    akatakun 2024/03/15
    alias_methodは呼び出し時点でそのメソッドの処理をコピーした別のメソッドを再定義する。そのため、元のメソッドがオーバライドされても変更されない
  • Ruby: gemが生成するコードを無名モジュールとprependで動かす(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Using anonymous modules and prepend to work with generated code | Arkency Blog 原文公開日: 2016/02/29 著者: Robert Pankowecki サイト: Arkency Blog 前回のセッター記事で、セッターメソッドがgemによって作成されている場合はどうすればよいのかというコメントをいただきました。このような場合、セッターをどのように上書きできるでしょうか? たとえばawesomeという名前のgemがあり、そのgemのAwesomeモジュールが自分のクラスでawesomeゲッターとawesome=(val)というセッターを導入し、そこに興味深いロジックが仕込まれているとしましょう。これを次のように使うとします。 class Foo e

    Ruby: gemが生成するコードを無名モジュールとprependで動かす(翻訳)|TechRacho by BPS株式会社
    akatakun
    akatakun 2023/09/25
    extendはクラスツリーに突っ込まれるわけではないから、愚直にsuperしてもメソッドが見つからない。メタプログラミングで継承をうまく動かすには工夫が必要
  • Rails でも JSON.generate を使って高速にシリアライズしたい 〜Rails の to_json は遅いが何を実現しているのか〜

    Rails では JSON モジュールの提供している to_json を上書きしています。 JSON モジュールの to_json は C 言語のレイヤーで再帰処理しますが、Active Support の提供している to_json (ActiveSupport::JSON.encode) は Ruby のレイヤーで再帰処理する上、文字列の処理は毎回 ActiveSupport::JSON::Encoding::JSONGemEncoder::EscapedString を生成するので格段に遅くなります。 そのため、速度が求められる箇所での JSON のシリアライズには JSON.generate を使うことを検討すると良いです。 では、JSON.generate を使うべきでないケースにはどのようなものがあるのでしょう? ActiveSupport::JSON.encode が実現して

    Rails でも JSON.generate を使って高速にシリアライズしたい 〜Rails の to_json は遅いが何を実現しているのか〜
    akatakun
    akatakun 2023/02/27
    通常to_jsonはC言語、ActiveSupportによって上書きされるto_jsonはRubyなので便利になるけど遅い,\u2028や\u2029, >, <, &をエスケープする(恐らくJSやHTMLに埋め込まれることをケアする想定)
  • Ruby MongoDB Driver - Ruby MongoDB Driver v2.20

    General InformationDocumentationDeveloper Articles & TopicsCommunity ForumsBlogUniversity

    Ruby MongoDB Driver - Ruby MongoDB Driver v2.20
    akatakun
    akatakun 2022/11/02
    標準ドライバーのドキュメント
  • 【Ruby on Rails】Set#include?がなぜ速いのかを理解する - Qiita

    はじめに この記事はべログ Advent Calendar 2020 18日目の記事です。 こんにちは、べログWebエンジニアの@an_sonyです。 普段は予約サービスのシステム開発をしています。 最近、GoToEatオンライン事業により予約サービスの利用者が増加し(ご利用ありがとうございます!)パフォーマンスチューニングをすることが増えました。 そのチューニング方法の一つで、リストの要素検索処理をArray#include?ではなくSet#include? を使って高速化する をよく使ったのですが、ある時「あれ、ArrayとSetって見た目は似てるのに、なんでこの処理って速いんだろう?」という疑問が浮かびました。 この理由、みなさん答えられますか? 解明するにはSetクラスの中身(実装)を見れば良さそうなのですが、そういえば自分、RubyRailsの中身を一度も見たことありません

    【Ruby on Rails】Set#include?がなぜ速いのかを理解する - Qiita
    akatakun
    akatakun 2022/08/22
    Array の持つ演算機能と Hash の高速な検索機能を合わせ持ちます。内部記憶として Hash を使います。内部的にはHashであるためincludeが恐らくO(1)でArrayより高速
  • Rubyアプリケーションのメモリ使用量上昇問題をjemallocを使うことで解決しました - Studyplus Engineering Blog

    こんにちは、スタディプラスの栗山(id:shepherdMaster)です。 今回はRubyアプリケーションのメモリ使用量上昇問題をjemallocを使うことで解決した話です。 Rubyアプリケーションのメモリ使用量上昇問題 弊社ではRuby on Railsをメインで使っていますが、Rubyアプリケーションを長時間稼働させていると、次第にメモリ使用量が増えていく問題に悩まされていました。 これは、Rubyのメモリ領域の断片化によって引き起こされるそうです(参考) puma worker killerによる定期的な再起動 この問題に対応するため、 puma_worker_killerという定期的にpumaのworkerをrestartさせるためのgemを使用し、メモリ使用量が上昇するのを抑えていました。 しかし、puma worker killerの実行のタイミングでたまにNo conne

    Rubyアプリケーションのメモリ使用量上昇問題をjemallocを使うことで解決しました - Studyplus Engineering Blog
  • File: README — Documentation by YARD 0.9.26

  • [Ruby] rspec-mocksを使ってテストで上手に手を抜こう - Qiita

    対象 rspecでの簡単なテストの書き方は基的に知ってる rspec-mocksを使ったテストを知らないor知ってるけど雰囲気で使っている 上記に当てはまる私自身が、テストをより効率的に書くために、広く浅くざっくり調べた内容なので、より詳しく知りたい人は公式ドキュメントなどを漁ったほうが良いです。 ※記事中に出てくるコードの多くは、rspecによるテストコード内で実行されるコードです。周辺のコードは省略するので、適当に文脈から読み取ってください。 前提 rspec-core (3.7.1) rspec-mocks (3.7.0) rspec-rails (3.7.2) rspec-support (3.7.1) rspec-mocksとは rspec-mocksは、rspec用のテストダブルフレームワーク。モックとかスタブとかスパイとかサポートしてくれる。 テストダブルとは、テスト対象が

    [Ruby] rspec-mocksを使ってテストで上手に手を抜こう - Qiita
  • 今更聞けない! Ruby の継承と mixin の概念を継承リストから学ぶ - Qiita

    ブログ記事からの転載です。 Ruby を学ぶ上で継承と mixin の概念を理解することはとても重要である。 しかし、このあたりの仕組みを学ぼうとすると、include や prepend、特異クラスや特異メソッドなどという様々な機能を理解する必要がありとても複雑である。 そこで記事は『継承リスト』という観点から継承を mixin を学んでみたいと思う。 また、この記事は Ruby 2.4 時点での仕様になる。

    今更聞けない! Ruby の継承と mixin の概念を継承リストから学ぶ - Qiita
  • 手軽に構造体を使いたい時にOpenStruct - Qiita

    OpenStruct 要素を動的に追加・削除できる手軽な構造体を提供するクラスです。 OpenStruct のインスタンスに対して未定義なメソッド x= を呼ぶと、 OpenStruct クラスの BasicObject#method_missing で捕捉され、そのインスタンスに インスタンスメソッド x, x= が定義されます。 この挙動によって要素を動的に変更できる構造体として働きます。 手軽に使える require "ostruct" config = OpenStruct.new config.level #=> nil config.level = :debug config.level #=> :debug

    手軽に構造体を使いたい時にOpenStruct - Qiita
    akatakun
    akatakun 2019/08/01
    要素を動的に追加・削除できる手軽な構造体を提供する,未定義なメソッド x= を呼ぶと、 OpenStruct クラスの BasicObject#method_missing で捕捉され、そのインスタンスに インスタンスメソッド x, x= が定義される,JSON::GenericObject
  • RubyのHashクラスにおけるキーの書きかたいろいろ - Qiita

    phases = { :third => "The Propagation" } => {:third=>"The Propagation"} phases = { :third "The Propagation" } syntax error, unexpected '}', expecting end-of-input { :third "The Propagation" } ^

    RubyのHashクラスにおけるキーの書きかたいろいろ - Qiita
    akatakun
    akatakun 2019/07/16
    シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、両者を仲立ちするような存在です。新しく文字列を生成しない分やや効率がよく、比較も高速。
  • Ruby の Net::HTTP のタイムアウトにハマって、結局 Timeout について調べることになった件 - Qiita

    RubyNet::HTTP のタイムアウトにハマって、結局 Timeout について調べることになった件RubyRailsRails4 外部API を実行するために、Net::HTTP で POST してたんだけど、 何故かタイムアウト値を設定しても適用されなかったので調べた時のメモ 下記が当初作ったコードで、ネットワークを接続しない状態で実行したところ、 何故か 20 秒たってやっとタイムアウトの例外 ( Net::OpenTimeout: execution expired ) が発生 open_timeout の 5 秒で例外が発生するんじゃないの?? サンプル1 def post(url, request_body) uri = URI.parse(url) response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri

    Ruby の Net::HTTP のタイムアウトにハマって、結局 Timeout について調べることになった件 - Qiita
    akatakun
    akatakun 2019/07/12
    接続できないportにアクセスした時や、相手方serverの負荷により、connectionが張れない時などには有効で、そもそもserverが障害等でnetworkがつながってない状態では、DNSの名前解決により、timeoutが割り込めない
  • RubyのCSV処理で気をつけるポイント - Qiita

    トレタ Advent Calendar 2017の7日目記事です。 サービスをスタートして4年がたち、初期のころにつくったCSV処理のコードを最近いくつか修正しました。そのポイントについてまとめようと思います。 こんなコードを CSV.parse(NKF.nkf('-w', params[:file].read)).each do |i| process(i) end open(params[:file].tempfile, 'rt:UTF-16:UTF-8', undef: :replace, invalid: :replace, replace: '') do |f| CSV.new(f, col_sep: "\t").each do |line| process(line) end end ポイント1: 全データをメモリに載せない CSV.parse/CSV.read/CSV.tab

    RubyのCSV処理で気をつけるポイント - Qiita
    akatakun
    akatakun 2019/03/27
    CSV.parse/CSV.read/CSV.tableあたりは全データがメモリにのってしまうので使わないようにします。CSVオブジェクト自体結構でかくなるので注意したい。
  • Vim で tags を使って ruby と gem のソースコードをブラウジングする(翻訳) - Qiita

    Vim で gem のコードを読むにはどうすればいいかを調べていたところ、参考になる記事があったので翻訳してみました。 原著者の許諾を得て翻訳・公開します。 英語記事: Using tags to browse ruby and gem source with Vim :: Jakub Chodounský :: The diary of a software developer 原文公開日: 2016/12/09 著者: Jakub Chodounsky 数ヶ月前、私はシドニーに行きました。そこで私のチームメイトの Andrew が RubyMine のかなり気の利いた機能を見せてくれました。彼はその機能を使い、Ruby のメソッド定義元にジャンプすることができました。それ自体はそこまで特別ではありませんでした、彼がある gem のソースコードにシームレスに移動するまでは ― 私は感動し

    Vim で tags を使って ruby と gem のソースコードをブラウジングする(翻訳) - Qiita
    akatakun
    akatakun 2019/03/01
    vim-rbenvとvim-bundler,gem-ctagsを入れることでrbenv + bundlerで管理しているgemのソースコードにもジャンプできる,ctrl+]: 定義ジャンプ,g+]: 定義ジャンプ(リスト),Ctagsでtagsを生成する
  • GitHub - arbox/nlp-with-ruby: Curated List: Practical Natural Language Processing done in Ruby

  • Ruby での Test::Unit や MiniTest::Unit を使った複数のファイルのテスト - vivid memo

    Perl で複数のテストを実行する場合は prove コマンドがあるけれど、Ruby の場合はどうするのがいいんだろうなー。 と思って調べてみました。 『Rubyベストプラクティス -プロフェッショナルによるコードとテクニック』 によると、Rake::TestTask を使うのが良いようです。 以下のような rakefile を書いて、あとは rake test で実行、と。 # coding: UTF-8 require 'rake/testtask' task :default => [:test] Rake::TestTask.new do |test| # $LOAD_PATH に追加するパス (デフォルトで 'lib' は入っている) test.libs << 'test' # テスト対象ファイルの指定 test.test_files = Dir[ 'test/**/test_*

    Ruby での Test::Unit や MiniTest::Unit を使った複数のファイルのテスト - vivid memo
    akatakun
    akatakun 2019/01/07
    bundle exec rake test
  • ruby - Broken pipe (Errno::EPIPE) - Stack Overflow

    i have a Broken pipe (Errno::EPIPE) error popping up and i don't understand what it is or how to fix it. the full error is: example.rb:19:in `write': Broken pipe (Errno::EPIPE) from example.rb:19:in `print' from example.rb:19 line 19 of my code is: vari.print("x=" + my_val + "&y=1&z=Add+Num\r\n")

    ruby - Broken pipe (Errno::EPIPE) - Stack Overflow
    akatakun
    akatakun 2018/12/07
    ruby onelinerの出力を次の入力に使うときなどは注意