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

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

【Ruby】二項係数(nCr)の素数modを求めるコード

# 結論
“`Ruby:Ruby
# r<=0の挙動には注意 def nCrMod(n, r, mod) numerator = ((n - r + 1)..n).inject { |result, item| result * item % mod } # 分子 denominator = (1..r).inject { |result, item| result * item % mod } # 分母 puts numerator * (denominator.pow((mod - 2), mod)) end ``` 急ぐ方が多いと思うので始めに持ってきました。 このコードに至る経緯や解説は下に書いていきます。 # はじめに はじめまして、糸井と申します。 2022年4月に友人と競プロを始めてハマっています! 言語はRubyです。競プロで高みを目指すということも目標ですが、Rubyの経験を積むためにC++ではなくRubyを使っています。(競プロで高みを目指すだけなら、間違いなくC++を覚えた方がいいですね) 今回はAtCoderでたまに見るnCrの求め方と、それの

元記事を表示

【モンキーパッチ】管理画面生成gemのAdministrateで、NameError uninitialized constant

問題

Administrate gem
`0.16.0`

コントローラー
`app/controllers/admin/students/users_controller.rb`

モデル
`app/models/students/user.rb`

“`
NameError: uninitialized constant Student::User
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in const_get
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in block in constantize
File “/app/vendor/bundle/ruby/2.6.0/gems/ac

元記事を表示

Ruby の例外の伝播

いつも忘れるので。

“`ruby
def method1
method2
rescue => e
p “rescued in method1 #{e.message}”
end

def method2
if false
p ‘success’
else
raise “raised in method2”
end
end

method1
# => “rescued in method1 raised in method2”
“`

元記事を表示

フルスタックエンジニアへの道 part 2 ~Rails 7 × Dockerの環境構築 2

### 前回: 個人開発をやる目的とか、何をするかなどはこちらから

[https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb](https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb)

### 今回のゴール: Docker上に起動したMySQLとRailsを接続し、rails sする。

# dockerまわりの設定

Dockerfile: 最後にこれを足す

“`bash
$ CMD [“mysqld”] # mysqlを起動
“`

docker-compose.yml

“`bash
db-sloth:
image: mysql:5.7
platform: linux/x86_64 # M1 Macだと動かないのでplatformを指定
volumes:
– ./db/development/tools:/docker-entrypoint-initdb.d # 初回データ実行
– ./db/devel

元記事を表示

SlimとSassの静的サイトジェネレーター、RTramを作ったよ

RTram(あーるとらむ)はLPなどの静的なWebページ作成で、Ruby on Railsのエンジニアに馴染み深いSlimとSassを使いやすくするためのツールです。

https://github.com/rinkei/rtram

Rubyの構文とシンプルな記法でHTMLを表現できるSlimと、CSSをメンテナンスしやすく書けるSassを使って、高速にWebページを作成することができます。インストールは次の通りです。

“`
$ gem install rtram
“`

RTramはSlimとSassをHTMLとCSSに変換しながらlocalhostでホスティングするサーバーを提供します。
RTramのバージョン1.0.0ではプロジェクトディレクトリを作るコマンドとサーバーを起動するコマンドだけがあります。
プロジェクトディレクトリは次のような構成です。

– `slim`: 変換の対象となる.slimファイルを置くディレクトリ
– `sass`: 変換の対象となる.scss、.sassファイルを置くディレクトリ
– `output`: Slimから変換されたHTMLが出力さ

元記事を表示

【Ruby / Rails / devise】お気に入り機能( いいね機能 )の実装方法

## お気に入り機能の作成イメージ

![スクリーンショット 2022-05-24 15.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/95e9db65-09b4-c636-e30a-3f589ba8a48b.png)

今回はこのようなお気に入り機能の実装をしていきたいと思います。
(非同期通信は使用しないで作成しています)

## 前提

・deviseを導入している
(user_signed_in?メソッドを使う必要があるため)

・userモデル、お気に入り機能をつけたいモデルが存在している
(お気に入り機能をつけたいモデル → 今回はitemモデルで作成します)

## 作成手順

### ①お気に入り機能のモデルを作成する

・名前はお好きなものでOK
今回は「favorite」モデルで作成します。
他には「like」モデルで作成している例もあります。
(モデルは単数形で書くルールがありますので、単数形で作成しましょう)

“`ターミナル
rails g m

元記事を表示

bundle install(gem install pg)が通らない時の対処 on macのhomebrew環境

ただのメモ書きです

# 背景とか

gemのnative拡張の.so依存は、基本的にはpkg-configにまかせていればよいのだけど、
残念ながら、`gem “pg”`においては、pg_configを参照できないときに、pkg-configにfallbackしてくれるのは、2022年1月リリースのv1.3.0からである。
see: https://github.com/ged/ruby-pg/blob/master/History.rdoc#v130-2022-01-20-michael-granger-gedfaeriemudorg-

プロダクトコードのライブラリバージョンを上げるのは後からにして、ひとまずbundle configでの解決策をメモしておく。
(他にもpkg-configに対応していないnative拡張のgemがあったら後で自分で参照する用)

# ネイティブライブラリのインストール

homebrewのpostgres formulaeを入れると、サーバーごと入ってしまうので、libpqのみ入れる
gemは”p**g**”だけど、ライブラリは”libp**q*

元記事を表示

【awesome_print is not working】(pry) output error: #

移転しました↓

[【awesome_print is not working】(pry) output error: ](https://www.malanka.tech/entry/awesome_print_is_not_working_by_marshal_dump_removed)

元記事を表示

フルスタックエンジニアへの道 part 1 ~Rails 7 × Dockerの環境構築 1

# はじめに

ゼロから100まで、すべて自分の力でウェブアプリケーションを作り上げることのできる技術と経験を得ることで、プロジェクト・マネジメントができるリーダーになりたい…フロントエンド、バックエンド、デザイン、インフラなど関係なくなんでもできる最強のエンジニアになりたい…Modern-day Da Vinciになりたい…(笑)。

この目標を達成するための方法を考えてみた結果、**現場で行われている開発プロセスを自分ひとりでやってみるのが一番速いんじゃないか**という仮説を立てた。

そこで、私個人の成長記録として、この「フルスタックエンジニアへの道」という連載をやっていこうと思う。

読者諸兄におかれましては、この記事で技術的な知識を得るというよりも、私が**どんなことをどんな順番で勉強したのかを参考にしていただいたり、シンプルに頑張ってるヤツ(私^^;)を見て仕事や勉強へのモチベーションとしていただければ**なと思います。

### なぜそう思った?

エンジニア歴5ヶ月目の私は、現在Rails 6を使った社内アプリケーションの開発をやっている。(で、明後日デプロイする笑)。

元記事を表示

現在時刻に最も近いキリの良い時刻を取得する方法

送信の予約機能で、現在時刻に最も近い10分単位の時間を取得したいことがあり、その計算方法が勉強になったので記載します。
例えば現在時刻が15:55なら16:00を取得したいという趣旨です。

## 作成したメソッド

“`ruby
def round_off(seconds = 60)
Time.at((to_f / seconds).ceil * seconds)
end
“`
上記のようにメソッドを定義し、以下のように呼び出すことで実現できました。

“`ruby
Time.now.round_off(10.minutes)
# もし現在時刻が16:55なら、17:00の時刻が取得できます。
“`

## 何をしているか

先輩に教えてもらいながら書いたのですが、理解するのに時間がかかったのでメモしておきます。

1.指定した秒数で割り算をし、切り上げる
“`ruby
(to_f/seconds).ceil
“`

2.その数字にもう一度指定の秒数を掛ける

“`ruby
(to_f/seconds).ceil * seconds
“`

上記をすることで

元記事を表示

DockerからRailsのコントローラとルーティングを設定する

仮想環境下でコントローラやルーティングの設定はしたことがあったが、Dockerではなかったので備忘録として簡単に記載する。

homes_controllerを作成する

“`言語:ターミナル
docker-compose exec web rails g controller homes
“““

app/viewsの配下にhomesディレクトリが作成されていることを確認し、top.html.erbのファイルを作成する。
![スクリーンショット 2022-05-22 17.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654361/c762b51c-c0a3-78ca-92af-d59d2142ddb6.png)

トップページだと分かるように下記のように記載する。
“““言語:top.html.erb

ここはTopページ

“““

コントローラに以下のように記載する。
“`言語:routes.rb
class HomesController <

元記事を表示

【個人開発】英語の発音精度を診断するアプリ「Speaking Checker」を作りました

## はじめに
初めまして、よしたかと申します!

突然ですが、皆さんは英語が得意でしょうか?
私は「読む・書く」は得意ですが、「聞く・話す」は苦手です。「読む・書く」については高校時代の先生の教え方がうまかったおかげか今も得意なのですが、「聞く・話す」については海外留学や英会話スクール等に通ったことがなく、外国人の方と話す経験がほとんど無かったので苦手です。
他の方はどうなのか?と思い調べてみると、下記のビジネスパーソン向けに行われた調査データによると、英語が得意と答えた人は約3割なのに対して、英語が苦手と答えた人は約7割と多数を占めていることが分かります。
参考: [「英語学習の実態と意欲」に関する調査結果](https://www.iibc-global.org/iibc/press/2019/p123.html)

私は一人でも多くの方に英語を好きになって欲しいです。そのため、ゲーム感覚で英語の発音練習ができないかと思い、「Speaking Checker」を開発しました。

▼サービスサイト

https://www.speaking-checker.com/

## サービ

元記事を表示

シッカリとエンジニアを目指す前に最低限押さえたい技術要素

# エンジニアのことがわかる様になりたいと言われる。
みなさん、言われますよね。

TechAcademy講師をやったり、社内のマーケターに技術的なことを教えたりする中で
エンジニアのことをわかる様になりたいと言われることが多くあります

端的にSQLやRailsを少し教えたところで
方法論がわかるだけで、本質的なことを理解してもらえないでしょう。

システムが動く原理、何が作れて何が作れないのかわかる様になり
自分で考える手段を得るには
私たちが歩んできた基礎をなぞってもらいましょう。

全てなぞる必要はないのです
私たちがやってきた事の中で重要だと思う部分をまとめましょう。

## ITパスポート(基本情報)の「テクノロジ系」分野
基本的にITパスポートや基本情報と聞くと業務で役立たないというエンジニアが多いと思います。

私もそうでしたが、 「基礎理論」「コンピュータシステム」「技術要素」の部分に関しては
ITパスポートの中で開発に必要な知識が詰まってる部分です

### 【TODO】 基本情報の本でテクノロジ分野だけ学びましょう
出来れば基本情報の本でテクノロジ分野だけ学びま

元記事を表示

【Rails】Railsでカバレッジを計測する

# 初めに

`Rails6`のプロジェクトにカバレッジを導入したので、そのやり方を記事にしておきます。

## 環境

– Rails 6.1.4
– Ruby 2.7.4
– simplecov 0.21.2

# simplecov を導入する

カバレッジを測定するためのジェムである`simplecov`を追加します。

“`ruby:Gemfile
group :test do
gem ‘simplecov’, require: false
end
“`

`simplecov`の設定を追加する。

“`ruby:spec/rails_helper.rb
require ‘spec_helper’
require ‘simplecov’
SimpleCov.start ‘rails’

RSpec.configure do |config|
# 省略
end
“`

これで`Rspec`実行後に、`coverage/index.html`に実行結果が出力されます。

# 参考

[simplecov – Github](https://github.com/si

元記事を表示

Gemをインストールする時に関連するGemを自動でインストールする

Rubyでは標準でRubyのライブラリを管理するRubyGemsというコミュニティがあり、gemというコマンドを使用することでRubyGemで管理されているライブラリを取得できます。

RailsではGemfileというアプリケーションで使用するGemの情報を記述している管理ファイルです。
Gemfileにgemコマンドの後ろに取得したいGem名を記述し(既に取得しているGemのバージョンの変更も可)、installを実施することができますが、Gemは様々なGemが複雑に関連して動作する為、取得したいGemと関連するGemも取得する必要がある場合がある。

インストールを実施する際
“`ターミナルの作成中アプリのディレクトリ
% bundle install
“`
このコマンドを使うと取得したいGemに関連するバージョンのGemを一緒にインストールしてくれる。
これはbundlerというGemが働いてくれている。

:::note info
bundlerというGemを使うと関連するGemファイルも一緒に取得してくれる
:::

元記事を表示

RailsのAction Cableで任意のメッセージ形式でやりとりする

## 背景

REST API, WebsocketのAPIを提供するとあるサービスのMockを素早く作るため、Railsを選定したが、メッセージの形式がRailsと合わなかった。

メッセージ送信では、 `command`, `data`, `identifier`を送る必要があるが、

“`json
{
“command”: “message”,
“data”: “{\”message\”:\”test message\”,\”action\”:\”speak\”}”,
“identifier”: “{\”channel\”:\”RoomChannel\”}”
}
“`

例えば、 `command` をやめて `cmd` だけで任意のアクションを指定できるようにしたい。

## 注意

今回はローカル起動用のMockの作成を目的としていたためoverrideを試しました。
副作用の検証まではしていませんし、通常はRailに乗る方が良いので使い所は注意しましょう。

## サーバーが受け取るメッセージを任意の形

元記事を表示

【Ruby on Rails】Herokuのデプロイ時のエラーについての対処法

RailsチュートリアルでHerokuにアップする時があり、
`git push && git push heroku master`と打つとエラーになりはまってしまったのでその対処法を記述しておきます。

Herokuをデプロイするために打ったコマンド
“`
$ git commit -am “Add hello”
$ heroku create
$ git push && git push heroku master
“`

出てきた内容

“`
hogehoge toy_app % git push -f heroku main
Enumerating objects: 89, done.
Counting objects: 100% (89/89), done.
Delta compression using up to 4 threads
Compressing objects: 100% (72/72), done.
Writing objects: 100% (89/89), 22.14 KiB | 2.21 MiB/s, done.
Total 89 (delta

元記事を表示

Rails データベースの更新

データベースの更新
“`データベースの更新
rails db:migrate
“`

元記事を表示

【Ruby】毎日更新の天文写真が送信されるLINEbotを作ってみた

# はじめに
Messaging APIを使ったLINEbotでNASAの毎日更新される天文写真を送ってくれるものを作ってみました。さらに、飽き足らずに日付を選んでその日の天文写真も見られるようにしました。

#### 完成形
![ezgif.com-gif-maker (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2549439/3093f4b0-3aab-5f20-f40c-2a941b472811.gif)

## 前提、環境など
[こちらの記事](https://qiita.com/Yuzu_Ginger/items/18edc58bd039fc19ad53)のサンプルコードが動かせることが前提です。
また、[こちらの記事](https://qiita.com/Yuzu_Ginger/items/675cca0f56a8ed8b4a23)の手順1でNASA APIキーを生成してください。

https://qiita.com/Yuzu_Ginger/items/18edc58bd03

元記事を表示

[個人開発]ランニングシューズ選びに困っている方向けのアプリ「Shoes For Runners」を開発しました

# はじめに
簡単な質問に答えることでおすすめのシューズを提案するアプリ「Shoes For Runners」を開発しました。

**サービスを作ったきっかけ**
私が陸上部に所属していたので、部活の後輩や家族からシューズの選び方についてよく聞かれました。その時に、ネットで調べても、おすすめのシューズが複数個紹介されるものの、結局どれを買えば良いのか分からないという意見をよく聞きました。そこで、簡単に自分にあったシューズがわかるアプリを作ってみようと思いました。

# サービス概要
スクリーンショット 2022-05-06 8 36 35
ランニングシューズについて何を買えば良いかわからない人におすすめのシューズを提案するアプリです。簡単な質問に答えることで自分に合ったシューズを知ることができます。

# アプリURL
ht

元記事を表示

OTHERカテゴリの最新記事