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

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

Rails初心者の僕がRails6でActive Storageを使用し、漫画投稿アプリを開発してデプロイした過程(設計編)

※この記事は以前別アカウントで投稿した記事の移行版です。別アカウントを削除するにあたって移行しました。

## 設計編に入ります
みなさんこんにちは、Rails初心者のほまりんです。[前回の環境構築編](https://qiita.com/homarinn1230/items/34468b61c6a91988ca55)はお読みになられたでしょうか。もし未読かつ興味のある方は、是非ご一読なさってください。それではこれより、設計編に移らせていただきます。

## 今回のアプリの全体像
実際の設計に入る前に、まずは今回のアプリの説明をさせていただきます。記事のタイトルでは漫画投稿アプリと題しておりますが、今回私が作りたかったのは「小説・イラスト・漫画」の三種類が投稿できるサイトです。つまりは「pix◯v」みたいなものですね。更に、ユーザー間でメッセージのやり取りができるようにもしたかったです(なるべく早くデプロイに移りたかったので、現在、メッセージ機能部分は未実装)。どうしてそのようなサイトを作成したかったのかは、説明が長くなるのでまた今度話させていただこうと思います。

## いざ設計へ

元記事を表示

Rails初心者の僕がRails6でActive Storageを使用し、漫画投稿アプリを開発してデプロイした過程(開発環境構築編)

※この記事は昔別アカウントで投稿した記事の移行版です。別アカウントを削除するにあたって移行しました。

## まず初めに
みなさんはじめまして、ほまりんと申します。初めてQiitaに記事を投稿します。今回は開発からデプロイするまでの全ての流れを、浅く、しかし丁寧に書いていくつもりをしているのですが、開発中、余裕がなく一切記録を取っていなかったため、曖昧なところや忘れている箇所が非常に多くありますがご了承ください(特にターミナルで入力したコマンドやエラー文)。なるべく僕のような初心者向けに書こうと思っております。困っている方の助けになれると幸いです。

## 本記事の構成
記事はいくつかに分けて投稿するつもりをしています。一つにまとめるにはあまりにも膨大だからです。今回は開発環境を諸々整えるところまで書きます。

## Rails6 とMySQL8.0を使おう
そう思ったのが苦労の始まりでした。ていうかMySQL8.0です。T◯◯H::EXPERTでは、MySQL5.6を使って開発を進めるのですが、5.7以降の方がユーザー名の文字数制限が長かったりと何かと都合が良く、更に8.0はめちゃく

元記事を表示

Docker環境でログデバッグするらなば、docker logsを使ったほうが楽

# 結論
ログデバッグするならば以下のコマンドでデバッグするほうが楽
“`bash
docker logs -f [コンテナ名]
“`

# よくやりがちなこと
コンテナにログインして以下のコマンドでログ監視します。
“`bash
tail -f log/development.log
“`

この場合、development.logに出力するために以下のようにログ出力を仕込みがちです。
“`ruby
Rails.logger.debug(“ああああ”)
“`

# dockerのほうがなぜいいのか
`Rails.logger.debug`と書くのがとにかくめんどくさい。
標準出力に出力するだけなら `pp` を使えば十分です。
docker logsは標準出力を表示してくれるので、ホスト側でdocker logsをすると、以下のようにログを仕込めばログデバッグできます。

“`ruby
pp “ああああ”
“`

考えれば当たり前なんですけど、はっと思いつきました。

# 補足
VSCodeだったら右クリックでサクッとdocker logsできます。
[![Ima

元記事を表示

Jekyllをつかってデータからページを作る

JSONのデータを加工して、HTMLに整形してブラウザで閲覧したいというユースケースでJekyllを使ってみた。

Jekyllにはプラグインの機構があり、Generatorというのをつくると、ファイルを用意していなくても、ページを作成することができる。

– http://jekyllrb-ja.github.io/docs/plugins/generators/

Generator の本体は #generateメソッドでSiteオブジェクトを引数にページを生成する。
Siteオブジェクトでは _data/にjsonファイルを置くと、site.dataからアクセスできる。
例えば `_data/samples.json` がある場合は `site.data[‘samples’]` としてアクセスできる。

samples.jsonの中身が以下のように`id`を含む配列だったとする。
“`samples.json
[ {“item_id”:1,”somedata”:”somedata 1″},
{“item_id”:2,”somedata”:”somedata 2″},
{

元記事を表示

RubyとEmacsをinstallする手順

# 目的

Windows上でCUIを使った開発環境の構築.

shell, emacs, rubyなんかをinstall.

# ubuntu on wsl手順

Terminalを起動,Power Shellが動いているはず.

– wsl –install -d ubuntu

この後,ubuntuでapt-get updateをしたところで変なerror(FILE is not valid yet)と言われて,うまくいかなかったのですが...

Power shellで wsl updateするとうまく行きました.時刻がずれていたため.

– sudo apt-get update

# Ruby and Emacs

– sudo apt install ruby (3.0.2が入りました,十分だね)
– sudo gem install my\_help
– sudo apt install emacs-nox

です.gitはどっかで入ったのですが,brewかも.

– sudo apt install git

かな.

T

元記事を表示

RubyでAtCoder ABC288(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC288のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A – Many A+B Problems
https://atcoder.jp/contests/abc288/tasks/abc288_a
“`ruby:a-288.rb
n = gets.to_i
n.times do
puts gets.split.map(&:to_i).sum
end
“`
## 解説
問題文の通りに実装するだけです。

# B – Qualification Contest
https://atcoder.jp/contests/abc288/tasks/abc288_b
“`ruby:b-288.rb
n, k = gets.split.map(&:to_i)
array = Array.new(n){ gets.chomp }
puts array[0, k].sort
“`
## 解説
sortを使って、辞書順にした後の上位K

元記事を表示

READMEについての備忘録

## 今回の目的

こんにちは!ももぞうです。
今回はREADMEについて自身の備忘録を記載します!

では早速いきましょう〜

## README(リードミー)とは何か?

結論から述べますと取扱説明書です。

読んで字の如く「読んで、私を。」です。。笑
分かりにくいかと思うので、もう少し細かく説明します。

READMEは自身が作ったアプリケーションについて、
どんなアプリか?、何を目的に作ったのかなどを記すものです。

このREADMEは基本的に`アプリケーションを作成した際にすでに作成されています。`

特にポートフォリオを作成される方は、
自分のアプリケーションについての重要な取扱説明書になりますので、
しっかりと記載を進めていきましょう!

## まとめ
いかがでしたでしょうか?

今回はREADMEの概要について記載をしました。

次回以降は詳細の書き方(マークダウン技法)なども紹介できればと思います!

それではまた!!

元記事を表示

conoha wingでruby-buildして新しいrubyを入れてみる

## conoha wingのrubyのバージョン低すぎぃぃ!

conoha wingをに入っているrubyはバージョン2.5と低い。
脆弱性のあるバージョンではなく最新版が使いたいところ。

それとgem installも出来ないっぽい?

ORマッパー無いとmysql使う気すら起きない自分にとって、**ActiveRecord**が使えないなんて発狂してしまう!

他にも**rmagick**は?**faraday**は?**nokogiri**は?

これらの便利なライブラリにおんぶに抱っこしてもらってる自分にとってgem使えないのは死活問題。
というわけで最新のrubyをぶっこんで好き放題させてもらう。

## 試しにruby 3.2.2を入れてみる

とりあえずrbenvで入れようと思ったんだけども、既に試した先駆者様がいらっしゃって、メモリーの制限でbuildが止まるらしい。

試しにやってみる。

基本的なやり方は [@cycloawaodorin](https://qiita.com/cycloawaodorin “タイトル”)様 の [さくらレンタルサーバーで ru

元記事を表示

開発環境をDocker化 Rails 6 x PostgreSQL

# Railsの開発環境をDocker化
Docker、docker-composeで既存のRailsアプリをDocker化する方法についてまとめてみます。

### バージョン
– ruby 3.0.2
– rails 6
– node 14.19.1
– postgres 15

### 1. Dockerfileの作成
今回はnodejsやyarnのインストールに`apt-get`ではなくマルチステージビルドを利用します。
少しですがビルドの時間を短くし、イメージサイズも小さくするためです。
“`docker:Dockerfile
FROM node:14.19.1 as node
FROM ruby:3.0.2

ENV YARN_VERSION 1.22.17
COPY –from=node /opt/yarn-v${YARN_VERSION} /opt/yarn/
COPY –from=node /usr/local/bin/node /usr/local/bin
COPY –from=node /usr/local/lib/node_modules /usr/lo

元記事を表示

RubyでAtCoder ABC289(A, B, C, D)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC289のA, B, C, Dを解きました。備忘録として解き方をまとめていきたいと思います。

# A – flip
https://atcoder.jp/contests/abc289/tasks/abc289_a
“`ruby:a-289.rb
puts gets.chomp.tr(“01”, “10”)
“`
## 解説
(他の方の提出結果を参考にしました)

trメソッドを使い、”0″を”1″に”1″を”0″に置換しています。

メモ
・[String#tr](https://docs.ruby-lang.org/ja/latest/method/String/i/tr.html):`str.tr(pattern, replace)`の形で使い、patternに書いた文字列がreplaceに書いた文字列に置換される。ただ、文字列自身というわけではなく、本質は文字の置換。今回の問題の場合は、”01″->”10″としてるが、これは”0″->”1″、”1″->”0

元記事を表示

ruby モジュール

* # 対象者

* Ruby初心者.

# この記事を読んでわかること
モジュールとは何か、モジュールの使い方。

# 目次

1. モジュールとは.

1. クラスとモジュールの違い.

1. モジュールの使用用途.

1. 名前空間の提供

1. インスタンスメソッドとして取り込む(Mix-in)

1. モジュールをオブジェクトに取り込む

# モジュールとは.
→メソッドを集めたもの.
それとってクラスじゃないの?と思ったのは私だけでしょうか?
モジュール↓
“`
module Salary
def calculate_salary

end

def kihon

end

def teate

end
“`
クラスとほとんど同じやん‥.
“`
class クラス名 
“`
で定義するところが
“`
module モジュール名

“`
に変わっただけやん‥だがしかし

# 1. クラスとモジュールの違い.

![スクリーンショット 2023-04-04 22.33.54.png](https://

元記事を表示

RubyでContentfulのEntryを取得する様々な方法

# はじめに
Contentfulの利用方法については、基本的に公式ドキュメントに全て載っています。
しかし、英語のドキュメントであることから、読み解くのに時間がかかってしまうため、
私が実務で利用したケースと合わせて、基本的なEntryの取得方法のみをまとめました。

# 前提
[`gem contentful`](https://github.com/contentful/contentful.rb)を利用しています。

# 初期化
インスタンス化には`space ID`と`access token`が必須です。
また、インスタンス化の際に[利用できるオプションはREADMEに全て記載](https://github.com/contentful/contentful.rb#configuration)されています。

“`ruby
require ‘contentful’

client = Contentful::Client.new(
space: ‘‘,
access_token: ‘
)
“`

# エントリー

#

元記事を表示

[Rails]基本コマンドの紹介について

## 今回の目的

こんにちは!ももぞうです。
今回はRailsの基本コマンドについて紹介します。

これまではRailsのGem等を紹介してきましたが、
基本コマンドについて紹介出来ていなかったので記事を投稿します。

## 基本コマンドの紹介
– `Railsアプリケーションの作成`
→Rails内でアプリを作りたいとき

“`
$ rails new アプリ名
“`

– モデルを作成する
“`
$ rails g model モデル名
“`

– コントローラーを作成する
“`
$ rails g controller コントローラー名
“`

– `rails db:migrateの実施`
→モデルなどを作成した後には必須コマンドです。

“`
$ rails db:migrate
“`

– `migrateステータスの確認`
→このコマンドで現在のファイルのステータスを確認することが可能です。
→「down」であれば「up」にする必要があります。
→「up」であれば「db:migrate」は無事に完了しています。

“`
$ rails db:mig

元記事を表示

ruby オブジェクト指向の三代要素とは?

# 対象者

* ruby初心者.

* オブジェクト指向とはなんぞやという方.
# この記事を読んでわかること

* オブジェクト指向が使われているプログラミング言語、pythonやrubyがどういうプログラミング言語であるのかをざっくり理解できます.

# 目次

1. オブジェクト指向の三代要素とは.

1. 継承とは.

1. カプセル化とは.

1. ポリモーフィズムとは.

#オブジェクト指向の三代要素とは.

1. 継承.
1. カプセル化.
1. ポリフォーフィズム.
この3つの特徴がオブジェクト指向にはあります。

# 継承とは.
⇨あるクラスを丸々コピーし、新たなメソッドを追加したりメソッドの中身を変更したりする(オーバーライド).
メリット⇨重複を排除しメンテナンスがしやすくなる。

“`
class Car
def accele
puts(“アクセルを踏みました”)
end

def brake
puts(“ブレーキを踏みました”)
end
end
“`
↑例えば車クラスというのが

元記事を表示

RubyでAtCoder ABC290(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC290のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A – Contest Result
https://atcoder.jp/contests/abc290/tasks/abc290_a
“`diff_ruby:a-290.rb
n, m = gets.split(” “)
a = gets.split.map(&:to_i)
b = gets.split.map(&:to_i)

– ans = 0
– b.each{|i| ans += a[i – 1]}
– puts ans

# 修正1
– puts b.sum{|i| i = a[i – 1]}
# 修正2
+ puts b.sum{|i| a[i – 1]}
“`
## 解説
N, Mともに100以下と小さいので、問題文の通りに実装すれば十分間に合います。

# B – Qual B
https://atcoder.jp/contests/abc290/tas

元記事を表示

最近の進捗について

### 今の自分について

たまには、今の現状でも日記のように書こうと思い立ちました。RubyonRailsを只今勉強中ですが、中々難しい。ディレクトリをあちこちと移動するのでかなり混乱しています。また、HTML/CSS/Rubyが混ざり合い更に分からなく(涙)
自分にはまだ早いのか?いや、根本的に基礎が足りないのか。と考えました。
なのでとりあえずは、全体要素を掴む為にrubyの基礎を固めに専念しようと思います。。

### 今後の課題について
– Rubyの基礎固めをする
– Webの仕組みについてもう少し学習をする
– とりあえず、既に完成しているコードを真似して書く。

こんな感じで、数週間はやっていこうかと思います。

元記事を表示

Ruby on RailsでJSONパーサーAPIを作ってみる。

# はじめに

[naritomo](https://twitter.com/naritomo08)と申します。

本職はインフラエンジニアを行っています。
これまでアプリ領域の技術習得のため、各種言語の開発環境Dockerの構築を行ってきましたが、Railsでのアプリ第一号を作ってみましたので、公開したいと思います。

いろいろアドバイスいただけると嬉しいです。

## 開発概要

以下の仕様とします。

* API稼働フレームワークはRuby on Railsを使用する。
* API入力は、以下のものを入力する。
– URLにクエリでJSONキーを指定する。(?key=key1)
– POSTボディーにJSONデータを入れる。
* API出力は以下のものとする。
– クエリで指定したJSONキーに対応した値をプレーンテキストで出力する。

## 事前準備

以下の記事を参考にRuby on Rails開発環境を構築してること。
Railsサイトを参照できること。
プロジェクトフォルダ(src)に移動する。

https://qiita.com/naritomo08/it

元記事を表示

【Rails】未経験者が非同期処理でコメント投稿を実装〜変数の再宣言エラーを解決するまで〜

## はじめに
 初めまして、未経験からエンジニアへの転職を目指しているrkyと申します。

– 日々、学習したことを振り返ることで理解を深めたい
– 客観的に見てもらうことで間違いに気づいたり、より良い手段を知りたい
– 知識は浅いが、初学者の方と同じ目線で記事を書くことで、少しでも力になりたい

 上記の理由から、Qiitaへの記事投稿を始めることにしました。よろしくお願いします。

## 概要
【学習歴】
Ruby・Ruby on Rails・javascript
9月末から学習を始め、まだ400時間ほどの学習時間です。
学習ツールは
Porogate(HTML・CSS)
デイトラWEBアプリ開発コース(Javascript Ruby Rails)
書籍(スラスラ書けるjavascript・現場Railsなど)
を使用しました。
現在は学んだことを使いながら、ロードバイクのコース共有アプリを作成中です。

【開発環境】
Rails 6.0.6.1
ruby 2.6.5
rails/webpacker 4.3.0
エディタソフト VScode
htmlはerbではなくhamlで書

元記事を表示

[Rails] バリデーションを日本語化にする方法について!

## 今回の目的

こんにちは!ももぞうです。
今回はバリデーションを日本語化する方法について紹介します。

5分程度で完了するかと思いますので、
ポートフォリオ等にぜひ採用してみてください!

## 実装手順について

まずは下記をgemfireに追記します。

“`
gem ‘rails-i18n’
“`
上記のgemを記載することにより、
メッセージを日本語化することが可能です。

しかしカラム名は英語のままだと思うので、
config/locales/ja.ymlに記述します。

“`
ja:
activerecord:
attributes:
board:
name: 名前
title: タイトル
“`
ここでテーブル名とカラム名は、
ご自身のアプリで使用しているものを記載して下さい。
※今回はboardとname、title

バリデーションの日本語化はこれで完了しました!

## まとめ

いかがでしたでしょうか?
今回は日本語化する方法を紹介させて頂きました。

それではまた!!

元記事を表示

returnの位置について

# はじめに
レビューで指摘された際に、忘れないようにしたいと思ったのでメモを残します

### 実装内容
・planのcostが0以下のの場合は、SlackNoticeServiceでSlack通知
・planのcostが0以上の場合は、planのstatusをreceivedへ変更

### レビュー指摘前のソースコード
“`
if plan.cost > 0
SlackNoticeService.notice_plan(plan)
else
plan.update(status: :received)
end
“`
### レビュー指摘①のソースコード
ネスト深くならないように修正

“`
cost = plan.cost
return SlackNoticeService.notice_plan(plan) if cost > 0
plan.update(status: :received)
“`
### レビュー指摘②のソースコード
このメソッドの戻り値にSlackNoticeService…の戻り値を返したいわけではない為、この書き方の方が良い
“`

元記事を表示

OTHERカテゴリの最新記事