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

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

Rails7後からimportmapでBootstrap5を導入するで大いに躓いた

公式や他の記事をみて、以下をおこなった。

“`bash
bin/importmap pin bootstrap
“`

まず、application.jsのimport”popper”でimportに関係するエラー
そうだよね、”@popperjs/core”という名前でpinしているんだもんな、で

“`
pin “@popperjs/core”, to: “popper.js”, preload: true
“`

“`
pin “popper”, to: “popper.js”, preload: true
“`
に変更

次はpopperがbootstrapで見つからないエラー
他のページをみてpin先をcdnに変えたりなど頑張った。
“`
pin “popper”, to: “popper.js”, preload: true
“`

結局application.jsのimportの順番を
“`
import “bootstrap”;
import “popper”;
“`

から

“`
import “popper”;
import “boo

元記事を表示

【gem:Refileの使い方】Railsでの画像投稿機能の実装方法

プログラミング初心者に向けて、Ruby on Railsで画像投稿機能を実装する方法についてご紹介します。今回は「Refile」というgemを使って、[以前解説したRuby on Railsを使って作成したシンプルなToDoアプリ](https://taishi-official.com/2020/04/25/433/)を例に実装していきます。

## 【gem】Refileとは
「Refile」はRuby on Railsのgemで、ファイルアップロードを簡単に実装するためのライブラリです。Refileを使うことで、画像のアップロードやリサイズ、クロップなどが簡単にできます。

またRefileでアップロードされた画像はRailsのActiveRecordを使用して、データベースに画像を保存することができます。GitHub上でオープンソースとして公開されています。

[>> 「Refile」のGitHub](https://github.com/refile/refile)

## 【gem】Refileを使って画像投稿機能の実装
### Gemfileに追記する
ge

元記事を表示

Rails 7.2 (Hotwire) でDeviseのログアウトリンクを作成

最近はRailsのアプリ開発から少し離れていましたが、Rails 7あたりからHotwireやYJITなどおもしろそうな動きもあり、またRailsに興味を持ちはじめています。

Rails 7.2のアプリでDeviseのログアウトリンクを作成したとき、Hotwireに対応する方法がわからなかったのですが、以下の情報を見つけました。

https://dev.to/spaquet/rails-7-devise-log-out-d1n

https://discuss.hotwired.dev/t/simple-method-delete-with-confirm/4834

開発中のアプリには以下のように記述して、以前と同様にログアウトができるようになりました。

“`erb
<%= link_to destroy_user_session_path, data: { turbo_method: :delete, turbo_confirm: t("views.confirm_sign_out") }, class: "dropdown-item" do %>

元記事を表示

ShoryukenをActiveJobのアダプターとして利用する際のリトライの挙動を調べた

# はじめに

Gakken LEAPで働いていますkoboriです。普段はRuby on Railsを使用したWeb APIの開発に携わっています。その中でShoryuken というgemに触れる機会があり、リトライ制御について調べた話について書いていきます。

# Shoryukenとは

ShoryukenはAmazon SQSに対応した、スレッドベースのメッセージプロセッサで、RubyGemとして提供されています。ShoryukenはプレーンなRubyプログラムに組み込むこともできますが、ActiveJobのアダプターとしても利用することもできます。
今回の記事では、ActiveJobのアダプターとして利用する場合のリトライの挙動について調べました。

# Shoryukenのリトライ制御について

ActiveJob経由でShoryukenを利用する場合、ActiveJobの`retry_on`メソッドを利用してリトライの設定を行うことができます。
しかし、単純に `retry_on` を定義すると、意図しない挙動になることが [wiki](https://github.co

元記事を表示

paiza×Qiitaキャンペーン Rubyでコードゴルフ【Dランク】

## はじめに
[paiza×Qiitaコラボキャンペーン](https://paiza.jp/pages/campaign/paiza-qiita) のDランク問題の[コードゴルフ](https://w.wiki/B2n2)にRubyで挑戦しました。
自分なりの解説も交えています。
恐らく最短ではないと思います。ですがせっかくの機会なので、自分の知見をまとめる目的で執筆しました。
さらに短くなるなどございましたら、コメントよろしくお願いいたします!

## N倍の文字列
https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square
#### 問題概要
標準入力で与えられた整数個`*`を繋げた文字列を出力してください。
#### Rubyコードゴルフ解答(16文字)
“`ruby
$><

元記事を表示

iOS で画像に設定したキャプションを Ruby で取得する

# やりたいこと

iOS で画像に設定したキャプション (任意の文字列) を Ruby で取得したいです。

iOS の画像

# 方法

キャプションは Exif 情報として画像ファイルに保存されています。Exif 情報を読み取るために [mini_exiftool](https://github.com/janfri/mini_exiftool) という Gem を使用します。まず [ExifTool](https://exiftool.org/install.html) というコマンドラインツールをインストールしておきます。そして mini_exiftool をインストールします。

“`shell-session
$ gem install mini_exiftool
“`

そして MiniExif

元記事を表示

【Rails】update_attributesが使用できない

## はじめに
Railsのアップデート中にupdate_attributesを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
以下のように、update_attributesを使用するとエラーが出ます。
“`ruby
@user.update_attributes(attributes)
“`

## 解決方法
Rails6.1からupdate_attributesは使用できなくなりました。
代わりにupdateを使います。
“`ruby
@user.update(attributes)
“`

## 参考

元記事を表示

備忘録: Nokogiri v1.16.1のXML::Readerへの変更を咀嚼してみる

>v1.16.1 / 2024-02-03
>Fixed
>
>- [CRuby] XML::Reader defaults the encoding to UTF-8 if it’s not specified in either the document or as a method parameter. Previously non-ASCII characters were serialized as NCRs in this case. [[#2891](https://github.com/sparklemotion/nokogiri/issues/2891)\] ([@flavorjones](https://github.com/flavorjones))

これが気になったので、まず既存のxmlパースの書き方と問題の`XML::Reader`の書き方を比べて、ライブラリのソースコードを見に行ってみる。

“`rb
# frozen_string_literal: true

require ‘nokogiri’
require “debug”

raw_xml =

元記事を表示

【個人開発】趣味でバンド活動をする私が、練習で使いたいタスク管理アプリを作りました🎸

# はじめに
初めまして。かめと申します。
未経験からのWebエンジニア転職を目指して、学習を続けております。
この度、バンド活動をする社会人に向けた、タスク管理ツール「bandmemo(バンドメモ)」を開発いたしました。

**▼サービスURL**
https://bandmemo-app.com/
**▼GitHub URL**
https://github.com/kame-0707/graduation_bandmemo

[![Image from Gyazo](https://i.gyazo.com/35c01695ae5f80b111b5ee763e70c76b.png)](https://gyazo.com/35c01695ae5f80b111b5ee763e70c76b)

# 開発した理由
これまで、仕事と両立しながら趣味で複数のバンドに所属してきました。
バンド活動は、実際に体験してみると細かいタスクが多いです。

社会人バンドのタスク内容例

“`
【ライブ運営の場合】
– ライブ会場を抑える
– イベント

元記事を表示

PassengerMaxRequestsの設定と動作確認

# 導入

Phusion Passenger上で動作しているRuby on Railsアプリケーションでメモリリークが発生していると思われる事象が起きていた。
[公式のリファレンス](https://www.phusionpassenger.com/library/admin/apache/memory_leaks.html)にのっとり、暫定対処のため`PassengerMaxRequests`を設定することにした。

OSやWEBサーバー(Apache or Nginx)によってフォルダ構成や設定ファイルが置かれている場所など諸々違いがあるので設定の方法を覚書として残すのは意味のあることだと思っている。また初心者的にはリファレンスを読むだけでは`PassengerMaxRequests`を設定するとサーバーがどのような動作をするのかがわからなかったので簡単ではあるが説明したいと思う。

# 環境

“`shell
Amazon Linux 2

$ passenger-config –version
Phusion Passenger 6.0.6

$ httpd -v
Ser

元記事を表示

【Ruby】include, prepend, extendの違いと使い分け

## はじめに

クラスにモジュールを取り込む方法として、`include`, `prepend`, `extend`の3つがあります。

この記事では3つの方法の違いと使い分けについてまとめていきたいと思います。

なお、この記事におけるバージョンは**Ruby 3.3**です。

## そもそもモジュールとは?

モジュールは関連するメソッドや定数をグループ化したものです。

クラスと似ていますが、以下の2点で異なります。

– モジュールはインスタンス化できない
– モジュールは継承できない

複数のクラスに共通の機能を提供したり、名前空間を分割してメソッド名の衝突を避けたりしたい場合に用いられます。

## `include`の使い方と特徴

`include`はモジュールのメソッドをクラスへ取り込むために使われます。

### メソッドの探索順序

`include`を使うとモジュールがメソッドの探索順序に組み込まれます。

その結果、次の順序でメソッドが探索されます。

1. クラス自身に定義されているメソッド
2. `include`されたモジュールのメソッド
3. スー

元記事を表示

中級DAY25記事に「いいね」しよう + 記事にアイキャッチを設定しよう

![deitora_stady_header.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870482/a8947be5-b1ce-b1a3-c1c0-adc2c9d7f363.png)

## 概要
**学習内容:** データベースのリレーション「n対n」の関係について学習し、特に「いいね」機能を実装するための設計方法を学びました。
* * *
## 学んだ主要な概念やスキル
~1. n対nのリレーションの理解~
複数のユーザーが複数の記事に「いいね」をする関係を実現するためには、n対nのリレーションを理解する必要がある。
例えば、ユーザー1が記事2と記事3に「いいね」し、ユーザー2が記事1に「いいね」するような場合など。

2. 中間テーブル(ライクステーブル)の役割
ユーザーと記事の関係を管理するために、中間テーブル(ライクステーブル)を作成する。
例えば、中間テーブルには、ユーザーIDと記事IDが格納され、これによってどのユーザーがどの記事に「いいね」したかが管理される。

3. アク

元記事を表示

replaceメソッドを活用した関連テーブルの更新

# はじめに

Rubyには“`replace“`というメソッドがあります。

Rubyの配列 (Array) やハッシュ (Hash) などのオブジェクトに対して使われ、対象オブジェクトの内容を別のオブジェクトの内容で置き換えるメソッドです。

https://docs.ruby-lang.org/ja/latest/method/Array/i/replace.html

よく見るのは

“`ruby
a = [1, 2, 3]
a.replace [4, 5, 6]
p a #=> [4, 5, 6]
“`

“`ruby
hash1 = { a: 1, b: 2 }
hash2 = { c: 3, d: 4 }

hash1.replace(hash2)
puts hash1.inspect #=> { c: 3, d: 4 }
“`
この辺りでしょうか??

今回は“`replace“`を配列やハッシュではなく、ActiveRecordと一緒に使ってみることにします。

# replaceを使ったコード例

:::note

元記事を表示

【Error解消】VS.Codeのシェルがタイムアウトする

# 解決方法

その1.ダウンロードのフォルダからアプリフォルダへ移動

🦊 恥ずかしい・・・

その2. **.bash_profileと.bashrcを作成**

🐹 フォルダを2重で作成しちゃった時があって1つを削除したんだけど、その時に一緒に消しちゃったのかも。

# 原因の追及編〜

🐹 VS.codeを開いた時、これまで無視していたエラーだったけど消える気配もないので手をかけることに。

> Cannot update while running on a read-only volume. The application is on a read-only volume. Please move the application and try again. If you’re on macOS Sierra or later, you’ll need to move the application out of the Downloads directory. This might mean the application was put on quaranti

元記事を表示

ねえ、知ってた?「Railsドキュメント」はRailsの公式ドキュメントではないんですよ、という話

## TL;DR(最初に結論)

– Railsドキュメント( https://railsdoc.com/ )というサイトはRailsの公式ドキュメントではない
– 最初のとっかかりをつかむために参照するのは良いが、情報の裏取りとして公式サイトの情報も併せてチェックしよう

## はじめに

上記のTL;DRに書いた話をすでに知ってる人や、わかっている人はこの記事を読まなくても大丈夫です。
ですが、Railsを学び始めた初心者プログラマのみなさんは意外と勘違いしている人が多そうなので、注意喚起を兼ねてこの記事を書いておきます。

## 「Railsドキュメント」はRailsの公式ドキュメントではない
Rails関連の調べ物をすると、検索結果の上位によく上がってくる「Railsドキュメント」というサイトがあります。

![Screenshot 2024-08-24 at 11.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/c29064d5-b9ff-f8d1-311b-5061d95

元記事を表示

初めての自作Gem体験記: CSVデータをYAML形式で出力するツールを作ってみた

## はじめに

このたび、人生で初めて自作のGemを公開しました。

自分用の簡単なスクリプトを整えただけではありますが、実際に公開したことで、多くの学びがありました。

そこでこの記事では、公開したGemの概要や作成のきっかけ、苦労した点などをまとめたいと思います。

## 公開したGemの概要

今回作成したのは、CSVファイルをYAML形式に変換して出力できるGemです。

シードデータ投入のためのYAMLファイルを作成することが目的です。

主な特徴としては以下の点が挙げられます。

– CSVファイルを簡単にYAML形式に変換
– 自動的にデータ型(数値やブール値など)を推論し、正しい形式で出力
– 生成されたYAMLファイルは、追加の変換作業なしで直接Railsのシードデータとして使用可能
– 任意のディレクトリからCSVを読み込み、任意のディレクトリにYAMLを出力可能

詳細な使い方のイメージはREADMEをご覧ください。

https://github.com/kazuyainoue0124/csv_to_yaml?tab=readme-ov-file#exampl

元記事を表示

【Rails】findとfind_byの違いを理解する

## はじめに
Railsでデータベース操作を効率的に行うためfindとfind_byの違いを調べたのでメモとして残します!
それぞれのメソッドの動作や使いどころを簡単な例を通じてお伝えできればと思います。

## 両者の違い
### findメソッド
Rialsの公式より
> find(*args)
Find by id – This can either be a specific id (ID), a list of ids (ID, ID, ID), or an array of ids ([ID, ID, ID]). ‘ID` refers to an “identifier”. For models with a single-column primary key, `ID` will be a single value, and for models with a composite primary key, it will be an array of values. If one or more records cannot be found for the requ

元記事を表示

【個人開発】Qiitaで投稿を断念してしまった私が、3ヶ月越しに「初学者向けの技術記事アプリ」を作成しました!💐

## はじめに
初めまして。
2024年1月よりプログラミングスクールRUNTEQに通っている、sayaと申します。
今回スクールの卒業制作として、**技術記事投稿したことがない/投稿に苦手意識を感じている方向けの技術記事投稿アプリ**を作成しました。

①投稿へのハードルが低いこと
②第三者からの反応内容を確認できること
③継続して投稿できること
を目的に、約2ヶ月に渡り開発を行ってまいりました。

### サービスURL: [Miniita(ミニータ)](https://www.miniita.com/)
### GitHub: [リポジトリ](https://github.com/s17w09/Miniita)
[![Image from Gyazo](https://i.gyazo.com/f9acd6ce27eb2065aac3cfb78aee5c24.png)](https://gyazo.com/f9acd6ce27eb2065aac3cfb78aee5c24)

3ヶ月前にQiitaで記事を投稿するのを断念してから、この度このような形で記事を投稿できることをとても嬉し

元記事を表示

rbs-inlineに触れてみた

# はじめに

この記事は、rbs-inlineを触ってみた際のメモ的な記事です。rbs-inlineのREADMEを参照しながら動かしてみました

https://github.com/soutaro/rbs-inline

## 検証しているバージョン

– Ruby 3.3.4
– rbs-inline 0.6.0
– steep 1.7.1

# 導入

RubyやBundlerは導入ずみであるとします。

## 1. bundle install

`bundle init`でGemfileを作成し、その中にrbs-inlineを追加します。

“`Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

gem ‘rbs-inline’, require: false
“`

追記したら、`bundle install`。

“`text
$ bundle install
Fetching gem metadata from https://rubygems.org/…
Resol

元記事を表示

RubyでC++のバインディングを作成するRiceのドキュメントをChatGPTで日本語に翻訳しただけの記事

::: note
RubyでC++のバインディングを作成するために、Riceの公式ドキュメントをChatGPTでにほんごに翻訳しました。
:::

https://github.com/ruby-rice/rice

https://ruby-rice.github.io

## はじめに

Riceは、C++ 17対応のヘッダオンリーライブラリで、2つの目的を持っています。まず、既存のC++ライブラリに対するRubyのバインディングを簡単に作成することができます。次に、RubyのC APIに対してオブジェクト指向インターフェースを提供し、Rubyを埋め込んだり、C++でRubyの拡張機能を書くことを簡単にします。

Riceは、[Boost.Python](https://github.com/boostorg/python) や [pybind11](https://github.com/pybind/pybind11) と似ており、C++とインターフェースを作る際に必要な定型コードを最小限に抑えます。これにより、RubyオブジェクトをC++に、またその逆に変換するための型情報を自

元記事を表示

OTHERカテゴリの最新記事