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

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

【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

元記事を表示

【個人開発】勉強場所の検索サービスを作成しました ✍️

# はじめに
初めまして。ゆうき(@yuki31100725)と申します。

現在、プログラミングスクールRUNTEQに通ってRuby on Railsを学習しております。

今回、スクールの卒業制作として「**LearnLocator**」という、勉強場所(自習室・コワーキングスペース)の検索サービスを作成しました。

### サービスはこちら
https://www.learn-locator.com/

### GitHubリポジトリはこちら
https://github.com/Yuki11saitou/LearnLocator

Image from Gyazo

本サービスとロゴに込めた思い

このロゴは、羽根ペンで筆を走らせるようなイメージと、LearnLocatorの「 L 」を組み合わせたデザインにしています。

また、サービス全体で「 白 」を基調としたデザイン

元記事を表示

SleniumでiFrameのある要素を取得するには

### 環境

Ruby2.6
selenium

### 内容

ブラウザからDevToolsでElementsを確認すると、要素は確かに存在するが、SleniumからHTMLの要素を指定すると、**no such element** のエラーが出るときがあります。そのような場合は、**iFrame**が使われている可能性があります。

“`sample.rb
puts driver.page_source
“`

そのような事象が発生したときは、Sleniumから取得しているHTMLを調べてみよう。標準出力させてテキストにリダイレクトすれば簡単に確認することができます。

iFrameを使っている場合、DevToolsで表示されるように、すべてのHTMLが展開された形式で表示されるわけではありません。リダイレクトして取得したテキストファイルから要素を検索してみてください。iFrameを使っていれば、検索しても要素見つからないはずです。存在しない要素を指定したため、当然**no such element** と出てくるはずです。

iFrameを複数使っている場合は、どこのiFr

元記事を表示

[Ruby][Python] 任意の文字を Unicode コードポイント (U+1234 という形式) に変換する

## やりたいこと

任意の文字を Unicode コードポイント (U+1234 という形式) に変換したいです。

![U+1234](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/2f779430-32cd-f6d5-243a-43a443b52913.png)
🔼 https://www.compart.com/en/unicode/U+1234 より

Ruby と Python それぞれでの方法を紹介します。

## Ruby

[String#ord](https://docs.ruby-lang.org/ja/latest/method/String/i/ord.html) と [String#%](https://docs.ruby-lang.org/ja/latest/method/String/i/=25.html) を使います。

“`shell-session
$ ruby -v
ruby 3.3.6 (2024-11-05 revision 75015d4c1f) [arm

元記事を表示

【Rails】N + 1問題についてそろそろちゃんと向き合わなきゃな…

# 「あー、N+1問題ね。うんうん…もちろん考慮すべきだね」
と言いつつ朧げな理解のままここまで生きてきました。
歴が長くなるにつれこういう基本的なことを知らないのがバレると恥ずかしいので
恥をかく前にちゃんと理解しておこう。

## eager_load

指定したassociationをLEFT OUTER JOINでキャッシュする

“`
orders.eager_load(:order_items)
“`
“`
SELECT
`orders`.`id` AS t0_r0,
`orders`.`store_account_id` AS t0_r1
FROM
`orders`
LEFT OUTER JOIN `order_items` ON `order_items`.`order_id` = `orders`.`id`;
“`
## preload

ordersテーブルからデータを取得
取得してきた`order`のidを持つ`order_items`をIN句で取得
クエリが2回実行される
“`
orders.pre_load(:order_items)
`

元記事を表示

namespaceとは

# Namespace
Namespaceと検索すると名前空間という言葉が出てきた。
### 名前空間とは?
p265
>クラス名の予期せぬ衝突を防ぐ`「名前空間(ネームスペース)」`を作る場合によく使われます。たし、`名前空間を作る場合はクラスよりもモジュールが使われることが多い`です。名前空間やモジュールについては第8章で説明します。
* 名前空間とnamespaceは同じのようだ。
* 名前空間はクラスよりもモジュールが使われることが多いです。

# 名前空間を分けて名前の衝突を防ぐ
> 自分だけ使う小さなプログラムを書いているうちはあまり問題になりませんが、大規模なプログラム>や外部に公開するライブラリを作ったりするときはクラス名の重複が問題になることがあります。例えば、ある人が「野球の二塁手」という意味でSecondクラスを定義したとします。
>“`rb
>class Second
> def initialize(player, uniform_number)
> @player = player
> @uniform_number = uniform_nu

元記事を表示

Ruby on Railsの課題の取り組み方(RUNTEQの課題を通して学んだ課題の取り組み方について)

Hello!しっしーです🦁

僕は、現在RUNTEQというプログラミングスクールに通い、
Ruby on Railsを使ってWebアプリ開発の技術習得を目指しています!

そして、現在は5ヶ月目に突入!
総学習時間はざっくり800時間くらいになります。
(※独学時の学習時間も含むHTML、CSS、JSがメイン)

そんな僕が、現在どのように課題と向き合い、
どのように問題解決をしているのかをまとめてお話しすることで、

これから学習をしていく方の参考になるのではないか?と思い!

現在の課題の取り組み方をまとめておきたいと思います。

## 目次:

– [Ruby on Railsの課題に取り組む時の心構え](#ruby-on-railsの課題に取り組む時の心構え)
– [Railsの課題の進め方](#railsの課題の進め方)
– [まとめ](#まとめ)

## Ruby on Railsの課題に取り組む時の心構え

まず、課題に対する心構えについてお話しします。
当然ですが、ある程度学習を進めているとはいえ、
僕は全くの🔰初心者です。

なので、何もわかりません笑

なので、ち

元記事を表示

【Ruby】sortとsort_byの違い

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日は`sort`と`sort_by`の違いについて解説していきたいと思います。
Rubyを勉強しているうえでsortかsort_byどちらを使うかわからない方もいると思いますが、それぞれ使う場面やパフォーマンスが違います。
それぞれ見ていきましょう

# `sort`メソッドの特徴
`sort`メソッドは、配列やリストのすべての要素を昇順に並べ替えた新しい配列を返します。
デフォルトでは <=> 演算子を使って比較を行いますが、ブロックを渡すことでカスタムのソート条件も指定できます。
`sort`の特徴は以下の通りです

* デフォルトのソート順
<=> 演算子での比較に基づき、昇順にソートされます。
* カスタムのソート条件
ブロックを渡すと、そのブロックの評価結果に従ってソートされます。
* 安定性
sortメソッドは「安定なソート」ではないため、同じ値の要素の順序が保証されません。
“`ruby
numbers = [5, 3, 8, 1]
# 昇順ソート
sort

元記事を表示

ユーザー登録機能で誕生日の年月日を一覧表示して選択する 【備忘録】

## はじめに
新規ユーザー登録で誕生日を入力することはよくあると思うので記録残しておきます。
“`new.html.erb

<%= f.label :birthday, "誕生日" %>
<%= f.date_select :birthday, use_month_numbers: true, start_year: 1930, end_year: (Time.now.year - 5), field_order: [:year, :month, :day], prompt: { year: '--', month: '--', day: '--' }, date_separator: '' %>

元記事を表示

【Ruby】%記法のまとめ

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
現在たのしいRubyという教材を使用してArrayクラスについて学んでいますが、その中で%記法(%wと&i)を習いました。
もしかしたら、これら以外にも%記法があるのでは?と思い調べたのがこの記事を書こうと思ったきっかけです。
では、%記法について解説します。

## `%q` と `%Q`(文字列)
* `%q`:シングルクォート(’)と同じ扱いで、特殊文字や式展開が無効です。
* `%Q`:ダブルクォート(”)と同じ扱いで、特殊文字や式展開が有効です。
“`ruby
name = “Ruby”
puts %q(Hello\nworld) # => Hello\nworld(特殊文字はそのまま)
puts %Q(Hello #{name}) # => Hello Ruby(式展開が有効)
“`

## `%w` と `%W`(文字列の配列)
* `%w`:スペース区切りで文字列の配列を生成します。式展開や特殊文字は解釈されません。
* `%W`:ダブルクォートと同じ

元記事を表示

macOS利用の初心者Rubyプログラマは要確認!9つの開発環境チェックポイント

## はじめに:これは何?

僕は[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)でメンターをやっています。
これまでたくさんの生徒さんたちを見てきましたが、まあまあの頻度で「開発環境がおかしいせいで、不思議なトラブルに巻き込まれるケース」を見てきました。

具体的には「Appleチップなのに、間違ってIntel版のセットアップを行っているケース」です。
特にプログラミング初心者の人はネットの記事を見よう見まねでセットアップするので、本人も知らないうちにおかしなセットアップをしていることがあります。

この状態だと「ある程度は正常に動くが、どこかで謎なトラブルに巻き込まれて無限に時間を溶かしてしまう」という問題が発生しやすいです。

そこで、この記事ではmacOSでRubyを動かしているプログラミング初心者の方を対象に、開発環境のチェックポイントを9つ紹介します。

「AppleチップとかIntelとか、今まで全然気にしたことがなかった」という人は、特に危険かもしれません。
問題がなければ10分程度で終わるので、ぜひ最初から順にチェックしていってく

元記事を表示

ユーザー設定(devise)駆け足説明 【備忘録】

## はじめに
サイトを作る際に新規登録、ログイン、ログアウトのユーザー設定は必ず行うものなので詳細は省きとりあえず設定できるよう駆け足で説明。

1.Gemfileの最後の行に以下を入力
“`Gemfile
gem ‘devise’
“`
2.ターミナルに順番に入力
“`
% pwd  # 現在のディレクトリが作成中のアプリ名であることを確認して
% bundle install # Gemをインストール
% rails s # サーバー再起動
% rails g devise:install # deviseファイル作成
% rails g devise user # deviseコマンドでUserモデルを作成
“`
これでユーザー関連のモデルやマイグレーションも自動で生成してくれて
以下のようにroutes.rbにルーティング追記されている。
“`config/routes.rb
Rails.application.routes.draw do
devise_for :us

元記事を表示

【Ruby on Rails】renderとredirect_to

renderを勘違いしていたので整理。
## renderメソッド
renderメソッドは、呼び出すビューファイルを指定することができる。
“`ruby:例
render :edit
“`
コントローラー内で使用するメソッドだが、処理がうまくいかなかったときに、元のページに戻る処理で使われることが多い。
理由は、元のページのデータをそのまま保持することができるため。

## redirect_toメソッド
redirect_toメソッドは、指定のurlへ遷移するようリクエストを送信している。
コントローラー内で使用し、pathやURLを指定する。
“`ruby:例
redirect_to root_path
“`
renderがビューファイルを指定しているのに対して、redirect_toは再度ルーティングを通してコントローラーで処理が行われている。

## renderメソッドでのビュー再表示
renderメソッドは便利で、フォームでの入力ミスがあった時でも、元のページに戻り、かつ入力値が残ったままになる。
しかし、ビュー内で他のコントローラーに定義されているインスタンス変数

元記事を表示

Lightsailで立ち上げたRedmineのadminユーザーのpassを忘れてしまった

## 経緯
タスク管理ツールとしてRedmineを利用していて
急にadminユーザーとしてログインができなくなった際に焦ったので
同じ過ちを犯さないためにメモ

## Redmineとは
RedmineとはそもそもRailsによって作成されたタスク管理ツールです。
ここを理解していると焦らず対応することができる

## やったこと
Lightsailサーバのコマンドプロンプトから、もしくはssh可能であれば自身のターミナルからsshしてアクセスをする。

1. Redmineのインストールディレクトリに移動
例:
“`
cd /var/lib/redmine
“`
わからなければ
“`
sudo find / -name “config.ru” 2>/dev/null
“`

2.Railsのコンソールを開く
“`
bundle exec rails console -e production
“`

3.ユーザーのlogin 属性を出力
“`
User.all.each { |user| puts user.login }
“`
ここでadmin: trueと記載さ

元記事を表示

Tailwind CSSでレスポンシブが効かない!! ビューポートメタタグ

Tailwind CSSを使ってレスポンシブデザインを作成しているのに、画面サイズを変えてもデザインが変更されない!!
### その原因は、**ビューポートメタタグ**がないことでした!!

## ビューポートメタタグとは?

ビューポートメタタグは、ブラウザに「どのように画面サイズを扱うべきか」を指示するものです。このタグがないと、ブラウザはデスクトップ向けのサイズを基準にしてしまい、スマホやタブレットでの表示が崩れることがあります。

### 必要なタグ
以下のコードをHTMLの``内に追加しましょう。

“`html

“`

これで、ブラウザがデバイスの画面幅に合わせてページを適切に表示するようになります。

## このタグの役割

1. **`width=device-width`**
デバイスの画面幅をそのままビューポートの幅として使用します。これにより、ページが画面に収まり、横スクロールが発生しにくくなりま

元記事を表示

【Ruby】エラーハンドリングのまとめ

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日はRubyのエラーハンドリングについてまとめていきたいと思います。

プログラムを書く際、エラーが発生するのは避けられません。
エラーハンドリングを適切に行うことで、プログラムが予期しないクラッシュを回避し、ユーザーに分かりやすいメッセージを表示するなど、より安定したコードが実現できます。
Rubyのエラーハンドリングの基本を具体例を交えながら見ていきましょう。

# エラーハンドリングが必要な理由
Rubyはエラーが発生した際に原因を知らせてくれますが、それでもエラーハンドリングが重要な理由を以下のポイントに分けて解説します。

### 1. エラー発生時のカスタムメッセージの表示やログの記録
`rescue`を使うと、エラーの種類に応じてカスタムメッセージを表示したり、エラー内容をログファイルに保存できます。
特にユーザーが利用するアプリケーションでは、ユーザーに理解しやすいメッセージを表示することで、エラー内容を適切に伝えることができます。
“`ruby
begi

元記事を表示

OTHERカテゴリの最新記事