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

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

authenticate_user!メソッドの使い方

## どんなメソッドか?
ログイン状態によって表示するページを切り替えるメソッドです。
ログインしていないユーザーを、ログイン画面に遷移したい場合に使います。
before actionで呼び出すことにより、コントローラーのアクションを実行する前に、ユーザーがログインしていなければログイン画面に遷移することができます。

“`ruby
before action authenticate user!
“`

## onlyの後にアクションを指定した場合の例
“`ruby
before action authenticate user!, only: [:new, :edit]
“`
上記の場合、ログインしていないユーザーがnewアクションとeditアクションを実行した場合のみ、ログイン画面に遷移することができます。
only以外にもexpectの後にアクションを指定することで、ログインしていないユーザーが指定したアクション以外を実行した場合に、ログイン画面へ遷移させることもできます。

元記事を表示

Linuxコマンド一覧

# Linuxについて
LinuxとはOSの一種であり、『OS』とはオペレーティングシステムの略である。
OSはソフトウェア(アプリなど)とハードウェア(記録・保管装置)を繋ぐ役割があり、OSが機能しているからこそ閲覧や保存が正常に行われる。

MacやWindowsのOSと違い、無料のオープンソースとして扱えることができ、Linuxをベースとして誰でも開発・改良が行えるのが特徴としてある。
ユーザー権限が厳しく管理されているので、安全性の高いサーバとして活用できる。

# Linuxコマンド一覧
| コマンド|内容|
|:———–:|:————:|
| pwd| カレントディレクトリのパスを表示するコマンド |
|ls|ディレクトリやファイルの一覧を表示するコマンド|
|cd|カレントディレクトリから別のディレクトリに移動するコマンド|

### Rubyで使うコマンド一覧
| コマンド|内容|
|:———–:|:————:|
|rails “`_6.0.0_“` new アプリケーション名|Railsで新規アプリ

元記事を表示

Docker を使ってRuby on Railsの開発環境を構築(M1チップのMac)

M1 Macbookを使ってポートフォリオを作ろうと思い、Virtual Boxで開発環境を作成しようとするとVirtual Boxが使えないことが発覚したので、Dockerを使って開発環境を構築しようとした。

しかし、色んなサイトの作成方法を真似しても上手くいかず、Dockerの公式ドキュメントを参考にしたところ、Yay! You’re on Rails!の画面を出すことができた。

手こずってしまった原因がDockerへの理解不足だったため基本的な概念を備忘録として記載しようと思う。
表現が不適切なところも多々あると思うので、ご指摘くだされば幸いです。

まずはイメージ図を頭に入れる

![スクリーンショット 2022-05-14 22.31.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654361/101cda71-0ae6-cd6a-73d0-219009c17c04.png)
引用
https://coinbaby8.com/docker-beginner.html

イメージとい

元記事を表示

RubyのSymbol(シンボル)とは?文字列とは何が違うのか

Rubyでは全ての値はオブジェクトのため、一見ただの数値に見えてもそれは`Integer`クラスのオブジェクトです。
そこで`methods`メソッドを使って、そのオブジェクトが所属する`Integer`クラスのメソッドを見てみたいと思います。

“`irb:irb
irb(main):006:0> 123.class
=> Integer
irb(main):007:0> 123.methods
=> [:-@, :**, :<=>, :upto, :<<, :<=, :>=, :==, :chr, :===, :>>, :[], :%, :&, :inspect, :*, :+, :ord, :-, :/, :size, :succ, :<, :>, :to_int, :coerce, :to_s, :to_i, :to_f, :divmod, :to_r, :fdiv, :modulo, :remainder, :abs, :magnitude, :integer?, :floor, :ceil, :round, :truncate, :^, :odd?, :even?, :a

元記事を表示

ランダムにグループ分けするRuby演習

## 問題
A、B、C、D、E、Fという6人のグループがありました。 このグループは定期的にみんなで通話をしています。 しかし6人全員で通話はやりずらいので、3人ずつか2人と4人に別れることにしました。 このグループを3人と3人、または2人と4人にランダムに分けるプログラムを書いてください。 このプログラムは実行するごとに結果が変わります。 また表示結果はアルファベット順にしてください。
“`
$ ruby ramdom.rb
[“B”, “C”]
[“A”, “D”, “E”, “F”]
“`

## 作成手順
① ramdom.rbファイル作成
(以下は①の中身)
② 6人グループの配列作成
③ ②を利用するメソッド作成
(以下④,⑤,⑥はメソッド内)
④ ②をシャッフルし、3-3でアルファベット順に分割
⑤ ②をシャッフルし、2-4でアルファベット順に分割
⑥ ④,⑤をランダムに条件分岐
⑦ ③メソッド実行

元記事を表示

入社2週間の新人が研修で社内アプリを作った話

## 導きのはじまり
部門長「研修の一環として、社内で実際に運用するアプリを作ってもらおうと思う」

僕「え・・・? 研修なのに実際に使うものを作るんすか? まだ入社して2週間なんですが・・・」

部門長「実際に運用するものを作るから研修になるんだよ? 多少バグってもいいから動くものを作ろう!」

僕「oh…」

部門長「じゃあ、どんなアプリにするか一緒に考えていこうか」

## 自己紹介

みなさん初めまして。
エンジニア1年目の小林と申します。

この記事を見てくださっている方々の中には、エンジニアに転職しようと悩んでいる方、エンジニアの新人研修って何をするんだろうと思っている方はいませんでしょうか?

ここでは、僕が今の会社にエンジニア転職して、最初の研修で行ったことをご紹介します。
新人研修の一モデルとして参考になれば幸いです。

## ****開発環境****
Ruby on Rails
## ****この記事の対象読者****

・エンジニアに転職しようと考えている方
・エンジニア転職のために勉強中の方

## 入社前 ~勉強編~
### 著者のスペック
・年齢26歳

元記事を表示

railsチュートリアルをなるべく嚙み砕く 1章

今まで何回かチュートリアルに挑みましたが全て挫折しました。
挫折した原因は

###### なんとなくの理解で進めてしまった。

これが原因でモチベーションの低下が始まり、挫折というルートを何回も辿っています
今回こそは全部やりきるために、自分なりに噛み砕いて理解し、
###### 人に説明できるようになったら進む
ことを意識してやりたいと思います

他の方のための記事にもなったらいいな、、
##### 解釈が間違っているところがあれば教えていただきたいです!!

# 第一章

環境構築ですね
私は ubuntu on Windowsを使ってrailsの環境構築をしました

https://qiita.com/ksh-fthr/items/64a4e86c8bad08322c94

こちらの記事が私が環境構築したやり方と同じです

1.3まで飛ばします

### 1.3
ここで
cd やmkdirが出てきます。
主要なUnixのコマンドたちですね
cd は change directory の頭文字をとったもので ディレクトリを移る
mkdir は make directory の略で

元記事を表示

Ruby | Qiita API で記事を更新する ( PATCHリクエスト )

“`rb

require ‘net/https’
require ‘uri’
require ‘json’

uri = URI.parse(“https://qiita.com/”)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

QIITA_API_TOKEN = ‘xxxxxxxxxxxxxxxxxx’

# https://qiita.com/YumaInaura/items/yyyyyyyyyyyyyyyyyyy のような記事URLから id が分かる
qiita_item_id = ‘yyyyyyyyyyyyyyyyyyy’

patch_url = “https://qiita.com/api/v2/items/#{qiita_item_id}”
patch_request_header = {
‘Content-Type’ =>’application/json’,
“Authorization” => “Bearer #{QIITA_API_TOKEN}”
}
patch_r

元記事を表示

accepts_nested_attributes_for を使ったフォームで意図しないユニークバリデーションの発生を回避する方法

## 解決したい問題
Railsでは `accepts_nested_attributes_for` を使って、`has_many`関連する子レコードを1つのフォームで更新することができます。
イメージとしてはこんな感じです。

![sample.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/fbd1d0e0-3c36-dcaf-715c-a787fbce39b4.jpeg)

上の画面では以下のようなBookモデルと、それに関連するAuthorモデルを更新するフォームです。
(本と著者はmany-to-many関連だろう、というツッコミが来そうですが、説明のために単純化してるので気にしないでください)

“`ruby
class Book < ApplicationRecord has_many :authors, dependent: :destroy accepts_nested_attributes_for :authors, reject_if: :all_bl

元記事を表示

開発勉強(controller)

今回も頑張っていきましょう。

今日は、前回なんとかサーバーの立ち上げまでできたので、実際に開発に向けて勉強していきます。

⭐️ MVC
  ・Railsは「MVC」というアーキテクチャーを使ったフレームワーク
  ・MVCというのは、「Model」「View」「Controller」の略
  ・この3つの中で最も重要なのは「Controller」
  
⭐️ コントローラーを作成する
  ターミナル上で前回作成したRailsAppへ移動し、以下コマンドを実行する
“`ruby:qiita.rb
rails g controller 名前
“`
  ※名前は半角英字とすること
“`ruby:qiita.rb
create app/controllers/hello_controller.rb
invoke erb
create app/views/hello
invoke test_unit
create test/controllers/hello_controller_test.rb

元記事を表示

Ruby | Qiita API で1人のユーザーの全記事一覧を取得する

100記事x100ページまで取得できるので、上限は1万記事。

# Ruby

“`rb
require ‘net/https’
require ‘uri’

(1..100).each do |i|
uri = URI.parse(“https://qiita.com/api/v2/users/#{ENV[‘USER_ID’]}/items?page=#{i}&per_page=100”)
res = Net::HTTP.get_response(uri)

puts res.response.body
end
“`

# コマンド実行例

“`
USER_ID=yumainaura ruby qiita-post.rb | jq
“`

# Qiita API のTOKENを使って実行上限数対策をする場合の例

“`rb
require ‘net/https’
require ‘uri’

(1..100).each do |i|
uri = URI.parse(“https://qiita.com/api/v2/users/#{ENV[‘USER_ID’

元記事を表示

【超簡単】Ruby on Rails に BootStrapを導入する方法

# はじめに
筆者は [大学生限定 プログラミングコミュニティ 『GeekSalon』](https://geek-salon.com/?utm_source=Direct&utm_medium=attract&utm_campaign=2Q&utm_content=Fukuoka_E_2Q)で活動している者です!

# Bootstrapとは
世界で一番人気のあるフロントエンドライブラリです。
モバイルファーストなレスポンシブウェブを素早くデザイン・カスタマイズすることが可能です。
豊富なコンポーネント、強力なJavaScriptプラグインを備えています。
詳しくは、[Bootstrap公式サイト](https://getbootstrap.jp/) を!!
## Ruby on Rails への導入方法
①まずは[Bootstrap公式サイト](https://getbootstrap.jp/)へアクセス!
②サイト内のはじめるボタンをクリック!
![スクリーンショット 2022-05-13 23.36.54.png](https://qiita-image-store.s3

元記事を表示

Rubyでのメソッドの戻り値について勘違いしていた

Rubyのメソッドの戻り値は、`return`に渡した値です。
“`ruby:greeting.rb
class Greeting
def name(num)
if num == 1
result = ‘Tom’
elsif num == 2
result = ‘Ken’
else
result = ‘Yumi’
end
result
end
end

greet = Greeting.new
puts “Hello,#{greet.name(1)}!!!”
puts “Hello,#{greet.name(2)}!!!”
puts “Hello,#{greet.name(3)}!!!”
“`
“`ruby:実行結果
Hello,Tom!!!
Hello,Ken!!!
Hello,Yumi!!!
“`
上記の場合は`return`を省略していますが、
省略されているだけで`result`が`return`に渡っています。

そして`return`を呼び出さない場合は、メソッド内の最後の式の値を

元記事を表示

fastlane経由でiOSアプリをFirebaseAppDistributionからテスト配信する時は、Rubyについて知っておくほうが良かった話

# はじめに
こんにちは、iOSエンジニアの [dayossi](https://twitter.com/dayossi) です。

家族が幸せになれるサービスを提供したいと思って、
[HaloHalo](https://hallo-hallo.sakura.ne.jp/home/)という家族日記アプリをリリースしています。

今回は、Firebaseが提供しているアプリのテスト配布ツール`Firebase App Distribution`を
fastlaneから呼び出して、テスト配布を自動化する中で詰まった点を共有いたします。

fastlaneがRubyで構成されているにもかかわらず
私はRubyでの開発は全くやったことがないので、
ほぼ手探り状態でfastlaneを試しました。。

先人の方々の叡智を参考に
なんとかfastlaneを実行してipaファイルをビルドできる状態まで辿り着きましたが

肝心のFirebase App Distributionへデプロイできず、
かなり詰まりました。

同じような境遇で悩まれている方の参考になりましたら幸いです。

## 前提
以下の

元記事を表示

content_forメソッドでタイトルを動的に出力する

タイトルを動的に出力したいのでyieldメソッドとcontent_forメソッドをうまく利用する。
content_forメソッドを使うことでヘルパーメソッドが利用できるので、動的にタイトルを出力することができる。

まずは簡単にyieldメソッドとcontent_forメソッドの使い方を説明していく。

### content_for
content_forは表示したいコンテンツを設定するのが役割。
content_forの公式
“`erb
<%= content_for :コンテンツ名 do %>
コンテンツ
<% end %>
“`
具体例を用いて説明していく。
“`erb
<%= content_for :title do %>
トップページ
<% end %>
“`
コンテンツ名を:titleとした。そしてコンテンツはトップページとする。
content_forでは表示したいコンテンツをdo~endで囲む。
ここでいうコンテンツはページのタイトルとして表示したい文字列を設定。

### yield

yieldの公式

“`
yield(:コンテン

元記事を表示

【Rails7+スクレイピング+LINE】Qiitaの週間トレンド記事一覧に新しくランクインした記事達をLINEで通知したい

# はじめに
Qiitaの週間トレンド記事に入った記事は大体読んでいるのですが、新しくランクインした記事をどこかにピックアップできたら便利だと思ったので、LINEに通知するプログラムを作ってみました。

自分で方法を考えて作ったことがほぼなかったので若干迷走して作った結果、毎週日曜と木曜の朝に、新入り記事達のURLを素っ気なく容赦なく通知してくるプログラムが出来上がりました。

開発過程でいろいろサービスを使いましたが、2022/05/12現在、すべて無料枠でどうにかなっています。

(備忘録がわりに自分が何を考えていたかなどもつらつら書いているので、方法論だけ読みたい方はいい感じに飛ばし読みをお願いします。)

# やりたいこと
– Qiitaの週間トレンド記事一覧に新しくランクインした記事のURLを取得する
– 取得したURLを自分のLINEアカウントに通知する

# 環境
– Rails 7.0.2.3
– line-bot-api 1.23.0
– heroku

# 全体像
作ったものの全体像を軽く書きます。
## Qiitaの週間トレンド記事一覧のページから、スクレイピング

元記事を表示

RubyのC拡張で例外クラスを定義する方法

## はじめに

Ruby言語では、StandardErrorを継承して例外を定義する。

“`ruby
class NoIndexError < StandardError; end ``` RubyのC拡張ライブラリ(Ruby C extension)で例外クラスを定義したい。 ## やり方 ### 例外クラスを定義する C拡張を書く時もRuby言語とまったく同じように、StandardErrorを継承したクラスを定義すればよい。 以下のようにして例外を定義できた。 ```c VALUE rb_Bio; VALUE rb_CGRanges; VALUE rb_eNoIndexError; void Init_cgranges(void) { rb_Bio = rb_define_module("Bio"); rb_CGRanges = rb_define_class_under(rb_Bio, "CGRanges", rb_cObject); rb_eIndexedError = rb_define_class_under(rb_CGRanges, "In

元記事を表示

【rails】ゲストユーザー機能の実装

ポートフォリオ作成したけど、なんか忘れてる・・
そうだ、ゲストユーザー機能!
ということで備忘録として簡単に実装方法を記載します。

# 前提
・ユーザー登録機能(devise)が実装されている

# ルーティングの設定
`guest_sign_in`アクションはこのあとコントローラーで定義します。
“`config/routes.rb
post ‘homes/guest_sign_in’, to: ‘homes#new_guest’
“`

# アクションの定義
以下にて`guest_sign_in`を定義します。

1.`find_or_create_by`でゲストユーザーがあれば取り出す、無ければ作成する にする
2. パスワードはセキュリティの関係で`SecureRandom.urlsafe_base64`のランダムで作成できるよう設定
3. railsが用意してる`sign_in`メソッドを利用して、先ほど定義した`user`をログインさせる

“`controllers/homes_controller.rb
class HomesController < Appli

元記事を表示

action textで画像が表示されない

## 現象
action textを利用したリッチテキストをレンダリングした際に画像が下のようにはてなのアイコンが表示されてしまう。

![スクリーンショット 2022-05-12 23.03.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960407/83bbd65b-60a1-16da-409c-1d8c9bbfb472.png)

## 発生エラー
“`
LoadError (Could not open library ‘vips.42’: dlopen(vips.42, 0x0005): tried: ‘vips.42’ (no such file), ‘/usr/local/lib/vips.42’ (no such file), ‘/usr/lib/vips.42’ (no such file), ‘/Users/higuchiyuujirou/workspace/imagine/vips.42’ (no such file), ‘/usr/local/lib/vips.42’

元記事を表示

Notification API 通知サブスクリプション登録方法

# 目標
SPAPI Notification API (旧 MWS Subscription API)で通知サブスクリプション登録します。
今回は **ANY_OFFER_CHANGED** という通知タイプで登録行います。

各通知タイプの説明はこちらでご確認ください:
https://developer-docs.amazon.com/sp-api/docs/notifications-api-v1-use-case-guide#notificationtype

# 前提
・ AWSアカウントを作成されている
・ SPAPIに連携済で、リクエストコールできる状態のストアがあること

# 1. SQSメッセージキュー作成
Amazon通知の宛先を作成します。
使うのは[Amazon Simple Queue Service(SQS)](http://aws.amazon.com/sqs/)です。

タイプは標準に設定して、名前を入れてキューを作成します。
今回はデフォルト設定で、許可ポリシー、暗号化、デッドレターキュー、タグ全てなしです。
アクセスポリシー