chevron_left

メインカテゴリーを選択しなおす

cancel
やわらかテック https://www.okb-shelf.work/

リモートワークでWEBエンジニアをしています。 自称ミニマリストが配線と戦いつつ、快適なデスク環境を目指し「これは買うしかない」と思ったオススメのガジェットなどを紹介中。 エンジニア教育やプログラミング言語に関する内容も。

ぎょうざ
フォロー
住所
未設定
出身
未設定
ブログ村参加

2023/01/11

arrow_drop_down
  • OpenStructの存在に気づいた時にはすでに非推奨だった

    Rubyを業務で書き始めて3年目になりますが、まだまだ知らないことばかりだなぁと思わされます。 先々週に届いたRubyWeeklyに構造体(struct)について解説している記事が紹介されており、気になったので記事を読んでみるとOpenStructという自分が全く知らない構造体が登場しているではありませんか。 要素(フィールド)を動的に追加・削除することが可能という点でOpenStructは通常の構造体とは異なっています。 通常の構造体 Address = Struct.new(:city) address = Address.new("gifu") address.city = "nagoy…

  • インスタンス作成時の値によって関数の定義を変える方法

    ある日のこと、業務中にチームメンバーから非常に面白い質問がありました。 「インスタンス作成時の値によって関数の定義を変えることって可能ですかね?」 ...とのことです。 どういうことかをもう少し詳しく聞いてみると、以下のようなイメージを持っているようでした。 class Sample def initialize(kind) end end # kindがfooだったら Sample.new(:foo).func(:hello) # kindがbarだったら Sample.new(:bar).func(:hello, :world) これをやりたい理由としては、kind: fooの時にはfun…

  • 「Aを変更したらBも変更してね」コメントはいらない

    いつものようにプロダクトのコードを読んでいた時のことです。 コード内に「Aを変更したらBも変更してね」という旨のコメントがいくつか記載されていることに気づきました。 def do_something # ここを変更したらlibのdo_somethingも変更すること : end このコメントに対して個人的にモヤッ...と感じる部分があるので、自分の考えをまとめてみたいと思います。

  • RuboCopに勝手にオレオレCopを実装してみる

    前回、RuboCopの処理を追いかけました。 長い旅になりましたが、なんとかRuboCopのコマンドが実行されてから画面に結果が出力されるまでの流れを完全に理解しました。せっかくコードを読んだわけなので何かしらの変更が出来ないか試してみたいと思います。 以前、知人からRuboCopにはカスタムCopを設定できるという話を聞いたので、カスタムCopならぬ本体へのCopの追加をやってみました。 今回、追加するCopは「変数名にpが使われている際に警告を出力する」という非常に簡単なものです。 Rubyでは標準出力を行うpという関数が用意されています。 そのためp = ...という変数宣言があると、出…

  • Rubyの出力関数(p pp puts print printf)の違い

    Rubyには標準出力するための関数が複数、用意されています。 今更感はありますが、自分が把握しているだけでも5つも関数がなり、一体、何が違うのやら...。 puts p pp print printf それぞれの出力結果を見比べながら、どのように使い分けるべきかを考察してみたいと思います。 puts 最もよく使われている標準出力がputsではないでしょうか。 putsは指定された値を出力しつつ、改行(\n)を出力してくれます。またドキュメントを見て分かるようにputsは引数を複数(*args)、指定することが可能です。 puts "hello" # hello puts "hello", "w…

  • Rubyのバージョンアップによってエラーが発生するようになった

    バージョンアップによって既存コードが動かなくなる(エラーになる)という現象に初めて遭遇しました。 話には聞くものの、経験したことがなかったので「本当にあるんだ...」と謎に嬉しい気持ちになりました。 バージョンアップをしたのはRuby本体のバージョンです。 元々はRuby2.7系だったものを、少し前にRuby3.1系にバージョンアップしました。しかし、バージョンアップをした当時、エラーが発生するようになっていることには気づいておらず、先日、エラーログの調査する中でようやく気づきました。幸か不幸かあまり使われていない機能だったため、エラーログがほとんど出ていなかったのです。 該当のメソッド エラ…

  • 【Part2 / 2】RuboCopの結果が出力されるまでの実装を追ってみる

    ※この記事はRuboCopの内部実装を読んでみるシリーズの第2記事です。 前回の記事でターミナルでrubocopコマンドを実行するとRuboCop::CLIクラスのrunが呼び出されて、紆余曲折あって各Copのチェックがコールバックとして呼び出されていることが判明しました。そのまま処理を追いたかったのですが、記事が長くなり過ぎたので2つに分割しました。本稿を読んで頂くにあたって前回の記事の内容が深く関わってくるので、ぜひ前回の記事もご覧ください。 [TODO: ここに記事のURLはる] 今回はCopのコールバックが実行されてから結果が画面(ターミナル)に出力されるまでを追っていきます。 Cop…

  • 【Part1 / 2】RuboCopの結果が出力されるまでの実装を追ってみる

    ※この記事はRuboCopの内部実装を読んでみるシリーズの第1記事です。 ある日のこと、いつものようにRuboCopに怒られた際に「RuboCopってどうやって作られてるのかな...」と唐突に気になってしまったのでコードを読んでみることにしました。最初は数日あれば終わるかなと思って始めたのですが、甘かったです...。気づけば二週間も時間が過ぎていました。 全てを詳細に紹介することは情報量の都合上、厳しいのでコアの部分を中心に紹介します。 途中、処理が飛んだりしますが気になった方はぜひ自分でコードを読んでみてください。RuboCopのコードを読むに当たってローカル環境でbinding.irbを仕…

  • RubyでArrayクラスを継承させると面白いことが起きる

    後に改めて記事を書きますが、最近はRubocopのコードを読み進めています。 そんな中で「面白いなぁ...」と感じたコードがあったので紹介がてら動作を確認してみたい思います。 なんと定義されたクラスがArrayクラスを継承させているではありませんか。 module RuboCop module Formatter # Arrayクラスを継承させている! class FormatterSet < Array : end end end rubocop/formatter/formatter_set.rb#L10 FormatterSetクラスは別ファイルに定義された、様々なFormatter(結…

  • Ruby東海 第79回 勉強会に参加してきました

    昨日、Ruby東海 第79回 勉強会に参加させて頂きました。 主催者・参加者のみなさん、お疲れ様でした。非常に楽しい時間を過ごさせて頂きました。 rubytokai.doorkeeper.jp オフラインの勉強会に最後に行ったのが、コロナウイルスが流行り出す前だったので実に約3年ぶりの参加でした。 会場が弥生株式会社さんのセミナールーム(木曽川)で、なんと過去に清流elixirの勉強会を開催していた頃に一度、利用させて頂いたことがあります。その節は本当にありがとうございました。 あの頃から木曽川が何も変わっていたなかったので、岐阜出身の自分は謎に安心しました。 簡単に参加レポートを書いていこう…

arrow_drop_down

ブログリーダー」を活用して、ぎょうざさんをフォローしませんか?

ハンドル名
ぎょうざさん
ブログタイトル
やわらかテック
フォロー
やわらかテック

にほんブログ村 カテゴリー一覧

商用