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

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

M1 Mac Homebrew環境のcabocha gemで `ld: library not found for -lcrfpp` が発生する

# 概要

cabochaをhomebrewでインストールしたらcabocha gemのインストールに失敗する。

# 対応
以下でインストールできた。

“`
brew install cabocha
bundle config –global build.cabocha –with-opt-dir=”$(brew –prefix)”
bundle
“`

もしくは以下。

“`
brew install cabocha
gem install cabocha — –with-opt-dir=”$(brew –prefix)”
“`

# NOTE
– 僕の環境は `$ echo $(brew –prefix)` => `/opt/homebrew`
– Homebrewでインストールしたライブラリのパスを共通で通す設定がどこかにあるのかもしれないが見つけられなかった。

元記事を表示

【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました

## はじめに
はじめまして!
個人開発者の[ハガユウキ](https://twitter.com/KvOKJo6SH85w2Q8)と申します。

突然ですが、皆さん正規表現はお好きですか?
私は好きです。「複数の文字列を一つのパターンで表現できる」部分にすごく面白味を感じています。
もっといろんな方に正規表現を知っていただきたい、好きになってほしいと思っています。

しかし、現状では2つの課題があると感じています。
– 正規表現の勉強自体がそもそも面白くない。
– 正規表現を勉強しても、しばらく使わないと忘れる。

この2つの課題を突破できるサービスは、現状存在しません。
そのため、楽しみながら正規表現を学べるサービスがあれば良いなと思いました。

**作りました。**

▼スライド型正規表現学習ゲーム【Regex Hunting】
https://www.regex-hunting.com/
(※) 端末はPC、ブラウザはChromeが推奨です。
![ogp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【開発未経験】Railsでサ活(サウナ活動)を管理できるアプリを作成しました。

# 1.はじめに
本記事を閲覧いただきありがとうございます!
転職活動用のポートフォリオとしてRailsでサ活(サウナ活動)の記録を管理するためのアプリを作りました。この記事はアプリの紹介や作成した経緯をまとめたものです。

## 自己紹介
– メーカー勤務の24歳。4月で新卒3年目になりました
– 働きながら毎日プログラミング学習中
– サウナとサッカーが大好き

# 2.作成したアプリについて
サウナ好きがサ活(サウナ・水風呂・外気浴の時間)を記録して管理するためのアプリです。
– アプリ名: **『ととのい』**

– アプリURL: https://totonoi.org/
– GithubURL: https://github.com/matsuken314/onsen_app

ホーム画面からゲストログインできます。(その他、新規登録画面からも可能です。)
![guestlogin.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1584967/bd92403f-750e-2f50-3801

元記事を表示

単体テストコードの種類

# アウトプット
単体テストコードの種類は、主にモデルとコントローラーに分かれる。
方針は下記のように異なる。

| 種類 | 方針 |
| ———- | ————————————————— |
| モデル | バリデーションが正しく働くか |
| コントローラー | アクションにリクエストを送ったとき、想定通りのレスポンスが生成されるか |

# 学んだこと
それぞれテストコードは異なるが、`exampleの整理をして、expectation構文で挙動を確認する`、という流れは共通している。

元記事を表示

Ruby から classify text API を叩く

# ゴール
以下を Ruby から叩く。

https://cloud.google.com/natural-language/docs/classifying-text?hl=ja:embed:cite

# 事前準備
上記 API は Natural Language API の一つなので、https://qiita.com/tommy-012/items/e0ad2a7c985fad5e59dd の準備ができてれば OK

# API 仕様
https://cloud.google.com/natural-language/docs/reference/rest/v1/documents/classifyText?hl=ja:title

↑には明記されていないが、Gme を使った際に分かったこととして、対象の英語文に最低限 20 個の単語が含まれている必要がある

カテゴリ一覧は、https://cloud.google.com/natural-language/docs/categories
現状は、最上位カテゴリは 27 個(結構多い)
また、より詳しいカテゴリがわ

元記事を表示

deviseを使用時に名前を表示できない時の解決方法

## 困っていたこと

以下のコントローラ、ビューの記述でサインイン後ユーザのnameが表示されると思っていましたが表示されません。
rails cなどで調べるとそもそも新規登録時に名前が保存できていませんでした。

*users_controller.rb
“`ruby
def show
@user = User.find(params[:id])

end
“`
*/users/show.html.erb
“`ruby

Users#show

<%= @user.name %>
“`

userテーブルにもnameの記述をしているしどこが原因を調べていました。

“`ruby
create_table “users”, force: :cascade do |t|
t.string “email”, default: “”, null: false
t.string “encrypted_password”, default: “”, null: false
t.string “reset_password_

元記事を表示

【超簡単】RubyonRails 投稿時間をInstagramのようにする 〜 ◯日前,◯時間前,◯分前 〜

# はじめに
とっても雑な記事ですが、少しでも誰かに役に立てばと思い記事にしました。

## 前提
簡単な投稿機能が実装済みであること
Railsの基礎的な知識を身につけていること

## 実装方法

### コントローラー
投稿時間を計算するために、コントローラーで今日の日付や、現在時刻を取得します。

“`tweets_controller.rb
class TweetsController < ApplicationController def index @today = Date.today #今日の日付を取得 @now = Time.now #現在時刻を取得 @tweets = Tweet.all #tweeetsテーブルの全レコードを取得 end (略) ・ ・ ・ end ``` ### ビュー 投稿時間に関するところの解説は下に記載しております。 ```erb:tweets/index.html.erb

<% @tweets.each do |t| %>

元記事を表示

Ruby から Google Custom Search API を叩く

# ゴール
以下を Ruby から叩く

https://developers.google.com/custom-search/v1/overview

# まず REST API を呼ぶまで
– [参考記事](https://webbigdata.jp/what-is-bigdata/google-custom-search-api)を確認しながら事前準備
– プロジェクトの作成
– `https://console.cloud.google.com/home/dashboard?project=[プロジェクト名]`にアクセス出来れば OK
– [該当 API の有効化](https://console.cloud.google.com/apis/library?project=oldnews-natural-language-api)
– [API キーの発行](https://cloud.google.com/docs/authentication/api-keys?hl=ja)
– [Custom Search Engine の

元記事を表示

Ruby で Natural Language API を叩く

# ゴール
以下を Ruby から叩く。

https://cloud.google.com/natural-language?hl=ja

# API 呼び出すための準備
[ドキュメント](https://cloud.google.com/natural-language/docs/setup?hl=ja)見ながら「SDK と認証をテストする」をやってみる

基本的には、Google Cloud Console からポチポチするだけ
Cloud SDK のインストールで pyenv を入れるところ少しハマった
個人記事ではなく[ドキュメント](https://github.com/pyenv/pyenv#installation)見ましょう(自戒)

# Gem から API を叩く
– 前提
– [エンティティ分析で試す](https://cloud.google.com/natural-language/docs/analyzing-entities?hl=ja)
– [リクエスト・レスポンス仕様](https://cloud.google.com/natural

元記事を表示

Ruby を Crystal にトランスパイル してAtCoder に登録したら解くべき精選過去問 10 問を解いてみた

# はじめに
Atcoderのコンテストにて、Rubyで`TLE`が解消しないこと、ないでしょうか。
私はあります。
`Ruby`のコードを速い言語に`トランスパイル`して欲しいと思ったこと、ないでしょうか。
**私はあります。**

https://qiita.com/superrino130/items/8e2040ccd6971f61c0cf

前回記事にて`ripper`の内容が少し理解できましたので、それを`crystal`に応用してみました。

但し、`julializer`は`Ripper.sexp`を使用、こちらは`Ripper.lex`を使用しています。

また、諸先輩の記事を参照させていただきました。

https://qiita.com/tomerun/items/23ce2a2ed6ead291d222

https://qiita.com/universato/items/8a6c311b4db5615fc50a
# Crystallizer
“`rb:crystallizer
require ‘ripper’

module Crystallizer

元記事を表示

expectation構文

# アウトプット
expectation(エクスペクテーション)とは、
テスト検証で得られた挙動が想定通りなのかを確認する構文。
雛形の基本構造は下記の通り

“`ruby
expect(検証で得られた実際の挙動).to matcher(想定した挙動)
“`
# 学んだこと
単体テストコード・結合テストコードや、
検証する機能の種類によって、
expectの引数や、matcherの種類が変わる。
たが今まで使用したものは、基本構造を応用したものであった。

元記事を表示

プロジェクトのgem, 端末にインストールされるgem,どっちを使うか指定する方法

## gemとは?
2つの意味があります。
1. **Rubyのライブラリ** のことです。詳細は[こちら。](https://www.ruby-lang.org/ja/libraries/)
1. **gemを管理するパッケージ管理ツール**の名前

ただ、gemというツールでパッケージを管理すると、依存関係で問題が発生することがあります。
そこでBundlerが登場します。

## bundlerとは?
依存関係を考慮してgemを管理してくれるパッケージ管理ツールです。
https://bundler.io

## Gemのインストール方法は大きく2種類

1. 端末全体で使えるタイプ(globalインストール)
mac,windows内のどこでも使えるようになる。
1. プロジェクト(特定の階層)でのみ使えるタイプ(localインストール)
作っているアプリの中で使えるようになる。

# 結論

### `bundle exec`をつける = ローカルインストールのgemが呼ばれる
例)
“`
bundle exec rails g controller users

元記事を表示

webrickでproxyを作ったときレスポンスのbodyが文字列として取り出せない

ちょっと悩んだのでメモ。

あるWebアプリがどんなパラメータの受け渡しをしてるのか覗いてやろうと思って WEBrick::HTTPProxyServer でプロキシサーバを作りました。その時レスポンスのボディ (WEBrick::HTTPResponse オブジェクト) がなんか Proc オブジェクトになってたので中身が覗けません…。で、こういうふうにやれば覗けましたというメモです。

だめな例
“`ruby
s = WEBrick::HTTPProxyServer.new(
Port: 8080,
ProxyContentHandler: ->(_req, res) {
puts res.body # ここが問題。これじゃ覗けない
})
Signal.trap(‘INT’) do
s.shutdown
end
s.start
“`
だめな例では `#

元記事を表示

【Rails エラー】 NameError (uninitialized constant クラス名)

Rails cで、Rails: NameError (uninitialized constant クラス名)のエラーに遭遇。

以下を試したところエラーが消えました。

“`
$ exit #rails cから一旦出る
$ spring stop
$ rails c #もう一度、rails c
“`

元記事を表示

RailsでHerokuに初期データが反映されなくてハマってました

# はじめに
seeds.rbを本番環境に反映させようとしたがうまくいかずに困ってました。
無事にherokuに反映することができたので、メモ用に投稿します。
## 自分の環境
* Rails 6.0.3
* Ruby 2.6.3
* AWS Cloud9
## 前提
seeds.rb作成済み
## 初期データの投入方法
### ローカルの設定を完了させる
“`
$ rails db:migrate:reset
$ rails db:seed
“`
### gitにプッシュする
“`
$ git add -A
$ git commit -m “メッセージ”
$ git push
$ git push heroku
“`
### Herokuのデータベースをリセットする
“`
$ heroku pg:reset DATABASE
“`
### herokuでマイグレーションを実行する
“`
$ heroku run rails db:migrate
“`
### seedデータを投入
“`
$ heroku run rails db:seed
“`
これで初期データの

元記事を表示

【Ruby】def hoge=(fuga) という書き方

# 本題
Qiita や企業の技術ブログを見ていて,`def hoge=(fuga)` という書き方がありました.

“`ruby
class Author
def authors_attributes=(attributes)
@person_attributes = Person.new(attributes)
end
end
“`

`hoge=` で一つのメソッド名を表しています.
値の設定専用のメソッド(つまりセッター)ということを表すために,よく使われる書き方みたいです!知りませんでした!

呼び出すときは,以下のような書き方だけではなく,

“`ruby
Author.authors_attributes=(attribute)
“`
以下のような書き方もできるみたいです.
“`ruby
Author.authors_attributes = attribute
“`

# 参考記事
https://teratail.com/questions/248629

下の記事では,セッターの関数名に`hoge=` という書き方が使われ

元記事を表示

ログイン直後の処理を設定する

### 結論
**ログイン後に処理を追加する時はwardenのコールバックを使う。**

“`
Warden::Manager.after_set_user do |user,auth,opts|
auth.cookies.permanent[‘cookie名’] = ‘cookie値’
end
“`
(ここではログインしたらcookieに値をセットしたい場合の処理を例にしている。)

**wardenのafter_set_userコールバックの使い方**
https://nekorails.hatenablog.com/entry/2018/10/27/172832#:~:text=warden%27%5D.logout(%3Aadmin)-,callback,-callback%E3%81%A8%E3%81%AF

コールバック内で、ログインをしたユーザに対して処理をしたい場合はブロックで渡している「user」を使う。

**注意**
ここで注意なのは、userをdeviseのcurrent_user感覚で使わないこと。

こういう時にエラーになる↓
ログインに使うクラスが

元記事を表示

ロガーもどきを作る時のコツ

“`sample.rb
def put_log(message)
puts “#{`hostname`.chomp}:#{caller.first}:#{message}”
end

def method_a
put_log(‘メッセージ’)
end

method_a
“`

実行結果

“`
LAPTOP-5EMLK46H:sample.rb:6:in `method_a’:メッセージ
“`

`LAPTOP-5EMLK46H` は私のノートPCのマシン名。

どのマシンでのどのプログラムのどのメソッドでの出来事なのかというのが大事。

元記事を表示

deviseに自動的に設けられているバリデーション

# アウトプット
deviseを用いて、ユーザー情報を管理するモデル(Userモデル)を作成すると、
下記の通りになる。

##### app/models/user.rb
“`ruby
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable end ``` 5行目の`:validatable`という記述が、 deviseにより自動的に設けられているバリデーションを指している。 バリデーションは下記の通りである。 ###### email - 存在すること - 一意性であること - @を含むこと ###### pa

元記事を表示

【Ruby】dry-validationでバリる

# 概要
Validationを良い感じにやってくれるgemを現在使っているため備忘録として記事を書いていく。
ここでは特に`dry-validation`と`dry-strcut`を解説!

# 使うまでの流れ
## 1.Gemをインストール

“`bash
$ gem install dry-validation
$ gem install dry-struct
“`

## 2.基底クラスを作成

“`ruby
class ApplicationContract < Dry::Validation::Contract config.messages.default_locale = :ja # デフォルトメッセージを日本語に変換 config.messages.backend = :yaml config.messages.load_paths << 'config/contract/error.yaml' # 任意のエラーメッセージを書くロケールファイルのpath EMAIL = /.@./ # メールバリデーション用 PHONE_NUMBER = /

元記事を表示

OTHERカテゴリの最新記事