【Ruby】継承とmoduleの使い分け
# はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
その中でもスーパークラスの要素を子クラスに引き継ぐ継承と、`module`の両方を勉強すると、「`module`なくても継承だけでよくない?」と思うようになったのでその違いや使い分けについて本日は解説していきたいと思います# 継承とは
継承は、あるクラスが他のクラスの属性やメソッドを「引き継ぐ」仕組みです。
サブクラス (子クラス) がスーパークラス (親クラス) のすべてのメソッドや変数を継承し、必要に応じてオーバーライドすることができます。
継承の特徴は以下の通りです
* Rubyでは1つのクラスしか継承できない
* クラス間に明確な親子関係があり、サブクラスはスーパークラスのすべての機能を継承する
* サブクラスで親クラスのメソッドを上書きできる(オーバーライド)
* スーパークラスのインスタンス変数や状態も引き継がれるでは、継承はどのような場合に使うのでしょうか
* 自然な親子関係があるとき
たとえば、「犬」や「猫」などの動物が「動物」という概念に含まれる
【Ruby】初学者向け-メソッドの基本について①
本記事ではメソッドの基本的な文法と使用方法をまとめています。
目次
・メソッドの定義方法
・キーワード引数メソッドについて
**メソッドの定義方法**
“`ruby:example_1.rb
def <メソッド> <引数リスト>
# ここに処理を記述
end
“`引数リストは「()かっこ」をつけることも、省略することもできる
“`ruby:example_2.rb
a = 1
b = 2
def test a,b
a + b
=> 3
end
“`
一番最後に行われた処理が結果(返り値)となる
上記のように定義したメソッドは、メソッド名を記述して呼び出すことができる。def式で指定する引数は「仮引数」と呼ぶ
メソッドに引数が設定されている場合は、メソッド名に続いて引数を設定して呼び出す。
メソッドを実行する際に記述する引数を「実引数」と呼ぶ。“`ruby:example_3.rb
# メソッドの呼び出しと実引数の設定
test(3,4)# 呼び出されたメソッドにて、設定された実引数をもとに処理を行う。
Rubyメタプログラミング入門:Railsでの活用例とともに解説
# はじめに
Rubyを使った開発を行っていると、「メタプログラミング」という言葉を耳にすることがあるかもしれません。Rubyのメタプログラミングは、非常に強力で柔軟な機能を提供しますが、最初は理解しづらいこともあります。本記事では、Rubyのメタプログラミングについて、コード例を交えながら解説し、さらにRailsでの具体的な使用例を紹介します。# メタプログラミングとは?
メタプログラミングとは、プログラムが他のプログラムや自身を動的に変更・生成する技術を指します。Rubyは動的な言語であるため、実行時にメソッドを生成したり、クラスの振る舞いを変更することが可能です。これにより、冗長なコードを削減し、開発をより効率的に行えるようになります。# 1. 基本的なメタプログラミングの例
### “`define_method“`を使った動的メソッド生成
“`define_method“`を使うと、メソッドを実行時に動的に定義することができます。以下は、複数のメソッドを一度に動的に生成する例です。“`ruby
class Greeting
[:hello, :goo
エラー発生→解決済【備忘録】
今日困ってやっと解決した件
”’class PrototypesController < ApplicationController before_action :authenticate_user!, except: [:index, :show] #トップページと詳細以外はログインしている人だけ before_action :move_to_index, only: [:edit] def index @prototypes = Prototype.includes(:user).order("created_at DESC") end 省略 def prototype_params params.require(:prototype).permit(:title, :catch_copy, :image, :concept).merge(user_id: current_user.id)♯prototypeはid要らない。userだけmergeする。 end def move_to_index @prototype = Prototype.
【Ruby】初学者向け-言語基礎②
今回は汎用性の高い文法についてまとめていきます。
目次
・三項演算子について
・擬似変数について
・case文について
・ヒアドキュメントについて
・Rangeオブジェクトについて【三項演算子について】
三項演算子とは「条件式?式1:式2」という記述で表される演算子のこと
条件式に一致する場合は「式1」、条件式に一致しない場合は「式2」を結果とします
“`ruby:example_1.rb
a = true# aがtrueである場合は1、そうでない場合は2を結果とする
a = true ? 1 : 2# aを出力
p a# aはtrueであるため1が出力される
=> 1
“`【擬似変数について】
**擬似変数**
…特定の状況で特別な意味を持つ変数のこと。
| 変数名 | 内容 |
|:———–|:————|
| true | TrueClassのインスタンス |
| false | FalseClassのインスタンス |
Ruby Silver 試験対策メモ
Ruby Silver (正式名称:Ruby Association Certified Ruby Programmer Silver version 3) の試験に向けた勉強メモです。
Ruby Silver受験を考えている方の参考になれば幸いです🤗
詳細な試験情報はこちらを確認してください。
https://www.ruby.or.jp/ja/certification/examination/## `!` がつかない破壊的メソッド
– `concat`: 文字列や配列を破壊的に結合
– `replace`: 文字列や配列の内容を引数で与えられたものに置き換えます
– `delete`: 配列から指定した要素を破壊的に削除
– `delete_if`: 条件に一致する要素を破壊的に削除
– `clear`: 配列のすべての要素を破壊的に削除
– `pop`: 配列の末尾の要素を破壊的に取り除く(LIFO: Last In First Out)
– `push`: 配列の末尾に要素を破壊的に追加(LIFO: Last In First Out)
– `shift`: 配列の
mysql2 (0.5.3) がインストールできなかった時の対処法
##### 下記のコマンドで解決しなかった人受けの記事です
“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/zstd
$ bundle install
“`この方法で解決することも多いですが、私の場合は解決しませんでした。
## 最終的な解決方法
##### 最終的には Ruby の再インストールを行うことで問題が解決しました。
この方法で解決できたので、同じような問題に遭遇した方は試してみてください。
## まとめ
Ruby 2.7.3 で `mysql2` (0.5.3) のインストールに失敗した場合、まずは以下のコマンドを試してみましょう。
“`
$ bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl@3/lib –with-opt-dir=/usr/local/opt/
[Rails] Active Recordの関連付け
## はじめに
Ruby on Rails における Active Record の関連付けは、データベース内のテーブル間の関係を簡単に表現する方法です。この記事では、Rails の主要な関連付けタイプについて解説します。
## なぜ関連付けを使うのか?
関連付けを使用する主な理由は以下の通りです:
1. コードをシンプルに保つ
2. データベースの操作を簡単にする
3. モデル間のつながりを分かりやすくする
4. 共通の操作を一貫して行える## Rails の主要な関連付けタイプ
Rails では以下の 6 種類の関連付けがあります。それぞれを日常生活の例を使って説明していきます。
### 1. `belongs_to`(〜に属する)
`belongs_to` は、「このモデルは他のモデルに属している」という関係を表します。
例:生徒は学級に属している
“`ruby
class Student < ApplicationRecord belongs_to :classroom end class Classroom < ApplicationRecord
エラー発生→解決
備忘録として、こんな事で悩んでたなーと将来見返すときの為に記述します。
エラーコード
ActiveModel::UnknownAttributeError in PrototypesController#create
unknown attribute ‘prototype_id’ for Prototype.今までできていた新規投稿が出来なくなった。
createアクションの記述が間違い?訂正前
def prototype_params
params.require(:prototype).permit(:title, :catch_copy, :image, :concept).merge(user_id: current_user.id, prototype_id: params[:prototype_id])
end訂正後
def prototype_params
params.require(:prototype).permit(:title, :catch_copy, :image, :concept).merge(user_id: current_u
Ruby sort_by でソートの基準を設定
# はじめに
本記事はRuby初心者が備忘録として作成したものとなっております。間違い等ありましたら、指摘していただけると幸いです。## sort_byメソッドとは?
ソートの基準を自由に設定するができ、より複雑なコレクションの並び替えが可能になる。
sort、sort_byはどちらも配列をソートするメソッドですがsort_byのほうが処理が速いそうです。“`:Ruby
books = [
{name: “Book2”,price:1000},
{name: “Book1”,price:500},
{name: “Book3″,price:2000}
]sort_book = books.sort_by{ |book| [book[:price],book[:name]] }
puts sort_book
【実行結果】
{:name=>”Book1″, :price=>500}
{:name=>”Book2″, :price=>1000}
{:name=>”Book3”, :price=>2000}
“`降順ソートをしたい場合は `-` を
【Ruby】初学者向け-言語基礎①
Stringについて学んだことを整理しました。
Stringに使用するメソッド一覧
**upcase**
…小文字の文字列を大文字にする
<使用例>test = 'test' test.upcase =>TEST—————————-
**downcase**
…大文字の文字列を小文字にする
<使用例>test = 'TEST' test.downcase =>test—————————-
**slice**
…文字の切り分けを行う
<使用例>test = 'あいうえお' test.slice(1,2) => "いう"—————————-
**size**
…文字の大きさを確認する
<使用例>test = 'あいうえお' test.size => "5"—————————-
**to_i**
…文
Vimerの開発スピードに勝つ為のVSCode拡張機能開発
結論から言うと勝てはしないと思う。
しかし、私は自作のVSCode拡張機能を開発して実際に今の開発チームに使用してもらって、開発効率をかなり上げた。今回は開発した拡張機能の紹介と簡単に作り方を紹介します。
見ていただけた方達の開発効率の助けになれば思います。
実務でRailsを使用しているのでRuby寄りの機能もありますが、考え方は他の言語でも同じだと思います。まずgenerator-codeをグローバルインストールします。これをYoemanで使用するとVS Code拡張のプロジェクトの雛形を生成できます。
“`bash
npm install -g yo generator-code“`
“`bash
yo code_—–_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|–(o)–| │ Studio Code Extension │
`———´ │ generator!
【Ruby】getsメソッドとchompの使い方について
# はじめに
こんにちは、今回はRubyのgetsメソッドとchompメソッドについてお話します。
この2つのメソッドは、ユーザーからの入力を処理するときによく使われますが、意外と知られていない細かい部分もあるので記事にしようと思いました# `gets`メソッドとは
まずは基本的な`gets`メソッドの解説をしていきます
`gets`メソッドは、ユーザーの入力を受け取るためのメソッドです。プログラムが実行されると、キーボードから入力を受け取り、その値を文字列として返します。下の例を見てみましょう。
“`ruby:gets1.rb
input = gets
puts “あなたが入力したのは: #{input}です”# (入力)こんにちは
# あなたが入力したのは:こんにちは
# です
“`
このコードを実行すると、コンソール上で入力を待ちます。例えば「こんにちは」と入力してEnterキーを押すと、上記のように表示されます。
本来であれば、「あなたが入力したのは: こんにちはです」のように出力したいのですが、`gets`のみの場合だとこんにちはのうしろに改行(`\n`)が入りま
それってSetにする価値ありますかね?
# はじめに
競プロ([AtCoder](https://atcoder.jp/))をやっていると、配列の要素数や検索回数が大きい場合、重複削除目的ではなく高速化のために、配列(`Array`, `List`)を`Set`や`Map`(Rubyの場合`Hash`)に変換することはよくあります。
さて、実業務ではどうでしょうか?
実際に扱う配列の要素数、検索回数が$10^6$程度ということはそんなにないかもしれません。
むしろ、要素数や検索回数が100未満ということが多いのではないでしょうか?では、この場合に、配列を`Set`や`Map`(or `Hash`)に変換する価値はあるのでしょうか?
もちろん、`Set`, `Map`(or `Hash`)になったものを、検索する速度が速いことはわかります。しかし、`Set`や`Map`(or `Hash`)に**変換するにもコストがかかります**。
**境界はどこでしょうか?**
今回、`Ruby`, `Javascript`, `Kotlin`で、`Set`, `Map`(or `Hash`)の使用は要素数・検索回数がどれ
Rubyのgemの作り方を学んでみた
## なぜやるか?
普段なんとなく必要なgemをinstallして使っているが
実際どうやって作られて公開されているかを知ってみたかった。## どういうgemを作るか?
今回は、よくSQLのQuery文を忘れることが多いので
入力値から自動でSQL文を作成してくれるgemを作ってみようと思います。
名前は、「sql_craft」にします!## 作ってみる
https://guides.rubygems.org/make-your-own-gem/ を参考に進めます。
まず、以下のようなディレクトリ構成にする必要があります。
“`sh
$ tree
.
├── sql_craft.gemspec # gemspecは、gemの中身、作成者、バージョンを定義する。
└── lib
└── sql_craft.rb # 実際のコードの中身“`
./lib/sql_craft.rb を 以下のように記述します。
とりあえず、入力値を元に
DATABASEのcreate文とdrop文を出力するプログラムを書いてみます。
“`ruby
module SqlCr
2つのモデルを使ってユーザーフォロー機能の実装
この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。
## 記事投稿の背景
Xのクローンサービスを制作している時に自分が躓いたユーザーフォロー機能の実装内容について知識整理も兼ねてまとめたものです。## 実装時のER図(最終版)
![スクリーンショット 2024-10-14 20.41.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/03d3eea2-1ef1-543e-d5d2-8fca3a4a9cc0.png)## 実相当初のコード
“`ruby:user.rbの関連箇所を抜粋
has_many :relations, dependent: :destroy
has_many :followers, through: :relations
“`
“`ruby:relation.rb
class Relation < ApplicationRecord belongs_to
RailsのEnum型を使う
## Enum(列挙型)とは
名前がついた定数の集まりです。
あらかじめ用意した選択肢の列挙からデータを選択することで、可読性の向上, 値の代入ミスを防ぐことができます。## DBのEnum(列挙型)
RailsのEnumを見る前にDBレベルでのENUMについて説明します。
DBのENUMはテーブル作成時に列挙された定義リストに存在する値のみを保管可能になるデータ型です。要するに”banana”, “apple”, “orange”と定義すると、その3種類しか保存ができなくなります。
## Ruby on RailsでのEnum
Railsのenum型は`数値のカラム`に対してプログラム上で扱える別名を付与することで使用することが可能です。重要な点としてDBレベルで見るとカラムの型は`数値`です。
これにより、DBのカラムの型自体をEnumにした場合と比べ、カラムに保存可能な値を変更したい際に、DBの変更が必要になる点や、アプリ側からカラムに保存可能な値がわかりづらいという問題点を解消できます。## Enum型を定義する
今回はAnimalというModelを作成し、k
【Ruby】変数と引数の違いについて
# はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
Rubyを勉強していて当たり前に変数とか引数という言葉が出てくると思うのですが、どう違うの。と言われたら明確に説明できますか?
中高の数学で変数があり、同じ意味でとらえてはいけないよということを本記事で紹介していきたいと思います環境:ruby 3.3.5
# 変数とは
中高生数学でやった変数とは全く別物ということをまず前提で聞いてください。特に独学で勉強している方は、反射的に変数と聞けば`x`や`y`を想像してしまうのではないでしょうか。
知っている単語は無意識的に知っている知識で補おうとするので、勘違いしていることに気づかなくなってしまいます。そういったバイアスがあることを認識してさっそく変数はじめに
こんにちは、progateでRubyを勉強したのち「ゼロからわかるRuby超入門」を勉強しています。
Rubyを勉強していて当たり前に変数とか引数という言葉が出てくると思うのですが、どう違うの。と言われたら明確に説明できますか?
中高の数学で変数があり、同じ意味でと
【Ruby】URI.escapeが使えない
## はじめに
Railsのアップデート中にURI.escapeを使用している箇所でエラーが出たので、その対応をまとめます。## 問題
コード
“`ruby
URI.escape(str)
“`エラー文
“`ruby
NoMethodError (undefined method `espace’ for URI:Module)
“`## 解決方法
Ruby3.0からURI.escapeは削除されました。また、URI.unescapeも削除されています。
代わりに、CGI.escapeやURI.encode_www_formなどを使用します。## 参考
Rubyで自動販売機のプログラムを作成する
## はじめに
[前回](https://qiita.com/at-sacai/private/eb933e1c8f73f28e6741)に引き続き、Ruby学習のアウトプットとして今回は自動販売機のプログラムを作成しました。上記の内容について、備忘のためにメモ書きを残しておくことにします。
## 仕様
Suicaのみで購入可能な自動販売機のプログラムとします。
### Suica
– デポジットとして500円がデフォルトでチャージされているものとする
– Suicaには100円以上の任意の金額をチャージできる
– 100円未満をチャージしようとした場合は例外を発生させる
– Suicaは現在のチャージ残高を取得できる### 自動販売機の在庫管理
– 自動販売機は飲み物を3種類(ペプシ、モンスター、いろはす)を格納できる
– 飲み物は名前と値段の情報をもつ
– 初期状態で、3種類の飲み物はそれぞれ5本格納されている
– 自動販売機は在庫を取得できる|名前 |価格 |
|:——|:—|
| ペプシ |150円|
| モンスター|230円|
| いろは