Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

【Ruby Gold】Moduleクラス

# Moduleクラスとは
モジュールのクラス。

[参考:class Module (Ruby 3.3 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/class/Module.html)

# Moduleクラスが提供する特異メソッド
## new メソッド
名前の付いていないモジュールを新しく生成する。
モジュールの名前は、そのモジュールに代入される定数が割り当てられる。
“`rb
m = Module.new
p m # =>#

Foo = m
p m # =>Foo
“`

[参考:Module.new (Ruby 3.3 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/method/Module/s/new.html)

:::note warn
モジュールとクラスの違いで、「モジュールは単独でインスタンス化できない」とあるが、これは名前の付いているモジュールの特徴で

元記事を表示

最終課題を終えて

2024年2月からプログラミングオンラインスクールに入学し早4ヵ月。
PCを購入するところから:sweat_smile:始まり、ようやく最終課題のフリマアプリを完成できたので全体を通して振り返りや今後についてまとめたいと思います。

#### きっかけ
プログラミングを習おうと思ったきっかけは現職(美容師)であと何年働けばいいんだろう・・・?という不安からでした。
一人息子を一人で育てる親として、現職では収入も時間も満足に確保できないと考えていました。

#### なぜプログラミング?
これは単純に憧れです:flushed:
現場で立ち仕事、カラー材でシャツは汚れ、手は荒れ、長時間労働している美容師からすると(スマートに仕事をこなす美容師さんもいます!あくまで私の現状です:pray_tone1:)、
PCカタカタ(カッコいい!)、リモートワークで家事育児仕事をこなせる仕事って魅力的過ぎました!
また、淡々と同じスタイルを100回切ってようやく1スタイル身につけたり、毎日何十人・月何百人の初めましてのお客様と約2時間マンツーマン対応する臨機応変能力は、プログラミング初心者に必要な探求心・

元記事を表示

Rubyでデザインパターン (1) Iteratorパターン

## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

## Iteratorパターンとは
Iteratorパターンとは、集合体に対して順番にアクセスするためのインターフェースを提供し、その実装を容易にするデザインパターンです。
詳しくは以下の記事をご覧ください。

https://qiita.com/shoheiyokoyama/items/3f42d0057d9d5a861039

## Rubyでのコード例
元々のJava等での実装に則って実装すると以下のような形になると思います。
ただ、Rubyではこのような実装を行うことはあまりないと思います。(詳しくは次の項で解説します)

“`rb
class ItemListIterator
def initialize(item_list)
@item_list = item_list
@current_index = 0
end

def has_next?
@current_index < @

元記事を表示

Quineから始めるRuby超絶技巧プログラミング入門

# はじめに

あなたは **超絶技巧プログラミング** を知っていますか?

書籍「あなたの知らない超絶技巧プログラミングの世界」では以下のように書かれています。

> 超絶技巧プログラミングとは、「実用的なプログラミング言語を使って全く実用的でないものを作る遊び」です。

超絶技巧プログラミングの例として、以下のようなものがあります。

上記のポストを投稿した tompng さんが RubyKaigi にて紹介していた超絶技巧プログラミングに魅了され、僕も入門してみました。

この記事では、書籍「あなたの知らない超絶技巧プログラミングの世界」の紹介と、書籍に記載の方法で作ってみたオリジナルのプログラムの紹介を行います。

https://gihyo.jp/book/2015/978-4-7741-7643-7

# 超絶技巧プログラミング

様々な種類の超絶技巧プログラミングがあります。書籍では以下のプログラムの紹介がありました。

– 自己生成プログラミング (Quine

元記事を表示

Ruby safe navigation operator (ぼっち演算子)

# 概要
Ruby on Railsを勉強していて
あまり見かけない演算子が出てきたので
メモとして残しておきます。

# 例
“`.ruby
user && user.authenticate(params[:session][:password])
“`
のような論理値(boolean値)の条件式を
“`.ruby
user&.authenticate(params[:session][:password])
“`
という風に短縮して記述できる。

元記事を表示

実務未経験の初心者がRailsを学習してみた

# ① はじめに

初投稿になります🌷
IT業界に未経験で転職して約1週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます!

# ② 使用した教材

今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。

![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)
                       

元記事を表示

PythonエンジニアがRubyでスクレイピングをしてみた

# はじめに
普段、Pythonでコードを書いていますが、最近Rubyにも興味を持ち始めました。
言語によって同じコードでどのくらい違いがあるのか気になったので、RubyとPythonで`Selenium`を使った同じスクレイピングを行ってみました。
学習のためのアウトプットなので、間違い等あれば指摘していただけると幸いです。

# Rubyのスクレイピング

## 1. パッケージのセットアップ
“`shell
gem install selenium-webdriver
“`

## 2. コード
“`ruby
require ‘selenium-webdriver’

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument(‘–headless’)
driver = Selenium::WebDriver.for(:chrome, options: options)

driver.navigate.to ‘https://qiita.com’

puts driver.title

元記事を表示

Ruby エイリアスメソッド

# エイリアスメソッドについて
Rubyには全く同じ機能でありながら異なる名前のメソッドが複数存在します。これらのメソッドのことをエイリアスメソッドと呼びます。
可読性向上やプログラマーの好みによって使い分けられています。(メソッドによっては派閥がわかれているとか…)

以下にエイリアスメソッドの一例を記載します。

# エイリアスメソッド一覧

## Array クラス

– `map` と `collect`
– `size` と `length`
– `slice` と `[]`
– `append` と `push`
– `prepend` と `unshift`

## Hash クラス

– `store` と `[]=`
– `size` と `length`
– `key` と `index`
– `to_s` と `inspect`

## String クラス

– `size` と `length`
– `slice` と `[]`
– `to_s` と `to_str`

## Enumerable モジュール

– `collect` と `map`
– `f

元記事を表示

低凝集について学んだことをRubyコードに落としてみる

ミノ駆動さんが書かれた「良いコード/悪いコードで学ぶ設計入門 」という書籍の**低凝集**について、自分が理解しやすいRubyのコードに落したものを書いていきます。
自己理解を目的としているのでメモ程度に雑に書いていきます。

## Staticメソッドの誤用
Staticメソッドは、クラスのインスタンスに依存しない処理を定義する際に便利ですが、これを乱用するとクラスの凝集度が低下します。以下は、誤ったstaticメソッドの使用例です。

“`ruby
class Utility
def self.calculate_sum(numbers)
numbers.reduce(:+)
end

def self.format_date(date)
date.strftime(“%Y-%m-%d”)
end

def self.send_email(to, subject, body)
# 仮のメール送信処理
puts “Sending email to #{to}: #{subject}\n#{body}”
end
end
“`

元記事を表示

条件文のリファクタリング-ポリシーパターン

特定の処理を実行するための条件がコンテキスト毎に異なる場合のリファクタリング作業で、ポリシーパターンの「条件をクラス化する」という考え方がとても役立ったので紹介します。

参考にした書籍はこちら

良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方

## 例)キャンペーン機能

キャンペーン機能の仕様として、以下の項目があるとします。

1. キャンペーンにはカテゴリーが存在する

1. キャンペーンの様々な処理はカテゴリー毎に異なる(部分的に一致しているものもある)

例として、キャンペーンの参加条件について考えます。
カテゴリーが normal のキャンペーンは以下のように実装されているとします。
joinable? メソッドは、キャンペーンに参加できるかどうかを真偽値で返します。
以下の全てを満たすときに true を返します。
– 有料化員である
– キャンペーンを達成していない
– キャンペーンに参加していない

“`ruby
class Campaign::Normal
def initialize(campaign)
@cam

元記事を表示

DockerのHealthCheckでコンテナの実行順序を制御する。

## はじめに
プログラミング学習コミュニティ「progaku」で行っているチーム開発で取り組んだ内容になります。

## コンテナの実行順序の制御が必要になった場面
Dockerで環境構築を行い、初めてDB作成のコマンド実行する際に以下のようなエラーが発生
“`
docker compose run backend rails db:create
“`

エラー内容
“`terminal
[+] Building 0.0s (0/0) docker:desktop-linux
[+] Creating 3/0
✔ Network [ネットワーク名] Created

元記事を表示

基礎知識④Active Recordについて

## はじめに
転職活動をする中で、MVCそれぞれの役割やhttp通信についてなど、基礎的な技術知識について問われるシーンがあったので、改めて基本に立ち返って自己学習しようと思った。

出題例にActive Recordについての質問があり、
そういえばちゃんと説明できないな〜…と思ったので学習内容をまとめる。

## Active Recordとは
Ruby on Railsで使用されるデザインパターンの一つで、**DBとのやり取りを簡素化してくれる**もの。
本来DBとやり取りをするためにはDB言語であるSQLが使われますが、
RailsにはこのActive Recordが適用されているため、
複雑なSQL文を書かなくてもRubyで直感的にDBとのやり取りを記述することができる。

### Active Recordで出来る主なこと
– CRUD機能のサポート
Create Read Update Deleteといった基本的なデータ処理機能を
メソッドを用いて簡単に行うことができる。

– モデル同士のアソシエーション
異なるモデル間を結ぶことができます。
ex)1ユー

元記事を表示

Rubyのoptparseの使い方をわかりやすく解説

Rubyでコマンドライン引数を扱いたい場合、どのように実装したら良いでしょうか?
Rubyでは、そうした場合に使える標準ライブラリとして「optparse」というライブラリが用意されています。optparseを使えば、複雑なコマンドライン引数の定義と解析を簡単に行うことができます。
本記事では、optparseの基本的な使い方をどこよりも分かりやすく解説したいと思います。

## optparseの基本的な使用の流れ
Rubyのリファレンスを見ると、optparseを使用する流れについて以下のように書かれています。

1. OptionParserオブジェクトoptを生成する
2. オプションを取り扱うブロックをoptに登録する
3. opt.parse(ARGV) でコマンドラインを実際に解析する

これらのステップにより、コマンドライン引数の処理を簡単に実装することができるのですが、そもそもoptparseを初めて使用する人にとっては、この流れだけを見てもさっぱり分からないと思いますので、以下のサンプルコードを使って、各ステップの内容を具体的に説明していきます。

“`ruby

元記事を表示

基礎知識③HTTPについて

## はじめに
転職活動をする中で、MVCそれぞれの役割やhttp通信についてなど、基礎的な技術知識について問われるシーンがあったので、改めて基本に立ち返って自己学習しようと思った。

## HTTPリクエストとHTTPレスポンスについて
– HTTPリクエスト
ユーザーがブラウザ(PC上で見ている画面)からサーバー(サイトページの情報が存在するコンピュータ)へ送るもの
– HTTPレスポンス
ブラウザから送られてきたリクエストに応じた情報を返す(レスポンス)こと

ユーザーがブラウザを通じてサーバーに「このページが見たいよ〜」とリクエストし、
そのページの情報をレスポンスするというのが一連の流れですね。

## HTTPメソッドとは
クライアントからサーバーへ「なんの要求なのか」を伝えるメソッド

– GET
サーバーにリクエストを送る時に使うメソッド。
リクエストの内容に沿って、サーバー側で情報を検索して取得することができる。
リクエストの内容はURLにクエリとして含まれる。
そのため、キャッシュカードの情報や個人情報など機密データを取り扱う場合はおすすめしない🙅‍♀️
リクエスト

元記事を表示

基礎知識②ルーティングについて

## はじめに
転職活動をする中で、MVCそれぞれの役割やhttp通信についてなど、基礎的な技術知識について問われるシーンがあったので、改めて基本に立ち返って自己学習しようと思った。

### ルーティングとは
どのURLにどのようなHTTPメソッドでアクセスがあった場合にどのコントローラのどのアクションを呼び出すかを定義したもの
アクセスを受けてどのアクションへ案内する仕組み

### ページを作る流れについて
基本的にはルーティング→コントローラ→(モデル)→ビュー
モデルは必要な時とそうでない時があるので適宜

– ルーティング
アクセスがあった際に、どのコントローラのどのアクションを実行するかを定義した案内板、対応表

– コントローラ
モデルとビューを仲介する役
ビューからの入力、データ更新、削除などの操作に応じてモデルに依頼。
モデルで処理されたデータをビューに渡す。

– モデル
データベースの操作を担当。
データの登録、更新、削除を行い、処理された結果をコントローラに返す。

– ビュー
ビューに書いてあることをHTMLファイルとして表示。
システムにおけるユーザーイン

元記事を表示

他の言語からRubyを学ぶならTry Rubyがオススメ!

ある日、業務でRubyを使うことになり、Rubyを学ぶ方法を探していたところ、Ruby公式サイトで非常に役立つリソースを発見しました。それが [Try Ruby](https://try.ruby-lang.org/) です。他の言語をある程度触ったことがある人にとってTry RubyがRubyを最短で学ぶのに最適なツールだと思います!

## Try Rubyとは?

[Try Ruby](https://try.ruby-lang.org/) は、ブラウザ上でインタラクティブにRubyを学ぶことができる無料のチュートリアルサイトです。

## いいところ

### 簡単に始められる

他の言語を学んだ経験がある方なら、最初に環境構築に苦労したことがあるかもしれません。しかし、Try Rubyならブラウザだけで完結するため、
インストールや設定は一切不要で、すぐに始められます!

### 可愛いイラスト

![try ruby](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403148/737177ac-c6

元記事を表示

基本知識①MVCモデルとは

## はじめに
転職活動をする中で、MVCそれぞれの役割やhttp通信についてなど、基礎的な技術知識について問われるシーンがあったので、改めて基本に立ち返って自己学習しようと思った。

## MVCについて
### 「MVCモデル」とは
システム開発の方針の一つ。
「Model」「View」「Controller」の3つに役割を分担させコードを管理する。

#### なぜ分けるのか?
1. 保守性の向上
コードを役割ごとに分けることで、システムにバグが起こった時、バグ発生箇所を特定しやすい。
また、例えばViewでバグがあったとして、ControllerやModelに影響が少なく、影響範囲を小規模で止めることができる。

2. 生産性の向上
コードが役割ごとに独立しているため、管理がしやすい。
分担作業がしやすい。

### Modelとは
**表示や入力に関連しない処理**
DBとのやりとりを担当。
データの登録・更新・削除の処理を担う。
処理したデータはControllerに送る。

### Viewとは
**表示や入力に関する処理**
HTMLなど、ユーザーが実際目にするページの

元記事を表示

Dockerを使ってRails7.1環境の構築をしてみる

Railsで学習をする機会があったので、7.1の環境を自身のPCに作ってみたので
構築方法を記録する。

(環境)
Mac(バージョン:14.5 チップ:Apple M2)

(構築)
Rails:7.1.3
Ruby:3.3.2
MySQL8.0

## memo
* Rails7になってWebPackが不要になった
* 途中でDockerfileが書き換わるので、build前にDockerfileを一部変更した

# 1.Docker for Macのインストール
(インストール済みならスキップ)
https://docs.docker.com/compose/install/

# 2.Rails / MySQLアプリケーションを設定

## 2-1.ファイル用意

開発していくディレクトリにアプリケーションを構築するために必要な4つのファイルを設定する。

“`
{プロジェクト}
|_Dockerfile
|_Gemfile
|_Gemfile.lock
|_entrypoint.sh
|_docker-compose.yml
“`

元記事を表示

Web API 混在の Rails アプリケーションで500エラーを適切に処理したい

## はじめに

Rails で、Web API でJSONを返すものと、HTMLのページを返すものを混在させたアプリケーションを `rails new` で作成していました。

routing で、Web API は、 `/api` 以下にマウントしていました。

`/api/xxx` で Web API が呼ばれて想定外のエラーが発生した時、JSON でレスポンスを返すようにしたいと考えたのですが、意外に手間取ったので自分用にメモしておきます。

なお、動作確認は、Rails7.1 で実施しています。

## 500エラーを発生させる
意図的に 500 エラーを発生させるために、Controller で以下のようなコードを書きます。

“`ruby
class Api::UsersController < ApplicationController def index raise StandardError, 'error' end end ``` ## 何もしない場合 何もしない場合、Rails は、`/500.html` を返します。JSON ではなくて、H

元記事を表示

gemが上手く動作せず、gemの内部処理でデバッグしたい/モンキーパッチを作りたいときのやり方

gemの怪しいと思った部分をoverwriteして、binding.pryを追加すれば、追加した場所で止まってくれます。

overwriteのやり方
https://qiita.com/arakaji/items/dbf26f0b1d1c4659ef32#%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%86

元記事を表示

OTHERカテゴリの最新記事