Ruby関連のことを調べてみた2021年12月27日

Ruby関連のことを調べてみた2021年12月27日
目次

rails7で`to_s`の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生する(`DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.`)理由と対応

# 概要

rails7で`1000.to_s(:currency)`の様に、`to_s`の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生するようになりました。

“`ruby
DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.
“`

この変更はこちらのPRで追加されています。

https://github.com/rails/rails/pull/43772

# 理由
ruby3.1で`symbol`, `true`, `false`, `nil`, `0-9`への`to_s`メソッド使用時のパフォーマンスチューニングが行われました。

https://github.com/ruby/ruby/commit/b08dacfea39ad8da3f1fd7fdd0e4538cc892ec44

railsではactivesuportで複数クラスの`to_s`メソッドを

元記事を表示

【Ruby】クラスとモジュールの違いと使い分け

##クラスとモジュールの違い

– クラスはインスタンスが生成でき、モジュールはインスタンスが生成できない
– クラスは継承でき、モジュールは継承できない

##クラスとモジュールの使い分け

moduleをclassにincludeをして使用できるようにする、ミックスインでの例。
モジュールはクラス間でメソッドを共有することができる。
モジュールをクラスに組み込むことで、クラス定義にメソッドをコピー&ペーストしたのと同じようにモジュールのメソッドをクラスで利用できるようになる。
これは、特定のクラスで再利用したいメソッドがあり、かつ、それを一カ所に集めておきたい場合に便利。

“`ruby
module Cream
def cream?
true
end
end

class Cookie
include Cream
end

cookie = Cookie.new
p cookie.cream?
#=> true
“`

##参考

http://ruby-for-beginners.rubymonstas.org/advanced/modules.ht

元記事を表示

[Rails]Webアプリケーションしか作った事ない僕が、ネイティブアプリケーションを作りたい

#はじめに
初学者の私が、2ヶ月でRailsを学びWebアプリケーションを作れるようになりました。
IOSでリリースをするに至って
まずどのような知識が必要かをまとめる記事になっています。

##React Native

React Nativeは、iPhoneとAndroidどちらでも動かすことができる開発用フレームワークです。
JavaScriptで開発することができるため、JavaやSwiftが書けないエンジニアでも、React Nativeを使えばアプリ開発ができます。
React Nativeの開発言語は、JavaScriptです。そのため、JavaScriptのコードを書ければAndroidとiOSの両方で開発が可能になるフレームワーク

“`
Reactに慣れている人にとっては学習コストの低いReact Native
ネイティブエンジニアには、逆に学習コストが高くなると考えられます。
“`
##Flutter

FlutterはGoogleが作ったモバイルアプリ用のフレームワーク。
「Dart」という言語を使って開発をしていきます。

“`
モバイルアプリ開発

元記事を表示

FizzBuzz問題をRubyで遊ぶ

プログラミングの問題として有名な `FizzBuzz問題`。

普通の回答,ネタ回答,酷い回答など,いろいろな形式で回答してみました。

他にも面白い回答を思いついた方は是非コメント欄で教えていただけるとありがたいです。

# 1. 問題とヒント

この記事で初めて `FizzBuzz問題` を知った方,知っているけれど1度も挑戦していない方もおられるかもしれません。

そこで,「問題文」と「初学者向けのヒント」をはじめに記載いたします。

## 1.1 FizzBuzz問題

1 から 100 までの数値を出力するプログラムを書きなさい。ただし,

– `3の倍数` のときは `Fizz`
– `5の倍数` のときは `Buzz`
– `3と5の両方の倍数` のときは `FizzBuzz`

を数値の代わりに出力すること。

“`none:出力例
1
2
Fizz
4
Buzz
5
…(略)…
14
FizzBuzz
16
…(略)…
98
Fizz
Buzz
“`

## 1.2 ヒント1

`FizzBuzz問題` は大きく2つの要素に分かれます。

– 条件

元記事を表示

【Rails】画像アップロード機能の実装

##手順
①gem “carrierwave“と“mini_magick“をインストール
②uploaders/image_uploader.rbを作成
③uploadersとモデルの紐付けやデフォルト画像の設定、ファイル指定などの細かい設定
④モデルに新たなカラムを追加(例:Postモデルにpost_imageというカラムを新しく追加)
⑤viewの記入
⑥画像アップロードフォーム
⑦画像アップロードに関する日本語化の追加設定

##①gem “carrierwave“と“mini_magick“をインストール
###Carrierwaveとは
Carrierwaveとは、ファイルアップロード用のgem。
Ruby on Railsの画像投稿の仕組みで、よく使われるgemの1つ。

###MiniMagickとは
MiniMagickとは、画像処理ライブラリで、画像サイズ変更や画像反転などといった様々な画像処理を行うことができる。

前提として、 **MiniMagickを使うにはImageMagickというものをインストールする必要があるので注意。**

“`

元記事を表示

【Rails】NO FILEのマイグレーションファイルを削除する方法

## やりたいこと

マイグレーションファイルを確認したところ、完全に削除されていないマイグレーションファイルファイル(NO FILE)がたくさんあることに気づいた。
NO FILE状態のマイグレーションファイルを完全に削除したい。

## 解決方法
ターミナルで以下を実行

“`
rails db:migrate:status
“`
マイグレーションファイル一覧が表示される。
今回は一番上のマイグレーションファイルを削除することにする。(マイグレーションIDが20211112062400のファイル)

“`
Status Migration ID Migration Name
————————————————–
up 20211112062400 ********** NO FILE **********
up 20211112141152 ********** NO FILE **********
up 20211113070815 *********

元記事を表示

Railsでmysql2 gemのbundler installに失敗した時の対処法。LibreSSL→OpenSSLで解決

##経緯
ポートフォリオ用Railsアプリの作成のため、rubyとRailsおよびMySQLのインストールを終えてbundle installしようとしたところ下記のエラーが出て失敗。

“`
(中略)

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. mysql2

(中略)

Don’t know how to set rpath on your system, if MySQL libraries are not in path mysql2
may not load
—–
—–
Setting libpath to /usr/local/Cellar/mysql/8.0.27_1/lib

(中略)

1 warning generated.
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option ‘-L/usr/local/opt/openssl/lib’
ld

元記事を表示

データベース設計においてのインデックスの仕組み

# 結論

“`
「テーブルとは別に検索ように最適化された状態のデータ」
“`

データベースの性能を向上させる方法の一つです。

「探すレコードを識別するデータの項目」
「対象レコードの格納位置を示すポインタ」
で構成されており、これを利用してデータの格納位置を特定し、その位置を直接アクセスする事で、表の検索速度を上げることができます。

###Rubyにはindexメソッドがあります。

##indexメソッドの使い方

“`
オブジェクト.index(“検索したい部分文字列”)
配列の場合は、配列.index(“検索したい配列の要素”)
両者とも見つからない場合はnilが返す。
“`

## 終わりに
初学者です。理解しておくべき事と思い記録しました。
実際に使ったことがないので浅い知識だと思いますが、
また使ってみて、わかりやすく説明できたらと思います。

元記事を表示

Ruby 3.1で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について

## はじめに

2021年12月25日に、Rubyの新しいバージョンであるRuby 3.1がリリースされました。
一方、2021年12月2日に出版した書籍「[プロを目指す人のためのRuby入門 改訂2版](https://gihyo.jp/book/2021/978-4-297-12437-3)」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。

本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。

そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。

というわけで、この記事ではRuby 3.1で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について説明します(第1版との差異ではないの

元記事を表示

類似gemを教えてくれるサイト

gemの選定時に知りたい情報No.1といえば、類似gemの一覧です(当社調べ(調べてない(当社もない)))。

しかしrubyに限らず類似ライブラリの検索というのは意外と難しく、GitHubで検索しようにもキーワードに上手く引っかからないケースが多いです。

導入後に、より要件にフィットする類似ライブラリを見つけたことのある人の割合はなんと三人に五人です(当社調べ(調べてない(当社もない)))。

検索してたら偶然こんなサイトを見つけ、共有したく、この記事を書きました。

(私以外の全人類が知っている情報でしたらすみません)

https://ruby.libhunt.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188872/844d7da3-e87e-b026-a101-766a3a3d8421.png)

類似gemの一覧、及び大雑把な比較情報を出してくれるサイトです。

例えばみんな大好き`Ruby on Rails`ですと、こういう情報が出てきます。

![imag

元記事を表示

Ruby で解く AtCoder ABC 233 D

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。

# 今回のお題
https://atcoder.jp/contests/abc233/tasks/abc233_d

Difficulty: 726
# 解法
今回のテーマ:累積和の応用

“`
入力例 1
6 5
8 -3 5 7 0 -4
“`
まず、累積和を取ります

|入力|累積和|
|–:|–:|
| |0|
|8|8|
|-3|5|
|5|10|
|7|17|
|0|17|
|-4|13|
大人の都合で`0`が入っていますが、通常の累積和とは異なり、単調増加になっていないところが応用編となります。
![20211225a.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

【AWS Lambda/CDK】RSSフィードをツイートするBotを作るLambdaファンクション作ってみた

# 作ったもの

特定のTwitterアカウントをRSSリーダBot化するLambdaファンクションを作ってみました。CDKで構成を管理&デプロイします。

https://github.com/kuredev/rss2witter

# 仕組み

– AWS LambdaでRSSフィードを読み込み、ツイートします
– CloudWatch Eventsで定期実行します
– RSSフィードのURLはLambdaファンクションのコードで管理します(他に手軽な方法が思いつかなかった)

# 準備

## Twitterアカウントを準備する

Botとするアカウントを準備し、Developer Portalで以下のキーを取得します。
取得には電話番号の登録や、メールの返信等が必要なようです。

– consumer_key
– consumer_secret
– access_token
– access_token_secret

## RSSフィードを読み込みツイートするRubyスクリプト

全体のコードは[こちらのリポジトリ](https://github.com/kuredev/rs

元記事を表示

Windows10 に Ruby on Rails の環境構築をしよう

## はじめに
3年ほど前、MacでRailsを使って開発を行っていましたが
現在仕事でMacを使用しないため寂しいことにRailsとも疎遠になってしまいました。年末でせっかく時間もあることだし、とWindowsにRails環境を構築してみようと思いたったため、作業ログとして残します。

## PCのスペック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/40feda6c-747b-60a2-7f72-fe65541b8b81.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/30ce886d-a11d-b7a2-b600-e0b921c2ba70.png)

メモリが圧倒的に低い!
なんとかなるのでしょうか・・・どきどき

## いざ、作業へ
### Rubyを手に入れる!

https://rubyinstaller.org/downloads/

元記事を表示

サンプルコードでわかる!Ruby 3.1の主な新機能と変更点

## はじめに

???この記事は[Ruby Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ruby) 25日目の記事です???

Rubyは毎年12月25日にアップデートされます。
Ruby 3.1については2021年12月25日に3.1.0が正式リリースされました。

https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/

この記事ではRuby 3.1で導入される変更点や新機能について、サンプルコード付きでできるだけわかりやすく紹介していきます。

ただし、しっかり内容を確認する時間が取れなかった機能に関してはNEWS.mdの記載内容を転記するだけに留めています :pray:

### 本記事の情報源
本記事は以下のような情報源をベースにして、記事を執筆しています。

– [NEWS.md](https://github.com/ruby/ruby/blob/v3_1_0/NEWS.md)
– NEWS.mdに記載されている各種

元記事を表示

【Ruby on Rails】コントローラーでヘルパーメソッドを使用する方法

そもそもコントローラーからヘルパーを呼び出せないかな?と疑問に思ったので調べてみた。

# メソッド先頭にview_contextをつけるだけ
結論、コントローラーで「view_context」をつけるだけ。

“`app/helpers/sample_helper.rb
module SampleHelper
def helper_method
# 処理の内容
end
end
“`

“`app/controllers/sample_controller.rb
class SampleController < ActionController::Base def index # 呼びたい箇所で、先頭にview_contextをつけるだけ view_context.helper_method end end ``` 意外とあっという間にできて安心した。 ただ、本来はビューのヘルパーを無理矢理呼び出すよりは、 アプリケーション共通処理として切り出すやり方の方が良いよう。 詳細はこちら、[【Ruby on Rails】コントローラーで

元記事を表示

[py2rb] merry christmas

# はじめに
移植やってます
# merry christmas
“`ruby
require ‘pycall’

PyCall.eval(“print(‘merry christmas’)”)

# `+’: no implicit conversion of nil into String (TypeError)
“`
ぐぬぬ、仏教徒に対する嫌がらせがここに。
# Traceback 1:
“`ruby
def normalize_path(path, suffix, apple_p=apple?)
when File.exist?(path + suffix)
“`
`suffix`が`nil`です。
# Traceback 2:
“`ruby
def find_libpython(python = nil)
# python = nil
python, python_config = find_python_config(python)
# python =

元記事を表示

【最終回】点字メーカープログラムの動画レビュー Part 5 – Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-

## この記事は何?
Qiita Advent Calendar 2021「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」で投稿してもらったコードを出題者である僕、伊藤淳一が動画でコードレビューしてみました。この記事はその第5回(最終回)です。

https://qiita.com/advent-calendar/2021/ruby-challenge

第1回〜第4回のレビュー動画はこちらです。

https://qiita.com/jnchito/items/26e8bd7c635e3d32e620

https://qiita.com/jnchito/items/d5f71c9ad90f2890647e

https://qiita.com/jnchito/items/60c0342971d93b174b6b

https://qiita.com/jnchito/items/5fe4d6d64799d22acf1b

### レビュー対象の記事はこちら!

今回レビューさせてもらったのは以下の20日目と、22日目から25日目の記事です。投稿してくれたみ

元記事を表示

続・勝手に「点字メーカープログラム」を作ってみる~「辛口バージョン」編

#はじめに
これは、[2021年の Ruby アドベントカレンダー2](https://qiita.com/advent-calendar/2021/ruby)の21日目の記事です。
(日が空いていたので、後から飛び込みました)

そして以下、2021年の Ruby アドベントカレンダー2の3日目の記事『[勝手に「点字メーカープログラム」を作ってみる](https://qiita.com/Reichardt/items/57c805989ffecc3e6d55)』の続編になります。

https://qiita.com/Reichardt/items/57c805989ffecc3e6d55

元記事は、「[挑戦者求む!Rubyで点字メーカープログラムを作ってみよう 〜Qiita Advent Calendar 2021〜](https://blog.jnito.com/entry/2021/11/04/092218)」に、勝手に参加したものでしたが、先日、主催者の[伊藤淳一](https://qiita.com/jnchito)さんから追加で以下のような出題がありました。

http

元記事を表示

AWS EC2 AmazonLinux2の中にMySQLを導入したが、起動してくれない時の対策法(自分用メモ)

ローカル環境では、起動できていたMySQLなのですが、AmazonLinux2の配備した途端動かなくなってしまいました。

“`
[ec2-user@ip-10-0-0-165 WorkShare]$ sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit not found.
“`
というエラーが発生。

ググった結果、[AWS EC2 AmazonLinux2の中にMySQLを入れたがすんなり起動してくれず、いろいろやってターミナルからMySQLにログインできるようにした話(駄々流し)](https://qiita.com/miriwo/items/e7afd5e1ae0de94f27c2)と同じようような症状であることがわかったので、参考にさせていだきます!

“`
$ yum list installed | grep mariadb
“`
を実行。CentOS7には「MariaDB」がデフォルトで

元記事を表示

【Ruby】コピー時に元データがなぜか上書きされる【浅いコピー】

コピー先の変数の値を書き換えようとしたら、なぜか、コピー元の方まで値が書き変わってしまう謎現象に遭遇し、困ったのでメモ。

謎現象の原因を探るには「浅いコピー」「深いコピー」「参照渡し」という概念について、それぞれ理解しなきゃならないらしい。

なんでお前が書き換わんだよ!!!お前じゃないんだよ!!!!
と3時間ぐらい一人で格闘していたが、
浅かったのは、私の頭の方だった。

# 浅い頭を悩ませる「浅いコピー」
![【Ruby】コピー時になぜか上書きされてしまう【参照コピー、浅いコピー】.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954103/66cc5e01-98a3-a1aa-2964-abd566a3cc5d.jpeg)

浅いコピーというのは、コピー元のオブジェクトとコピー先のオブジェクトがメモリ上の同一の場所を参照することになります。

っておい、なんじゃそれ :rage:

どうやら、参照先は一緒になるので、
片方に変更を加えると、もう片方のデータも変わってしまうらしい、

元記事を表示

OTHERカテゴリの最新記事