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

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

【Rails】一定期間でログファイルを削除【手動は卒業】

開発中ってログの容量食いますよね…。
みなさんは、どうしてますでしょうか?

適当なタイミングで削除はしてるのでしょうか?

実のところ私は、開発の際は、pryの方を使うことが多く、正直
ログに関してあまり理解していなかったんですよね…。

ただ、これを機に色々調査してみたので共有いたします!

# rails:ログを削除するコマンド
“`
$ rake log:clear
“`

コンソールで、上記コマンドを実行すればログファイルが消えるかと思います。

ただ、毎回毎回手動で削除するのってかなり面倒ですよね?
そこで、何かいい方法がないか調べてみました。

# ログローテーションとは?
>ログローテーションとは、システムが残す時系列の記録データ(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。また、そのような機能。
[IT用語辞典 e-Words](https://e-words.jp/w/%E3%83%AD%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%

元記事を表示

Minitestで「forkしたRubyのサブプロセスのIO」をテストする

## はじめに

この記事を書いている人も完全には理解していないが、一応解決したので、似たような状況で困っている人のヒントになるように記事を残す。

バインディングを作っている時に、「有る操作を行うと、バインディングのC側のグローバル変数みたいなものが変更されてしまうため、後続のテストに影響を与えないようにフォークしてテストを行いたい」というような面倒なケースがある。

Minitestには、`assert_output`という便利なメソッドがあり、stdoutやstderrのテストができる。しかし、これらはサブプロセスのIOまでは掌握してくれなかったりする。

かといって、spawn使って `bundle exec ruby -r minimap2 -e “hogefuga”` みたいなのを書くというのも嫌な感じがする。なにしろこの場合、bundlerを使わないとテストが成功しない。それはどうなのか。

## capture_subprocess_io を使う

うまい解決策はないだろうか? 実は Minitestの `assert_output` のドキュメントを見ると

> NO

元記事を表示

paizaラーニングの論理演算メニューのrubyの解答例

Paizaラーニングの論理演算メニューのrubyでの模範解答です。
答えだけですみません。
 
STEP: 1 論理積( AND )の基本
https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step1

“`ruby:step1.rb
a,b =gets.split(‘ ‘).map(&:to_i)

if a == 0 || b == 0
puts 0
else
puts 1
end
“`

STEP: 2 論理和( OR )の基本
https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step2

“`ruby:step2.rb
a,b = gets.split(‘ ‘).map(&:to_i)

if a == 1 || b == 1
puts 1
else
puts 0
end
“`

STEP: 3 否定( NOT )の基本
https://paiza

元記事を表示

Windos11環境にて、ダブルクリック一発で7-Zipで解凍する(Lhaplus風味)

#####背景:
7-Zipは速くて好きだけど、zipファイルに関連付けしてもダブルクリックだけでは解凍されない。7-ZipのGUIが開くだけだ。
ダブルクリックで解凍してくれるのはLhaplusだが、7-Zipより遅いし、大きなファイルに弱い。
だから何とかして7-Zipによる解凍をダブルクリックで実行させたい。

#####やってみたこと(失敗):
ググってみた。
ダブルクリックで解凍させるにはレジストリをいじればいいらしい。
レジストリを書き換えてみたが、成果なし。
あいかわらず、7-ZipのGUIが開くだけだ。

#####やってみたこと(成功):
Rubyで7-Zipを呼び出して解凍させた。
Lhaplusのような快適な解凍ができた。

######以下の.rbファイルを作成した:

“`
pasu = ARGV[0]
file = pasu.split(“\\”)[-1]
name = file.split(‘.’)[0]
system(“mkdir \”C:\\Users\\ユーザー名\\Desktop\\opend7z\\#{name}\””)
system(“cal

元記事を表示

Railsのインスタンスメソッドとクラスメソッドの違い

## 概要
Ruby on Railsにおいて__インスタンスメソッド__と__クラスメソッド__についての知識が曖昧だったため
備忘録としてアウトプットします。

## インスタンスメソッドとは
####結論
インスタンスメソッドとは、あるクラスから生成されたインスタンスに対して呼び出すことのできるメソッドです。
#### 使用用途例
例えば、Userクラスにおいて生成されたuserが成年か未成年かを判定したい場合など。
#### コード例

“`ruby
class User
def adult # インスタンスメソッド
self.age >= 20 ? ‘成人’ : ‘未成年’ # 20歳以上なら’adult’, 20歳未満なら’child’を返す処理
end
end

user = User.new(name: ‘田中’, age: 23)
user.adult #=> ‘成人’
“`

## クラスメソッドとは
#### 結論
クラスメソッドとは、クラス全体に対して何か処理を行う場合に使用するメソッドです。
#### 使用用途例
例えば、Userクラ

元記事を表示

【Ruby】自己代入演算子「||=」

“`ruby
hoge ||= 5
“`

「||」演算子の自己代入演算子。**hogeが偽か未定義ならhogeに5を代入する。**
わかりやすく書き直すと↓

“`ruby
hoge = hoge || 5
“`

hogeが**false,nil以外** → 5を返す
hogeが**false** → hogeに5を代入する
hogeが**nil(未定義)** → hogeに5を代入する

##参考

https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#selfassign

元記事を表示

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に記載されている各種

元記事を表示

OTHERカテゴリの最新記事