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

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

【個人用】rails tutorial -2

本章の学習内容

大量の機能を自動生成するscaffoldジェネレータというスクリプトを使ってアプリケーションを生成し、高度なRailsプログラミングとWebプログラミングの概要を学ぶこと

ユーザーモデルの設計

各ユーザーには、重複のない一意のキーとなるinteger型のID番号(idと呼びます)を割り当て、このIDに加えて一般公開されるstring型の名前(name)、そして同じくstring型のメールアドレス(email)を持たせます。emailはユーザー名としても使われる

マイクロポストのモデル設計

テキスト内容を格納するtext型のcontentだけで構成されています 。しかし実際には、マイクロポストをユーザーと関連付ける必要があります。そのため、マイクロポストの投稿者を記録するためのuser_idも追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1617255/a19fe1f

元記事を表示

公式APIを使わずにTwitter Analytics(アナリティクス)の情報を取得する方法

# 概要

![スクリーンショット 2021-10-16 1.30.28_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/cd67e1fb-c5d0-f448-5caf-246bbaa62d2f.jpeg)

先日、とある業務の一環において「Twitter Analyticsの情報(上記画像のような部分)を毎日記録しておいてくれ」といった感じの指令を受けました。

![スクリーンショット 2021-10-16 1.40.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/c0ac6498-3329-9e8a-a878-4a989eb2f54a.png)

一応、Twitter Analyticsのページ([https://analytics.twitter.com](https://analytics.twitter.com))では過去にさかのぼって各種データをCSV形式でエク

元記事を表示

collectionとmemberについて!

#①.結論!

collectionとmemberは、ルーティングを設定する際に使用でき、生成されるURLとコントローラーを

任意にカスタムできるメソッドのことです!

collectionはルーティングに:idがつかない!

memberは:idがつくという違いがあります!

1つずつ使用例を見ていきましょう!

#②.collection

collectionで定義した場合は、以下のように例になります!

“`php:routes.rb
Rails.application.routes.draw do
resources :eats do
collection do
get ‘search’
end
end
end
“`

collectionのルーティング

“`php
Prefix Verb URI Pattern
search_eats GET /eats/search(.:format) eats

元記事を表示

【個人開発】モノやサービスを供養できるアプリを作ってみた。

## はじめに
![top-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/870132/8e094d39-f9f2-fa91-6e7b-443b22c5c7c7.png)

>・買ったばかりのスマホを落として画面バキバキになってしまった
>・サポート終了になるInternetExplorer
>・元カレのくれたプレゼント

「どうしよう…」

そのあと湧き上がる

「やり場のない気持ちをぶつけたい」

みなさんにもそんな時があると思います。

お世話になったモノやサービスに敬意を込めて供養してあげる。

とても慈悲深いアプリが出来ました。

https://omailly.jp/

## サービス概要

投稿されたタイトルをクリックすると、専用のお墓に見立てた位牌が鎮座しています。
![moko.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/870132/bcdcde41-963a-26bc-fc31-2

元記事を表示

【Ruby】あと何日かを求める

##環境
Ruby 3.0.2

##前提
12月10日までに100記事目標にしている自分に対して、今の投稿進捗を教えてくれるbotに台詞を追加したい。
(実際のbotの書き方とは少し異なる)
あと何日か、1日何記事ペースで書いたらいいのかをrubyで書くときに少し詰まったので記事に残す。
現在27記事投稿済み。
“`Date.today“`は2021年10月15日とする。

##完成形

“`ruby
require ‘date’

today = Date.today #2021年10月15日
limit = Date.new(2021, 12, 10)
articles_count = 27
# 残りの日にちから土日祝の18日分を引く
REMAINING_DAYS = (limit – today).to_i – 18.freeze
PER_DAY = ((100 – articles_count) / REMAINING_DAYS.to_f).round(2).freeze

p “本日までの記事投稿数は#{articles_count}記事になりました!!\n目標まであ

元記事を表示

商品購入機能の実装 〜「商品購入ページへの遷移」の実装①〜

#はじめに
先日、最終課題アプリ作成において「商品購入機能」の実装を開始しました。
__最大のヤマ場__といわれており、恐らく実装に時間がかかると思います。

そこで、これまで自身が学んできた内容や考えた過程などを、記事として残していこうと思います。駄文・長文になること請け合いですが、ご覧いただけると幸いです。

ただし、現時点での私の知識・技術については__プログラミングという大海原に片足の親指を突っ込んでちょんちょん水面を揺らしている程度__(だと思っている)ので、__「それ、ちょっと間違っているよ!」__というご指摘や、__「こうした方がいいよ!」__というご意見をいただけると、非っっっっっ常ありがたいです。泣きながら土下座して喜びます。

#「商品購入ページへの遷移」の実装①
__とりあえず商品購入ページに遷移できないと始まらないだろ!!!__
ということで、商品購入ページへ遷移できるようにしました。

見本サイトの商品購入ペー

元記事を表示

[Ruby]10進数⇄2,3,4…16進数に表示してみる(追記・訂正あり)

# はじめに
本記事では、10進数⇄2,3,4…16進数に~~変換~~表示してみる記事です。

“`
「追記」
コメントにてご指摘いただきしたが、
正式には、
`to_iメソッド`によって10進数に変換されているのではなく、
10進数として表示されたということになります。
“`

詳しくは、以下の記事を参考にしていただけますと幸いです。
[Ruby の “1101”.to_i(2) は 2 進数を 10 進数に変換している,わけじゃない](https://qiita.com/scivola/items/a8976caed1d8ba8f36e8)

# コード
こちらを参考にしています。
→[Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/String/i/to_i.html)

“`ruby
p 表示したい10進数の数字.to_s(表示したい○進数の○の部分を記述)
# “表示したい進数の数が表示”

p “表示したい○進数の数字”.to_i(表示したい○進数の○の部分を記述)
# 10進数に表示した

元記事を表示

ルーティングのネストについて!

#①.結論!

ネストは、ある記述の中に別の記述をして、親子関係を示す方法です!

「入れ子構造」とも呼ばれます!

ルーティングにおけるネストとは、あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです!

ルーティングをネストさせる一番の理由は、アソシエーション先のレコードのidをparamsに追加してコントローラーに送るためです!

例を見ながら解説していきます!

#②.記述について!

下記が記述の形になります!

“`php:routes.rb
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー
end
end
“`

ルーティングでネストを利用すると、アクションを実行するためのパスで、親子関係を表現できます!

例えば、eats_controller.rbのルーティングの中にcomments_controller.rbのルーティングを記述します!

ネストを利用したときに設定されるルーティングの例を見てみま

元記事を表示

【Ruby】<%= %>内でstyle要素を書く方法

こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。

今回は、「Ruby <%= %>内でstyle要素を書く方法」というテーマで解説していきます。

#誤った書き方

![097f29a41aed890a26dc39803fa42f2f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/c35f761b-3012-36ca-7c76-555cc3ead75e.png)

このような書き方だと、エラーになってしまうはずです。

#正しい書き方
![85bbc78926158bb6f935b36ac0c654a0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/addca737-5b93-91ec-658d-90b821330868.png)

style要素に注目すると、=ではなく、:を使っています。

#開発環境
・Cloud9
・Ruby

元記事を表示

RailsとTiDBの統合について

![shutterstock_1043482054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/524a55d6-154e-ea40-76de-66584c740def.png)
*この記事は [dev.to](https://dev.to/hooopo/getting-started-with-rails-tidb-4pni)で発表されたものです。*

このチュートリアルは、RailsとTiDBの統合に関する、おそらくWebで初めてのチュートリアルです。TiDBは、水平的なスケーラビリティ、高可用性、MySQLとの互換性を特徴とする、オープンソースの分散SQLデータベースです。

初心者にとって、ActiveRecordのような複雑なORMをTiDBに統合するのは難しい可能性があります。Web上にはこのトピックを扱っている記事がほとんどないことから、私はRailsユーザーによるTiDB導入を支援するために、このチュートリアルを執筆しました。

## TiDB開発環境をローカルで構築す

元記事を表示

[Ruby]any?を||の代わりに使わない

Rubyの配列(Array)には`any?`という便利メソッドがあります。

https://docs.ruby-lang.org/ja/latest/method/Array/i/any=3f.html

> すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が偽である場合に false を返します。ブロックが真を返した時点で、ただちに true を返します。

上記はドキュメントから転記しました。
any?を使うことで、配列内に特定の条件を満たした要素が1つ以上あること(または存在しないこと)を確認することができます。
また、真の要素が見つかったら以降の判定は行われないと記載されているため計算効率も良いです。

簡単に動作確認をしてみます。
配列`[5, 3, 4]`の中に3以下の数値があるかをチェックしています。
何が判定されたか可視化できるように判定ごとに`p _1`で判定した要素を出力するようにしています。

“`irb
irb(main):005:

元記事を表示

devise ストロングパラメータの仕組みを調べてみた。

##はじめに
サインアップページにdeviseのデフォルトで許可されている要素ではない、”username”を追加することになり、deviseでのストロングパラメータの設定方法を調べた時のことを備忘録として投稿します。

##ストロングパラメータとは
**特定のパラメーターのみを許可することで、モデルへの不正なパラメータの流入を防ぐ仕組みのこと。**MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されましたものです。

deviseにおいては、モデルにパラメータを送ることのできるアクションは、3つに限定されており、パラーメータも以下のように限定されています。

|action| allowed params|
|:-:|:-:|
|sign_in | authentication keys |
|sign_up | authentication keys, password,password_confirmation |
|account_update| authentication keys,password, pa

元記事を表示

exists? メソッドを使った簡単な条件分岐

初めてexistsメソッドを使ったのでメモ

existsメソッドとは

exists?メソッドとは指定した条件のレコードがデータベースに存在するかどうかを真偽値で返すメソッドです。存在すればtrueを存在しなければfalseを返します。
書き方は、

“`
オブジェクト.exists?(条件)
    モデル名や、モデルクラスのインスタンスなどを指定できます。
“`

何故使おうと思ったか

結論から言うとコメントの表示で気になることがあったため。

写真投稿サイトをつくっており、投稿に対するコメントを追加できるようにしています。
コメントが多くなることを想定しているのでページネーションを用いています(gem ‘kaminari’)
コメントは

“`
@comments = Commnet.all
“`

で取得してそれをviewで対応するidだけを表示するようにしています。

ページネーションを作っていなければ、今回の問題に当たっていなかったので作っていてよかったと思いました。

問題としましては投稿にコメントが追加されていないのにペ

元記事を表示

rbenvと環境構築

rbenvの個人的な疑問点を纏めたり、環境構築で引っ掛かったところをまとめた備忘録です。

# rbenvを使う理由

互換性の少ないrubyは、プロジェクトごとに色んなrubyのバージョンを使う。(常に最新版を使う訳ではないという事)

全部のrubyのバージョンをpcに入れて運用するのは大変。

そこでrbenvを使う。

# コマンド解説

“`jsx
rbenv local 3.0.2  #特定のディレクトリでこれを行うとそのディレクトリのみバージョンを指定できる
“`

逆にglobalはPC全体のRubyのバージョンを指定。

“`jsx
rbenv exec gem install bundler
“`

bundleコマンドはgemコマンドでインストールします。

“rbenv exec” は「システムrubyのgem」ではなく「rbenvで現在有効なrubyのgem」であることを明記する書き方。

つまり、rvenv execをつけると、rbenvのrubyバージョンに合わせたgemをインストールできる。

“`jsx
rbenv rehash # これで

元記事を表示

ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )

#はじめに
ある日突然、rails s でエラーが発生したので解決した方法を記録します。
誰かの参考になることを祈ります。

#開発環境
– macOS BigSur 11.6
– zsh: 5.8 (x86_64-apple-darwin20.0)
– Ruby: 2.6.3
– Rails: 6.1.4.1

#発生したエラー
localhost:3000: ![Access denied for user ‘root’@’localhost’ (using password: NO)](https://kitsune.blog/wp-content/uploads/access-denied.png “”)

“`zsh:
$ mysql.server start

#出力
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.local.pid).
“`
その後、brew doctor、アクセス権限の再付与、エラーログのファイルを覗いて対

元記事を表示

N+1問題を回避してRubyでマスキング処理を実装

ある案件でRubyでマスキング処理を実装しました。本記事はその記録となります。

今回実装したのは、usersテーブルのusernameカラムとemailカラムの各フィールドをダミーデータに置き換えるというものです。イメージとしては、下の図のような感じです。

| id | username | email|
|:———–|————:|:————:|
|1 | fukuzawa yukichi| fukuzawa@gmail.com |
|2 | kimura takuya| kimura@icloud.com |
|3 |kitano takeshi | kitano@gmail.com |
|4 | suzuki ichiro | suzuki@live.com |
|5 | kataoka tsurutaro | kataoka@yahoo.co.jp |
           

元記事を表示

BIツール導入案件で個人情報閲覧防止のためマスキング処理を実装

#本稿の目的

BIツール導入の実務案件を担当しました。

今回のBIツール導入案件では、「本サービス運用に影響が出ないよう、本サービス用データベースからデータを分析用に取ってくること」「分析ように取ってきたデータにマスキング処理を施し、BIツールのユーザーが閲覧できないようにすること」の2点を担保する方法を考えて実装するのが一番の山場でした。

そこで本稿では、「要件」「課題」「解決策」に分けて上記2点についての詳細かつ正確な説明を試みます。また、最後に実装したコードも掲載しております。ぜひご覧ください。

#要件
BIツールを導入するに当たって、下記の要件(クライアントの要望)を満たす必要がありました

要件1. 本サービス運用に影響が出ないよう、本サービスのデータベース以外のところにBIツールが参照するようにしてほしい

要件2. BIツールの利用者(従業員)に個人情報が見えないようにusernameとemailにはマスキング処理を施してほしい

要件3. 以上をできるだけコストをかけないで実現してほしい

#課題

課題1. 要件1を満たすために、本番データベースを何らかの

元記事を表示

実務未経験が実務案件にトライ! その顛末やいかに?

実務未経験者である私ですが、この度なんと実務案件に挑戦する機会をいただきました。その時の経験や学び、成果をここに記しておこうと思います。私と同じような境遇の人のみならず、さまざまな方にご覧いただけると非常にうれしいです。

#自己紹介
Over30の方のアラサー。未経験からエンジニアへの転職を目指しています。Techacademyでバックエンドとフロントエンド、ウェブデザインを学んだ後、Rails Tutorialやその他書籍を通じて勉強していました。

今回の実務案件に参加する前は、AWS等のインフラの知見は一切ありませんでした。しかし、「30歳を過ぎている場合、最低レベルでも実務レベルじゃないとエンジニア転職できないだろう」との思いで日々学習に励んでいたところ、本案件の募集があったため即応募。熱意が認められたのか、本案件を受注することができました。

#案件の概要
運営中のWEBサービス「独学エンジニア」のKPIモニタリング体制の整備が今回の案件となります。

状況を説明しますと、運用中のWebサービスであるにもかかわらずデータ分析アプリ・ツールが全く導入されておらず、新規登録者数

元記事を表示

比較演算子と論理演算子について!

#①.比較演算子(>, >=, <, <=, ==) 比較演算子は、値同士を比較したいときに使用します! 書き方はシンプルで、値と値の間に演算子を記述するだけです! 以下のようになっています! ```php 比較演算子 使い方 説明 > A > B AはBより大きいか
>= A >= B AはB以上か
< A < B AはBより小さいか <= A <= B AはB以下か == A == B AとBは等しいか ``` 比較演算子を使った場合、その条件が正しいかどうかによって、 trueもしくはfalseと呼ばれる値になります! 下記が例となっています! ```php # 1は20より小さいか? irb(main):001:0> 1 < 20 => true

# 5は5以下か?
irb(main):002:0>

元記事を表示

docker環境でvscodeのrubocop拡張が反応しない時の対処法

# はじめに
vscode の rubocop 拡張 [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop) を Docker 環境で使用したところかなり詰まったのでその備忘録です。

ホストに rubocop をインストールすれば良いという記事が散見されましたが、根本的な解決になっていません。ここではホストを汚さずコンテナ内の rubocop を参照するような解決方法をあげます。

一人でも多くの方の参考になれば幸いです。

# 何も設定していない時のエラー ( rubocop 拡張入れただけ)
“`
command /Users/horisho/.rbenv/shims/rubocop returns empty output! please check configuration.
“`
ホストに rubocop は存在しないので、 docker コンテナに実行先を向けないといけません。

# 初期設定
https://github.com/misogi/v

元記事を表示

OTHERカテゴリの最新記事