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

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

インスタンス変数の参照

# インスタンス変数とは?
>クラス内部ではインスタンス変数を使うことができます。インスタンス変数は同じインスタンス(同じオブジェクト)内部で共有される変数です。インスタンス変数の変数名は必ず@で始めます。

# ローカル変数
> ローカル変数はアルファベットの小文字、またはアンダースコアで始めます

# ローカル変数に代入されていないとエラーになる
“`rb
irb(main):189* class User4
irb(main):190*
irb(main):191* def initialize(name)
irb(main):192* @name = name
irb(main):193* end
irb(main):194*
irb(main):195* def hello
irb(main):196* # shuffled_name = @name.chars.shuffle.join
irb(main):197* “Hello, I am #{shuffled_name}.”
irb(main):198* end
irb(main

元記事を表示

オブジェクト指向プログラミング関連の用語

# クラス
>クラスは一種のデータ型です。`「オブジェクトの設計図」`とか`「オブジェクトの雛形」`と呼ばれたりすることもあります。`Rubyではオブジェクトは必ず何らかのクラスに属しています`。クラスが同じであれば、保持している属性(データ項目)や使えるメソッドは(原則として)同じになります。

* クラスに属する同じメソッドを使うことができる

# オブジェクト、インスタンス、レシーバ
>クラスをもとにして作られたデータの塊をオブジェクトと呼びます。場合によってはオブジェクトではなくインスタンスと呼ぶこともあります。

また、メソッドとの関係を説明する場合には、オブジェクトのことをレシーバと呼ぶこともよくあります。
>“`rb
>user = User.new(“Alice”, Ruby”, 20)
>user.first_name
>“`
>「ここでのfirst_nameメソッドのレシーバはuserです」。

「レシーバ」は「メソッドを呼び出された側」というニュアンスを出したい時によく使われます。

* クラスから生成されるものをオブジェクト、インスタンス、レシー

元記事を表示

クラスを使うプログラミング

“`rb
users = []
=> []
users << {first_name: 'Alice', last_name: 'Ruby', age: 20} => [{:first_name=>”Alice”, :last_name=>”Ruby”, :age=>20}]
users << {first_name: 'Bob', last_name: 'Python', age: 30} => [{:first_name=>”Alice”, :last_name=>”Ruby”, :age=>20}, {:first_name=>”Bob”, :last_name=>”Python”, :age=>30}]
users
=> [{:first_name=>”Alice”, :last_name=>”Ruby”, :age=>20}, {:first_name=>”Bob”, :last_name=>”Python”, :age=>30}]
users.each do |user|
pusts “氏名: #{user[:first_name]} #{user[:last_n

元記事を表示

【Ruby】each_indexメソッドとselectメソッドの性質の違い

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
現在`Array`クラスを勉強中ですが、その中でも`each_index`メソッドと`select`メソッドの意外な違いを発見したので記事にしようと思いました

# `each_index`メソッドとは
まず、`each_index`メソッドについて簡単に説明します。
`each_index`は、配列の各インデックスを順に処理するためのメソッドです。
通常、配列のインデックスに基づいた操作を行う際に便利ですが、重要な点は、新しい配列を作成する機能を持たないということです。

“`ruby
a = [10, 20, 30, 40, 50]
a.each_index do |index|
puts “インデックス: #{index}, 値: #{a[index]}”
end
“`
このコードでは、各インデックスを順に取得し、対応する要素を出力しています。
しかし、この操作は元の配列を参照するだけで、新しい

元記事を表示

[Ruby]二分探索を行うbsearch, bsearch_indexについて学ぶ

# はじめに
最近、bsearch_indexという未知のメソッドの存在をchatGPT経由で知り、調べてみるとSQLのインデックスにも使用される二分探索を行うメソッドであることを知りました。
そもそも二分探索ってなんだ?という状態だったので、併せて記事にして勉強してしまおう〜という経緯で本記事を作成するに至りました。

# 二分探索とは
二分探索(バイナリサーチ)は、ソートされた配列内から特定の要素を効率的に見つけ出すための探索アルゴリズムです。
通常の線形探索では、配列のすべての要素を一つずつ確認していきますが、二分探索では配列を中央で分割し、目的の値が中央より小さいか大きいかで探索範囲を半分に絞っていきます。
このように**半分ずつ選択肢を消去していく**ことで計算量が O(log n) となり、大規模なデータセットでも高速に処理できます。

注意すべきことは、対象の配列が **ソートされている**ことを前提としていることです。

たとえば、次のようなソートされていない配列があるとします。
“`Ruby
array = [8, 3, 5, 1, 9, 6]
“`

ここで

元記事を表示

エラー発生 画像が表示されない(解決済み)

## はじめに
前回同様ペット健康管理アプリの続き。
日記ページに写真とコメントを投稿したいがページに表示してくれない。
JPGファイルの写真を張りつけ各項目を入力しSENDを押すと以下エラーが出る。
“`
NoMethodError in Diaries#index
app/views/diaries/index.html.erb where line #7 raised:

undefined method pet’ for #
Extracted source (around line #7):
5  <%= image_tag diary.image if diary.image.attached? %

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第10章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– new_record?メソッド
DBに存在する既存のユーザーかそうでないかを論理値で区別できる
– 受け入れテスト(Acceptance Tests)
ある機能の実装が完了して受け入れ可能な状態になったかどうかを決定するテスト
– before_action
何らかの処理が実行される直前に特定のメソッドを実行する
– フレンドリーフォワーディング
ログイン前のユーザーがアクセスしようとしていたページにログイン後リダイレクトする仕組み
session[:forwarding_url]にGETリクエストが送られたURLを保存
– サンプルユーザー
– Faker gem
架空のユーザー名を作成するGem
– seeds.rb
サンプルのユーザーを記述
rails db:seedで実行
– ページネーション
will_paginateで実現
– render @users
Railsは自動でユーザーのコレクションを列挙し、それぞれのユーザーに対して_us

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第9章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– ユーザーごとに記憶トークンと記憶ダイジェストを関連付けることで、永続的セッションを実現できる
– urlsafe_base64メソッド
長いランダムな文字列を生成
記憶トークンとして用いる
– attr_accessor :remember_token
記憶トークンをハッシュ化したもの(記憶ダイジェスト)をDBに保存したいため、attr_accessorで仮想の記憶トークン属性を定義
– update_attributeメソッド
特定の属性をDB上で更新したい際に用いる
バリデーションを回避できる
– cookiesメソッド
cookies.permanentで有効期限が20年に設定される
cookies.encryptedで値を暗号化してcookiesに保存できる(複合もできる)

元記事を表示

企業ネットワークが原因で、RubyGemsが “Could not verify the SSL certificate” となる問題への対応

# はじめに

UTM(SonicWallなど)やSASE(CATO, NetSkopeなど)によりSSL/TLSインスペクションが適用されたネットワーク上で `gem install` などのコマンドを実行すると、次のエラーが発生する場合があります。

“`
Retrying fetcher due to error (2/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://rubygems.org/.
There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn’t have the CA certificates needed for verification. For information about OpenSSL certificates, see http://bit.ly/ruby-ssl.

元記事を表示

【勉強記録】Qiita毎日投稿してから1か月たちました

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
今回は10/6からQiitaを毎日投稿して1か月たったので、自分が実感している効果を載せていこうと思います。

# なぜ毎日投稿しているのか?
理由はいくつかあるので箇条書きで書いていきます
* 周りに監視の目を置いて自分を追い込むため
* 自分のわからないを言語化して整理するため
* 勉強時間が取れない日でもプログラミングに触れられる時間を作ることができる
* 同じ境遇の独学者を見つけるため
* 就職の際に独学を継続した証拠と学習レベルを見てもらうため

## 周りに監視の目を置いて自分を追い込むため
この記事も1か月がたったという投稿にすることで継続する理由を作ろうという意図もあります。
他の人と比べて自分を律することができるタイプだと思うのですが、それでも甘えが出ないように周りから固めるのは定石ですね。

## 自分のわからないを言語化して整理するため
自分のわからない内容をほかのQiitaの記事やリファレンスマニュアル、Chatgptを参照して何となくわかった!と思

元記事を表示

エラー発生(未解決)画像保存、表示がされない。→解決済み

## はじめに
今ペット用健康管理アプリを作っています。
マイページに登録したペットの写真を表示したいのですが、どうしても表示してくれません。(Active Storageインストール済)
表示以前にDBに保存してくれません。
“`my_page.html.erb
<% @pets.each do |pet| %>


<%= pet.kind %>


<%= pet.sex.name %>


<%= pet.birthd

元記事を表示

三項演算子について語ろう

### はじめに
チェリー本を読んでて疑問に思ったこと、備忘含めて書こうと思いました。

### 三項演算子ってなに
**三項演算子**(条件演算子)はある条件に基づいて異なる値を返すための方法です。

### 三項演算子の構造を見てみる
チェリー本に以下のサンプルコードが書いてあり
sum_value = n.even? ? n * 10:nの部分が三項演算子を使っています。
even? ?で自分も??状態でした。

“`
numbers = [1,2,3,4]
sum = 0
numbers.each do |n|
sum_value = n.even? ? n * 10 : n
sum += sum_value
end
“`
### 三項演算子の書き方

“`
条件 ? 条件が真のときの値 : 条件が偽のときの値
“`
even?は偶数ならTure, 奇数ならFalseを返す関数です。
つまり
nが偶数なら n * 10
nが奇数なら n を返すといった処理になっています。
上記処理の結果は64となります。

元記事を表示

Gemfileにgemを記載しても、bundle installで認識されない

## 起きていた事象
– インストールしたいgemをGemfileに記載しても、bundle installでインストールできない

## 原因
– 何らかの操作で、環境変数BUNDLE_GEMFILEが設定されており、特定のディレクトリにあるGemfileしか読み込まない設定になっていた

## 解決策
– bundle configを実行し、環境変数BUNDLE_GEMFILEが設定されているか確認する
– 設定されていたら、unset BUNDLE_GEMFILEで設定を削除する
– source ~/.bashrcで設定を反映させる

## 解決に至った経緯
– Gemfileにgemを記載して、bundle installを実行しても、以下が表示され、インストールできない
“`
The Gemfile specifies no dependencies
“`
– Bundlerのバージョンや依存関係が原因かと思い、調べたが、特に解決できず
– bundlerについて調べていくうちに、bundle configで設定を確認できることが判明
– 実行すると、特定のディレクトリ

元記事を表示

RubyでOpenAIのSpeech APIを読んで、mp3を出力する簡単なコマンドラインツールのスクリプト

## はじめに

標準入力やファイルを引数にとって、mp3を出力したい。
ChatGPT API課金勢なら、OpenAIのAPI叩くのが一番簡単。

“`
echo “この文章をスピーチして” | speech.rb -o out.mp3
“`

gistでもいいのだが、検索しにくいのでQiita。

## 使うもの

– [OptionParser](https://docs.ruby-lang.org/ja/latest/class/OptionParser.html) – オプション引数の解析
– [ruby-openai](https://github.com/alexrudall/ruby-openai) – OpenAIのAPIを叩くライブラリ
– [whirly](https://github.com/janlelis/whirly) – 待ち時間にスピナーを表示

## スクリプト本体

“`rb:speech.rb
#! /usr/bin/env ruby

require ‘optparse’
require ‘openai’
require ‘whirly’

元記事を表示

【Ruby】RubyでROSを動かしてみた

九州工業大学 田中和明研究室の大学院生です。Rubyと産業用ロボットに関する研究に携わっています。

### 背景

ROSでロボットを動かす場合、一般的にはPythonやC++を使用したプログラムが基本です。また、ROSは主にUbuntu上で動作し、ターミナル操作やUNIX系コマンドの習得が初心者にとって大きなハードルとなっています。これらの理由から、ROSの活用には開発環境の習得に時間を要することが多いです。

そこで、今回の提案は、Windows環境でRubyを使用し、Ubuntu上のROSを簡単に操作できるライブラリの開発です。これにより、ROSの操作がより直感的かつ簡単になり、プログラミング初心者やターミナル操作に不慣れなユーザーでもROSを扱いやすくなります。

– RubyでROSを扱うことができる

### 動作環境
– ROS noetic
– Ubuntu 20.04LTS
– Ruby 3.3.3
– Windows11
– 実機 6軸多関節ロボット:安川電機製 mo

元記事を表示

【Ruby】配列の初期化について

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
Rubyを使用して勉強を進めている中で、配列の初期化に関して興味深い性質に気づいたので、この記事でその知識を共有したいと思います。
# 基本的な配列初期化の問題例
行列のように以下のような配列を作成したいと考えてみましょう。
“`math
\begin{pmatrix}
0 & 3 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0
\end{pmatrix}
“`
その場合、以下のコードが思い浮かぶのではないでしょうか。
“`ruby
a = Array.new(3, [0, 0, 0])
a[0][1] = 3
p a # => [[0, 3, 0], [0, 3, 0], [0, 3, 0]]
“`
この例では、配列 `a` に [0, 0, 0] という初期値の配列を3つ格納しようとしています。
しかし、結果として `a`のすべての要素が同じ参照を持つため、1つの要素を変更すると、他のすべての要素にも影響が及びます

元記事を表示

DockerでRuby学習用の環境を構築する

## はじめに:
今回は『プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで』(通称:チェリー本🍒)でRubyの文法などを学習するための学習環境をDockerで構築するにあたって、『せっかくなら自分のアウトプットも兼ねて技術記事を書こう』ということで記事にまとめることにしました。

本記事では環境構築に必要なファイルの準備など実際にどのようにDockerを使って環境構築をしたのかをご紹介します。

初めての技術記事執筆で内容や文章に拙いところがあると思いますがそこはご容赦ください。

## なぜDocker環境での構築を考えたのか?:
Dockerを使うことで、どのマシンでも同じ環境を構築できるというメリットがあります。
Dockerコンテナは、アプリケーションが動作するために必要なソフトウェアやライブラリ、設定をすべて一つのパッケージにまとめているため、環境依存の問題を回避できます。例えば、「自分のマシンでは動くけど、他の人のマシンでは動かない」といたトラブルを避けられます。

# 本文
## 作業用ディレクトリの作成:
“`bash
mkdir st

元記事を表示

RubyのアプリケーションをVercelで動かす

## 概要

Vercelで[Rubyのランタイム](https://vercel.com/docs/functions/runtimes/ruby)もサポートされているそうなので[Sinatra](https://github.com/sinatra/sinatra)で作成したTodoリストアプリを動かしてみました。

実際のコードは下記になります。

https://github.com/K-Sato1995/vercel-ruby-runtime

※本記事はあくまで試してみたレベルですのでProdでの使用等々は自身のご判断でお願いします

![todolist.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258219/745723ae-c3c6-bdb8-d93a-d7ce0088ff87.gif)

## 前提(VercelのRuby Runtime)

[VercelのRuby Runtime](https://vercel.com/docs/functions/runtimes/

元記事を表示

知ってた? Ruby の Enumerable で意外と使えるメソッドたち

こんにちは、とまだです。

Ruby アドベントカレンダー 1 日目の記事をお届けします!

https://qiita.com/advent-calendar/2024/ruby

みなさんは普段から Ruby を使っていると思いますが、`each`や`map`以外の Enumerable メソッドってあまり使ったことないんじゃないでしょうか?
(自分も最初は`each`と`map`しか使ってなかったので、偉そうなことは言えませんが…)

実は`Enumerable`モジュールには、**めちゃくちゃ便利なメソッド**がたくさん隠れています。

今回は、**使える × 面白い**の二軸で選んだメソッドをご紹介します!

## 1. 意外と演算子だったメソッドたち

まずは、数学っぽい演算をしてくれるメソッドを紹介します。

### chain でコレクションを繋げる

よく、配列を結合したいときがありますよね。
そんなとき、`chain`を使うと便利です。

“`ruby
[1, 2].chain([3, 4]) #=> Enumerator: [1, 2, 3, 4]
“`

元記事を表示

【誰でもできる】自作Gemを作って公開するまでの道のり

こんにちは、とまだです。

[Ruby on Rails Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ruby-on-rails)、2 日目の記事をお届けします!

みなさんは、「**自分で Gem を作ってみたい!**」と思ったことはありませんか?

自分が作った Gem(ライブラリ)が世界中の Ruby on Rails アプリで使われるなんて、ちょっとテンション上がりますよね。

そこで、今回は Gem の作り方を**初心者向け**に解説していきたいと思います。

以前、無駄な Gem を作った経験をもとにしているので、よければそちらもご覧ください。

https://qiita.com/tomada/items/579d54283f03a0dc6a9b

## Gem って何?

まずは、そもそも Gem とは何かおさらいしましょう。

Gem とは、Ruby で作られたライブラリやプログラムをパッケージ化したものです。

例えば、以下のようなものが Gem として提供されています。

– **de

元記事を表示

OTHERカテゴリの最新記事