Ruby関連のことを調べてみた2023年11月05日

Ruby関連のことを調べてみた2023年11月05日
目次

高レベル言語から低レベル言語へ: Ruby to C

# 高レベル言語から低レベル言語へ: Ruby to C

オブジェクト指向プログラミング言語は、開発者が効率的にコードを書くことを可能にし、コードの再利用と維持を向上させます。しかし、これらの高レベル言語は、実際にはどのようにコンピュータの低レベルの機構と対話しているのでしょうか?この記事では、高レベル言語Rubyと低レベル言語Cの間のインタラクションを探求します。

## 1. RubyがLinuxで実行されるまで

Rubyコードを実行するとき、いくつかのステップが背後で行われています。これらのステップは、高レベルのRubyコードを低レベルのシステム命令に変換し、最終的にはLinuxオペレーティングシステム上で実行します。ここでは、このプロセスを簡単に説明します。

### MRI (Matz’s Ruby Interpreter)内の処理
#### 1. Rubyコードのコンパイル:

Rubyコードは最初にバイトコードにコンパイルされます。バイトコードは、Rubyの仮想マシン(Ruby VM)で実行可能な中間表現です。

“`ruby
# Rubyコード
def add(x

元記事を表示

【Rails】form_withメソッドでURL指定が必要な場合

# Railsの`form_with`ヘルパーメソッドとURLの指定

Railsのフォーム作成において、`form_with`ヘルパーメソッドは非常に便利ですが、URLの指定が必要な場合とそうでない場合があります。以下に、`form_with`ヘルパーメソッドでURLの指定が必要なケースを説明します。

## 基本の使い方

基本的に、`form_with`ヘルパーメソッドはURLの指定が必要ありません。以下は典型的な使用例です。

“`erb
<%= form_with model: @article, local: true do |form| %>

<% end %>
“`

この場合、フォームは`@article`というモデルと関連付けられ、自動的に適切なURLが生成されます。ただし、いくつかの特別なケースではURLの指定が必要になります。

## ModelとControllerの名称が異なる場合

モデルとコントローラーの名前が異なる場合、`form_with`は自動的にURLを推測できません。この場合、URLを明示的に指定

元記事を表示

【個人開発】アニメをTierで評価するデータベース型サイト「AnimeTierList」を作りました【Rails7 / Docker / GitHub Actions】

## はじめに
はじめまして、@hinata_tashiroです!

現在23歳の男で、2年ほど前からエンジニア転職を目指し、独学で約1年半働きながら学習を続け、退職後にポートフォリオを作成いたしました。

私が独学で学習を進める中で、Qiitaに投稿されている皆様のポートフォリオに刺激をいただいておりましたので、今度は私が同じような境遇の方に刺激を与えられたらいいなと思い、僭越ながらポートフォリオを公開することにしました。

独学・未経験ということで、技術的な誤りなど多々あると思いますので、どしどし指摘コメントをいただきたいです。

## ポートフォリオの紹介
![atl-banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634356/692f7288-b8b2-b0d2-7614-b76f22896cbe.png)

### 概要

AnimeTierListは、視聴したアニメをTierで評価することで、自分だけのTierListを作成することができるサービスです。

ゲストログイン機能

元記事を表示

【Ruby on rails】どちらか一方必須のバリデーション

# はじめに
プログラミングを勉強して2か月半ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。

今回はオリジナルアプリでどちらか一方必須のバリデーションを設定したので、その方法について共有したいと思います。

# Let’s start!!!
今回、私のオリジナルアプリでは、ユーザーがアイテムを投稿する際に、PDFまたは画像のどちらか一方が必須であるバリデーションを設定しました。さらに、両方が入力されている場合も、一方も入力されていない場合も保存を許可しないように設定しました。

それでは、実装していきましょう!

## モデルへの記述

“`item.rb
class Item < ApplicationRecord validate :image_or_pdf def image_or_pdf return if item_image.present? ^ pdf.present? errors.add(:base, '画像またはPDFのどちらか一方を入力してください') end end ``` この例では、カスタ

元記事を表示

Rails ToDoアプリにて 完了機能追加した

この記事を書くことにした理由

これから何度もポートフォリオ制作にて使う気がしたので、今後のために書き残そうとした。

やり方

最初はmigrateの作成or追加から

“`console
$rails g migration テーブル名(例 CreateToDos)
“`
テーブルも新しく作る場合
“`ruby:テーブル名(例 日時_create_to_dos.rb)
class テーブル名(例 日時_create_to_dos.rb) < ActiveRecord::Migration[7.0] def change create_table :テーブル名(例 to_dos) do |t| t.追加したい型(例 string) :カラム名(例 text) t.boolomen :done(一例) t.timestamps end end end ``` 既存のテーブルに追加する場合 ```ruby:テーブル名(例 日時_

元記事を表示

DockerでRails6 + Vite + PostgreSQL(w: pgadmin4)の開発環境をつくる

# はじめに
 Ruby on Rails で、Webアプリ(SPA)を作ってみたくなった。Ruby on Rails にAPIモードというのがあり、フロントエンドと組み合わせて開発ができるらしい。筆者はRuby on Rails を触ったことは殆どないので、自分の勉強のため、まずは開発環境を構築することにした。
 とりあえず、先達の真似をしてなるべく最速でつくりたかった。私はマシンのNodejsバージョンを切り替えるなど管理がおっくうなので、プロジェクトのフォルダの中にDockerで環境を作りたかった。さらにいえば、docker compose up ズドンと一発で作りたい。調べてみたが、「一発」で作っている先達は見つからなかった。途中でDB環境ファイルを書き換えるなどの作業が必要で一発は無理らしい。しかも、RoRはWebアプリ開発初心者に人気とのことであったが、SPA開発Docker環境の構築が初心者向けだとは誰も言ってなさそうだ。
 以下、備忘録として、先達の真似をした事前調査を踏まえ自分なりにうまく行った環境構築例を書いておく。

 なお、本件は以下PC環境での2023年11

元記事を表示

【JS必須知識】プリコンパイル&モジュールバンドラ

# 【JS必須知識】プリコンパイル&モジュールバンドラ

ウェブ開発において、高級言語から低級言語に変換するプロセスを「コンパイル」と呼びます。通常、コンパイラが高級言語から低級言語に翻訳する作業を行います。この記事では、事前翻訳となるプリコンパイルの方法に焦点を当て、アセットパイプライン(sprockets)とモジュールバンドラ(webpacker)について詳しく説明します。

## プリコンパイルとは?

プリコンパイルは、コンパイラが処理できないファイルや言語を事前に翻訳するプロセスを指します。これにより、ウェブ開発において非常に重要なファイルの最適化や結合が可能になり、ウェブアプリケーションのパフォーマンス向上に貢献します。

### **1. アセットパイプライン (sprockets)**

アセットパイプラインは、ウェブアプリケーションのリソース(CSS、JavaScript、画像など)を効率的に管理するためのツールです。以下はアセットパイプラインの主要なステップです。

– **プリコンパイル**: アプリケーション内の各リソース(例: SassファイルやCoffeeS

元記事を表示

パッケージ管理ツールとバージョン管理ツール

# パッケージ管理ツールとバージョン管理ツール

## パッケージ管理ツール

パッケージ管理ツールは、様々なファイルやライブラリ(プログラム部品の集まり)やパッケージ(ライブラリの集まり)の依存関係を適切なバージョンで管理するツールです。以下に示すのは、一般的なパッケージ管理ツールとその主な特徴です。

### Homebrew (macOS向け)

HomebrewはmacOS向けのパッケージ管理ツールで、以下の特徴があります:

– **パッケージの管理**: macOSに必要なソフトウェアやライブラリを簡単にインストール、アップデート、および削除できます。
– **依存関係の解決**: パッケージ間の依存関係を自動的に管理し、適切なバージョンを選択してインストールします。
– **アップデートの簡素化**: Homebrew自体とインストール済みパッケージを最新のバージョンにアップデートできます。

### Gemfile (Ruby用)

GemfileはRubyプロジェクト内でGem(Rubyライブラリ)の依存関係を管理するためのファイルで、以下の特徴があります:

– *

元記事を表示

Dupler: テンプレートエンジンを使って設定ファイルやテストデータを簡単に作成する

みなさん、設定ファイル書いてますか? 私は書いてます。アプリケーションやミドルウェアの設定ファイルから各種クラウドリソースのプロビジョニング用のyml/jsonファイルまで、ITやってると設定ファイル書いて一日終わることもあるのではないでしょうか。というか現代的にはKubernetesですかね。毎日ymlと格闘してないですか?

しかし設定ファイルは環境ごとに大体同じようなものを複数書いたり、あるいは同じ種類(例えばアプリケーションの設定)のものだけどほんの一部だけ違うものがたくさん必要になったり、そういうことありますよね。もちろんAnsibleやらTerraformといったCI/CDツールを導入して自動化する、というのが正攻法ではありますが、プロダクション用途ではないサーバーをとりあえず5台立てて色々検証したいとか、そういう時はとりあえず設定ファイルだけ簡単にテンプレートエンジンで作りたい、とまあ平均的な日本人は考えているに違いありません。

しかし世にテンプレートエンジンは数多あれど、それってライブラリじゃないですか? つまりわざわざプログラミングしなきゃいけないわけ? 俺は別にプ

元記事を表示

bundlerを使ったgemの作り方、公開方法

Rubyのgemパッケージを作成する手順について。bundlerにgem作成を助ける機能がいくつかあるので利用する。

## ひな形の作成

bundle gemでひな形を生成する。

$ bundle gem mylib

gemspecは各gemごとに適当に修正する。ひな形を見ればすぐに内容はわかる。

## 依存ライブラリ

依存ライブラリはGemfileではなくgemspecファイルに記述して、Gemfileからはgemspecを参照するだけにする。

Gemfile
“`
source ‘https://rubygems.org’
“`

gemspec
“`
mylib.gemspec
Gem::Specification.new do |spec|

spec.add_runtime_dependency “hashie”
spec.add_runtime_dependency “json”
spec.add_development_dependency “bundler”
spec.add_development_dependen

元記事を表示

Kaigi on Rails 2023 での学び

# はじめに

Kaigi on Rails 2023に、オフライン参加しました。

https://kaigionrails.org/2023/

全ての発表を見ることはできませんでしたが、それでも多くの学びがありました。
その学びをここにまとめます。

:::note warn
学びは、かなり荒めに書いています。
興味ある学びについては、今後追記するかもしれません。
:::

# 学び

## ジョブ実行中のコンテナ削除を遅延できる

## hako-consoleで、アプリで使っているAWSサービスを把握しやすくなりそう

https://docs.google.com/presentation/d/1Y5ZPVfNNLlTeE5VsT-JbpuWDgF_q1RF6wJHH8JAFV0w/edit#slide=id.g29005d3

元記事を表示

Turboフレームワークと非同期通信

# Turboフレームワークと非同期通信

ウェブページを高速かつユーザーフレンドリーにする方法が、Turboフレームワークと非同期通信です。これらのテクノロジーは、ユーザーに待たせずにコンテンツを提供するために重要です。今回は、Turboフレームワークと非同期通信について分かりやすく説明します。

## Turboフレームワークとは?

Turboフレームワークは、Ruby on Railsの一部として提供されるライブラリで、ウェブアプリケーションの高速化に焦点を当てています。Turboは、Ajaxと非同期通信を活用してウェブページの読み込みを高速化し、ユーザーに優れたエクスペリエンスを提供します。では、Turboフレームワークの核心的なコンセプトを紹介しましょう。

### 1. Ajax(非同期JavaScriptとXML)

Ajaxは、「Asynchronous JavaScript and XML」の略で、ウェブページの非同期通信に利用されるテクノロジーです。非同期通信とは、ウェブページ全体を再読み込みせずに情報を読み込む方法を指します。通常、新しい情報を表示するためには、

元記事を表示

非同期通信が機能しない?TurbolinksによるJavaScriptトラブルを解決!【フリマアプリ開発】

# はじめに

某プログラミングスクールでフリマアプリの商品出品機能を実装中、JavaScriptを用いた価格連動機能において直面した不具合とその解決策を共有します。

# 開発環境
> ruby 3.2.0
> Rails 7.0.8

# 前提
商品の出品価格入力に連動して販売手数料(10%)と販売利益を動的に表示するJavaScript機能を実装しました。しかし、出品ページにアクセスした際に機能が働かず、ページをリフレッシュ(F5)すると正常に動作する現象に直面しました。

“`JavaScript:config\importmap.rb
pin “item_price”, to: “item_price.js”
“`

“`JavaScript:app\javascript\application.js
import “item_price”;
“`

“`JavaScript:app\javascript\item_price.js
const price = () => {
const priceInput = document.getElementById(

元記事を表示

redirectとrenderの違い

# はじめに
何番煎じか分かりませんが、業務の中で気になって色々調べて整理することができたので記事にまとめます。

共通点としては、どちらも特定のコントローラーのアクションから、別のアクション(画面)をひっぱりだしたいときに使用します。

# redirect_to
処理が**成功**したあと、画面遷移を行いたい場合に使用します。
GETのHTTPリクエストを送ります。
コントローラーを経由します。

“`test_controller.rb
def test
redirect_to tests_url
end
“`

# render
処理が**失敗**したあと、エラーメッセージなどを表示する場合に使用します。
コントローラーを経由しません。

“`test_controller.rb
def test
render :new
end
“`

# 役立つかもしれない豆知識

## renderする際は、インスタンス変数を再宣言しないといけない。
コントローラーを経由しないためです。
render先で値を表示するには、render前に値を取得しておく必要があります。

元記事を表示

Rails7 で TODOアプリを作ろう ⑤ (i18nで日本語化)

## はじめに

### 前回は

#### statusをenumへ として

https://qiita.com/tomoaki-kimura/items/94c167b438e0485e2262

– バリデーション
– enum

について学びました。

### 今回は

#### i18nで日本語化 として

– i18n
– enum_help

について学びます。

では、はじめていきましょう。

## 1. I18nを使って日本語対応をする

### I18n

Railsには `I18n` という翻訳のための情報を別記する機能があり、カラム名や指定した情報等任意の情報に対して、言語切替をする事ができます。

この機能を利用して、例え日本人向けのサービスだとしても、日本語を翻訳ファイルに切り出す事によって、コード内に日本語が入る事を防ぐ事ができたり、 表記ゆれを防ぐ事も出来るので慣れておくと良いでしょう。

### config

翻訳ファイルで一番実装したいものとしては、各種のインフォメーションが英語だという事です。

例えば先程の空投稿のエラーですが

[![Ima

元記事を表示

Rails7 で TODOアプリを作ろう ④ (statusをenumへ)

## はじめに

### 前回は

#### TaskのViewにBootstrap5を適用として

https://qiita.com/tomoaki-kimura/items/76279fa062a9d0bc57a8

– bootstrap5

について学びました。

### 今回は

#### statusをEnumへ として

– バリデーション
– enum

について学びます。

では、はじめていきましょう。

## 1. バリデーション

最初に仕込みとなりますが、最低限のバリデーション設定をしておきます。

### バリデーション

バリデーションとはデーターの入力に対して制限を掛ける事で、空入力や多すぎる文字を防いだり、不正な入力を弾く事ができる機能です。

データーの登録前にチェックしようという事ですね。

### SQLのエラー

現在、データーを空投稿しようとすると、

[![Image from Gyazo](https://i.gyazo.com/605139044c452159c93a6113f20aaa84.png)](https://gyazo.co

元記事を表示

Everyday RailsでRspecについて学んだこと

## ドキュメント形式での出力
“`.rspec
–format documentation
“`
この設定を適用すると、実行中の各テストケースの名前が出力されるため、どのテストが成功したか、または失敗したかを一目で把握することができます。

これにより、テストの結果が直感的に理解しやすくなり、問題の特定と修正が迅速に行えるようになります。

### 設定前

設定を加える前は、テストの進捗が`.`や`F`で表示され、どのテストが失敗したのかすぐにはわかりません。

“`markdown
….F…..
“`

### 設定後

`–format documentation`を設定すると、各テストケースの説明が表示されるため、どのテストが成功し、どのテストが失敗したのかが一目でわかります。

“`markdown
計算
二つの数字を加算する
2と2を渡した時
4と等しいこと
-1と-1を渡した時
-2と等しいこと
二つの数字を減算する
2と2を渡した時
0と等しいこと
二つの数字を乗算する

元記事を表示

GoogleMapsAPIを使用した開発1(地図の表示)

# 1.はじめに
投稿された情報(緯度経度)からGooleMapsAPIを使用して地図を表示、地点間のルート検索機能、周辺情報の取得を実装したので知識の定着、復習のために記事を書きます。
一度に書くと長くなるので、4回にわけて投稿していきます。
今回はその1回目でMAP表示まで実装します。

# 2.環境
Ruby (2.6.4)
Rails (6.1.7)
Maps JavaScript API

# 3.前提条件
APIキー取得済み
投稿機能を実装している

# 4.実装
### 使用gem
“`ruby:Gemfile
gem ‘geocoder’
gem ‘gon’
“`

### テーブル構造
“`ruby:schema.rb
create_table “posts”, force: :cascade do |t|
t.string “address”
t.float “latitude”
t.float “longitude”
end
“`

## 1.投稿された住所、地名から緯度経度を保存できるようにする
### 1.gem`ge

元記事を表示

【Ruby】ブロックを理解したい

# 概要
ルビーのブロックは、コードの柔軟性と再利用性を高める強力なツールです。 これを活用すると、メソッドの動作を簡単にカスタマイズでき、これはルビーのさまざまなライブラリやフレームワークでも活用されています。 この記事では、ルビーが提供するブロックが何なのか、そしてどのように使用するのかについて見ていきましょう。

# 対象とする読者
– Rubyのブロックを知らない人

# ブロック
ブロックとは、メソッドが特定の時点で実行できるコードです。 ルビーでブロックを作成する文法は`do···end`と`{ }`の2つが存在します。 普通ブロックのコードがシングルラインなら`{}`、マルチラインなら`do···end`を使います。

**{ }**
“`ruby
method { puts “ここはブロックです。” }
“`

**do…end**
“`ruby
method do
puts “ここはブロックです。”
end
“`

# yield
ブロックとは何かを学びました。 では、一体ブロックはどのように実行すべきでしょうか? ルビーがそのために`yield`とい

元記事を表示

Railsでコードジャンプしたい

## 概要
VScodeの拡張機能でどうにかならんかな〜と思っていたところ、
そういった拡張機能はなかったので設定方法だけまとめておきます

## Railsでコードジャンプする設定方法
VScodeにある拡張機能のRubyは入れておいてください!

1. Command + , で設定を開きます
2. 検索部分に “ruby” と打って検索
3. Intellisenseを false から rubyLocate に変更

上記だけで設定が完了します。
VScode を再起動すれば設定が適応されるはずです。

元記事を表示

OTHERカテゴリの最新記事