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

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

Ubuntu 24.04に上げたら Rails で libMagickCore-6.Q16.so.6 が見つからなくなった話

## 状況の説明

私のRailsプロジェクトでは、画像処理に`ImageMagick`を利用しており、特に`rmagick`というGemを使っています。Ubuntuを`22.04`から`24.04`にアップグレードした後、アプリケーションをデプロイしようとしたところ、次のようなエラーが発生しました。

“`zsh
LoadError: libMagickCore-6.Q16.so.6: cannot open shared object file: No such file or directory – /deploy/apps/langfix/shared/bundle/ruby/3.3.0/gems/rmagick-6.0.1/lib/RMagick2.so (LoadError)
“`

このエラーは、`libMagickCore-6.Q16.so.6`という`ImageMagick`のライブラリが見つからないことを示しています。

## 原因

Ubuntuのバージョンアップによって、多くのライブラリも更新されます。その結果、依存関係にあるライブラリのバージョンが変更され

元記事を表示

文字列中に同じ文字が並んでいたら1文字にまとめたい

文字列中に同じ文字が並んでいたら1文字にまとめたい場合、Rubyでは`String#squeeze`を利用します。

“`ruby
p “112233445566778899”.squeeze
#=> “123456789”
“`

Python3で、同じことを実現するにはどうすればよいでしょうか?

まず`itertools.groupby`を利用する方法があります。

“`python
import itertools
s = “112233445566778899”
t = ”.join(c for c, _ in itertools.groupby(s))
print(t)
#=> ‘123456789’
“`

内包表記の代わりに`operator.itemgetter`を利用することもできます。

“`python
import itertools, operator
s = “112233445566778899”
t = ”.join(map(operator.itemgetter(0), itertools.groupby(s)))
print(t)

元記事を表示

【Ruby on Rails】学習メモ:配列と繰り返しで金額を集計したい!①

今回はRuby on Railsの学習メモです。
学習の記録および備忘録として記します。

* 前回のRuby on Rails学習メモ
[【Ruby on Rails】学習メモ:配列のエラーにはまった話](https://qiita.com/nat_s/items/0ff31807461d9fe4ab9c)

# 筆者のステータス
引き続き、Ruby on Railsを学習中。
改修を担当している機能にて、配列やループ処理(繰り返し)を用いる場面が増えてきている。

# 実現したいこと
ある事柄に関する、項目別合計金額の集計、表示。
集計対象は次のような要素で成り立っている。

* 大項目
* 中項目
* 金額

本稿では、大項目=品名、中項目=手数料 として記述。
同じ品名でも異なる手数料が設定されている場合があり、金額と手数料(%)をもとに、手数料の具体的な金額を計算する必要がある。

* 集計対象のイメージ
“`
| 品名 | 手数料 | 金額 |
————————
| 野菜 | 5% | 300 |
| 野菜 | 10% |

元記事を表示

例え話で学ぶ rake dbの覚書 w/chatGPT

# rakeとは
rakeとはRubyにおいて色々やってくれるツールのことです。その中でもsinatraやRails上でデータベースに対して何か操作を行いたいときに行うコマンドが`rake db: hogehoge`です。

本記事ではわかるようでわからないrake dbコマンドをみんな大好きchatGPTくんが家の建築に例えてくれたのでわかりやすい(?)例え話を聞きながら理解していきます。

完全に蛇足ですが例え話をchatGPTにイラストまで生成させたので楽しんでいってください。

# rake db:create

プロジェクトフォルダ内のdatabase.ymlファイルに基づいてデータベースを作成します。

開発の途中で作っていくテーブルを保存する場所です。新しくプロジェクトを作成したらまずこのコマンドを実行してデータベースを作ります。

身近なものに例えると、、、

まず、家を建てるためには土地が必要です。rake db:create は、その「土地を購入する」ことに相当します。これは、データベースを作成して、家を建てるための場所(データベース)が準備されるプロセスです。

元記事を表示

『メタプログラミングRuby』138ページのサンプルコードをIRBで実行するとエラーになる

## はじめに

『[メタプログラミングRuby 第2版](https://www.amazon.co.jp/dp/4873117437)』という書籍を読んでいて、混乱した箇所があったため、備忘録としてまとめます。

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

## 問題

p138では`Module#alias_method`の説明がされています。

`Module#alias_method`は既存のメソッドにエイリアス(別名)をつけるメソッドです。

次のサンプルコードで説明されています。

“`ruby:class_definitions/wrapper_around_alias.rb
class String
alias_method :real_length, :length

def length
real_length > 5 ? ‘long’ : ‘short’
end
end

“War and Peace”.length #=> “long”
“War and Peace”.real_length #=> 1

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事