- 1. HTML.CSS.JavaScript.Ruby.Rails概要
- 2. Rails5.1+puma ローカルのproduction環境でSSL接続する
- 3. Railsを使ったToDoリストの作成(2.hamlの導入と書き方)
- 4. 10の倍数との差を求める
- 5. Rails SecureRandom.alphanumericを使ってテストアカウントのパスワードを生成する
- 6. Rubyによるデザインパターン テンプレートメソッドパターンのメモ
- 7. Ruby で URL を作るときのエスケープ処理
- 8. Rubyの継承と委譲
- 9. C10K 問題を解決する Ruby のワンライナー
- 10. 【Rails】カラムの追加・データ型/カラム名の変更
- 11. エラーメッセージの重複をなくしたい
- 12. deviseをRailsで扱う
- 13. アソシエーション(1対多の関係)
- 14. 【RSpec】WebMockを利用して外部APIを利用したロジックのテストをする
- 15. Webデザイン 色のイメージ
- 16. RailsとClean Architectureに関する考察
- 17. オブジェクト指向って結局なんなん?
- 18. この問題地味に難しい…(Ruby)
- 19. 【Ruby On Rails】ActionView::Template::Error (ActiveStorage::InvariableError)の原因と対処法(仮説・検証)
- 20. 日本時刻設定と表示方法まとめ
HTML.CSS.JavaScript.Ruby.Rails概要
#HTML
HTML(Hyper Text Markup Language)とはWEBページを作成する際に使用されるマークアップ言語である。
WEBページのほとんどにHTMLが使用されている。
HTMLは**タグ**を使いコンピューターに命令を出す事により見出しを付けたり段落を付けたりと、WEBページのレイアウト、構成を形作ることができる。
#CSS
CSS(Cascading Style Sheets)は先ほどのHTMLと組み合わせて使用する言語である。
CSSは文字の色やサイズ、レイアウトを変えたり、WEBページを装飾する言語である。
HTMLでもWEBページの装飾をすることは出来るが、CSSの役割なので分けて使う必要がある。
#JavaScript
WEBサイトに動きをつけるためのプログラミング言語である。
具体的には文章や画像を拡大表示したり、フォームに文字を入力できるようにしたり、より動的なWEBサイトを作ることができる。
サーバーを介さずにブラウザ上で動かすことができる。またこのようなプログラムをクライアントサイド・スクリプトという
#Ruby
Rubyと
Rails5.1+puma ローカルのproduction環境でSSL接続する
Rails5.0から5.1にアップグレードし、ローカルでproductionの動作確認しようとしたら、何かとつまずいたので諸問題の解決方法をまとめておきます。
まず、 `rails s -e production` を叩いたところ、この接続にはセキュリティの問題があるのでWEBページを表示できません的なエラーが出ました。httpsにしないとダメなようです。
# SSLで接続する
基本的なやり方は、こちらの記事を参照させていただきました。
[Rails5 + pumaのローカル環境でSSL/HTTPSを有効にする](https://qiita.com/zaru/items/ccf328e87c768168134d)上記記事は、opensslで証明書発行してましたが、エラーが出たので証明書の発行をmkcertでやりました。
mkcertでの証明書の発行のやり方は、こちらの記事が参考になりました。
[ローカル環境でSSLをオレオレ証明書で行っていて警告が出てる人に朗報](https://qiita.com/walkers/items/b90a97a99bbb27f6550f)まず
Railsを使ったToDoリストの作成(2.hamlの導入と書き方)
#概要
本記事は、初学者がRailsを使ってToDoリストを作成する過程を記したものです。
私と同じく初学者の方で、Railsのアウトプット段階でつまづいている方に向けて基礎の基礎を押さえた解説をしております。
抜け漏れや説明不足など多々あるとは思いますが、読んでくれた方にとって少しでも役に立つ記事であれば幸いです。#環境
* `Homebrew: 2.5.10` -> MacOSのパッケージ管理ツール
* `ruby: 2.6.5p114` -> Ruby
* `Rails: 6.0.3.4` -> Rails
* `node: 14.3.0` -> Node.js
* `yarn: 1.22.10` -> JSのパッケージ管理ツール
* `Bundler: 2.1.4` -> gemのバージョン管理ツール“`:iTerm
$ brew -v => Homebrew 2.5.10
$ ruby -v => ruby 2.6.5p114
$ rails -v => Rails 6.0.3.4
$ npm version => node: ‘14.3.0’
$ yarn -v
10の倍数との差を求める
今取り組んだものは
正の整数を入力して、それが10の倍数との差が2以下であるならばTrue、そうでないならFalseを出力するというものだった。以下が自分の回答である。
“`ruby
def near_ten(num)
basis = (num + 5) / 10 * 10
difference = (num – basis).abs
if difference <= 2 puts "True" else puts "False" end end ``` まず`num`に一番近い10の倍数を`basis`とする。 `basis`にふさわしい数字を計算しているのが2行目。 ```ruby basis = (num + 5) / 10 * 10 ``` 例として、15~24までの整数だと一番近い10の倍数は20であるから、20を基準にしたい。 この整数たちにそれぞれ5を加えると、20~29になる。 この整数たちは10の位が2なので、それぞれ`/ 10 * 10`を行うと20が出てきて、基準にしたい数字となる。 他の整数でも同じよう
Rails SecureRandom.alphanumericを使ってテストアカウントのパスワードを生成する
railsでアプリケーションを作成しています。
テストアカウントでのログイン機能を実装したときにエラーが発生したため、自分が行った解決方法を記録として残しておきます。## 開発環境
Ruby 2.6.5
Rails 6.0.3.3## 実装内容
以下のコードでテストログイン機能の実装を行いました。“コントローラー“
“`ruby
class Users::SessionsController < Devise::SessionsController # ゲストユーザーとしてログイン def new_guest user = User.find_or_create_by!(nickname: 'ゲストユーザー', email: 'user@example.com') do |user| user.password = SecureRandom.alphanumeric end sign_in user redirect_to root_path, notice: 'ゲストユーザーとしてログインしました。' end
Rubyによるデザインパターン テンプレートメソッドパターンのメモ
プログラムの設計力向上のため『Rubyによるデザインパターン』を読んでおり、気になるデザインパターンを、1つずつまとめていきます。
今回は、テンプレートメソッドパターンについてまとめました。
## テンプレートメソッドパターンについて
基底クラスに不変の部分を記述し、変わる部分はサブクラスに定義するメソッドにカプセル化するパターンです。変わるものと変わらないものを分離する、という設計の考えに基づいています。
## サンプルコード趣味の筋トレにちなんでサンプルコードを書きます。
ベンチプレスと懸垂はどちらもトレーニングの流れは同じものの、具体的な流れはそれぞれ異なっています。そこで、トレーニングごとの内容を出力するプログラムを書きます。
“`rb
class Training
def initialize(type)
@type = type
enddef start
prepare
execute
cleanup
enddef prepare
if @type == :bench_press
Ruby で URL を作るときのエスケープ処理
`https://xxxx` といった文字列のURLに、 クエリパラメータをつけて URL を作る場合、 クエリパラメータは 特別な形に変換する必要があります。
JavaScript でいう `encodeURIComponent` を実行してやる必要があります。
これにより `+` は `%2B` に、 `&` は `%26` になります。## 基本
Ruby では `CGI.escape` を使います。
“`ruby
require ‘cgi’CGI.escape(‘+ &’) # => “%2B+%26”
“`### 使用例
`CGI.escape` を使って URL を組み立ててみます。
ハッシュを使うなどいろいろと改善できるところはありますが、ここではシンプルなパターンを記載します。“`ruby
“https://samole.com?key={CGI.escape(value)}”
“``key` に特殊な文字を使うことはまずないと考えて `value` のみ escape をしています。
`key` も escape する場合は、
Rubyの継承と委譲
継承と委譲の使い分けについてあまりわかっていないのでまとめました。
## 継承
他のクラスから機能を引継ぎ、新たにクラスを作成することです。### 例
Baseクラスからすべのたメソッドを引継ぎ、Fooクラスを作成する“`ruby
class Base
def message
‘ok’
end
endclass Foo < Base; end foo = Foo.new puts foo.message # => ok
“`## 委譲
特定の処理(責任)を他のクラスのメソッドに委ねることです。### 例
BaseクラスのmessageメソッドをFooクラスにmessageメソッドを委ねる“` ruby
class Base
def message
‘ok’
end
endrequire ‘forwardable’
class Foo
extend Forwardable
attr_reader :messdef initialize
@mess = Base.new
end
def
C10K 問題を解決する Ruby のワンライナー
# C10K 問題とは
i18n と L10N は,それぞれ internationalization と localization の略称だ。
internationalization は綴りが長いので,「i」と「n」の間に 18 文字あるというところから「i18n」という表記が生み出された。L10N も同様。
なお,「i18n」が小文字で「L10N」が大文字なのはタイプミスではない。
参考:[国際化と地域化 – Wikipedia](https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E5%8C%96%E3%81%A8%E5%9C%B0%E5%9F%9F%E5%8C%96)では,「c」で始まり「k」で終わり,間に 10 文字ある英単語としてどんなものがあるだろうか。
これが C10K 問題である[^c10k]。[^c10k]: この記事はジョーク記事です。本当の C10K 問題はまったく違うものです。ごめんなさい。
# コード
まず,英単語が大量に集められたファイルがあるとよいのだが,幸い,Linux や macOS には
【Rails】カラムの追加・データ型/カラム名の変更
##はじめに
カラムの追加・カラム名、テータ型の変更をする手順として代表的なのが、
1⃣“`rails db:migrate:status“`で現状の確認
2⃣マイグレーションファイルの作成or追加コマンドをターミナルに入力(行いたい操作でコマンドは異なります)
3⃣マイグレーションファイルに変更内容を記述(追加の場合は内容の確認だけになります)
4⃣“`rails db:migrate“`
だと思います(違ってたらすみません)。もちろんこれも正解だと思います。(rails db:rollback使うこともあります)毎度コマンドを調べたり誤字があるとテーブルが謎に消えてしまうことがあるかと思います、、、
####**レコードの内容が消えていいような場合は楽な方法があるそうで、、(ご存じの方はすみません)**
※レコードの内容が少なかったり消えても良い状態、seeds.rbで必要なデータを作成しているとき向けの内容です。
##上記の楽な方法(複数同時変更も可能)
1⃣“`rails db:migrate:status“`で現状の確認(問題なければ2⃣へ)
2⃣既に作成してある
エラーメッセージの重複をなくしたい
##エラーメッセージの重複①
form_withメソッドを使って、
form.number_fieldで数値を入力させるフォームを作った。
正しい数値を入力すればエラーは起きないし、バリデーションを超える数値を入力しようとすると、そのタイミングでエラーが出る。
しかし、空のまま入力フォームを送ると、—
○○を入力してください
○○は不正な値です
○○は一覧にありません—
と、エラーが3つも出てしまう。
空を送信しただけで、3つもいらん!!!###解決方法
“`ruby:model
with_options presence: true do
validates :grade, format: { with: /\A[0-9]+\z/, allow_blank: true}, inclusion: { in: 1..7, allow_blank: true }
validates :class_number, format: { with: /\A[0-9]+\z/, allow_blank: true }, inclusion: { in: 1
deviseをRailsで扱う
まず、こちらではデバイス導入の一連の流れ(自分が行った)ことを復習として、また忘れないようこちらに記載させていただこうかと思います。
初学者なので間違ったことを伝えていた場合は、都度ご連絡お願い申し上げます。##deviseについて
まず、デバイスの概要ですが、こちらはユーザー管理機能を実装するためのGemです。
新規登録やログインログアウトなんかが簡単に実装できます。##deviseの導入
Gemfileを編集しましょう“`
gem ‘devise’(一番最後の行に追記しましょう)
“`これで、ローカル、テスト、本番環境でデバイスが扱えます。
##ローカルサーバーを再起動
Gemをインストールした後はターミナルで起動しているローカルサーバーを一度再起動しましょう。
インストールしたGemの反映のタイミングが、サーバー起動時のためです。##deviseの設定ファイルを作成
deviseを使用するためには、Gemのインストールに加え、devise専用のコマンドで設定ファイルを作成する必要があります。
こちらのコマンドでファイルを作りましょう“`
% rai
アソシエーション(1対多の関係)
# アソシエーション(1対多の関係)
##1.アソシエーションとは?
簡単に表現すると「各モデル同士を関連付ける」ということである。つまり、テーブル同士で関連付けておき、**一方のモデルからもう一方のモデルにアクセスできる**ようにすることである。例. **1人のuserが複数のコメントを所有するパターン(1対多の関係)**
![aso0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/875779/0266acdc-6c52-f18d-cf59-7bdf346b3206.png)
→「**Aさん**」とAさんのコメントである「**おはよう**」、「**こんばんは**」を結びつける。
→「**Bさん**」とBさんのコメントである「**こんにちは**」、「**さようなら**」を結びつける。
##2.has_manyメソッドとbelongs_toメソッド
では、どのようにアソシエーションをコードで再現するのか示してみる。
上記の**1人のuserが複数のコメントを所有するパターン(1対多の関係
【RSpec】WebMockを利用して外部APIを利用したロジックのテストをする
[【Ruby】faradayを利用した外部API連携クラスの作成手順](https://nishinatoshiharu.com/faraday-apiclient/)の記事で、Faradayを利用した外部APIとの連携方法について紹介しました。
外部APIを利用したロジックのテストコードでは、実際のAPIを利用するのではなくHTTPリクエストをスタブ化するのが一般的です。
Railsでは[webmock](https://github.com/bblimke/webmock)というgemを利用することでHTTPリクエストのスタブ化ができます。今回はWebMockを利用して、外部APIと連携したロジックのテストコードを作成する方法について紹介します。
## テストコードの対象となるクラス
今回は`QiitaClientAPI`というQiita APIと連携するクラスのテストコードを作成します。
クラスには`get_items`という記事一覧をQiitaから取得するメソッドが実装されています。具体的なソースコードは以下の通りです。
“`ruby:lib/qiita_ap
Webデザイン 色のイメージ
#はじめに
現在オリジナルアプリを作成中です。トップページのフロント実装時に色合いの考え方を調べました。忘れても思い出せるよう書き記します。**開発環境**
ruby 2.6.5
Rails 6.0.3.4#目次
1.色の効果
2.オリジナルアプリの配色#1.色の効果
Webデザインで使う色は目的別で選ぶ必要がある。Webサイトを利用するユーザー目線に立つことが重要である。赤系
——–
熱い、生命力、警告オレンジ系
——-
近親感、陽気黄系
——-
好奇心、協力緑系
——-
自然、リラックス青系
——-
冷たい、静けさ、誠実
RailsとClean Architectureに関する考察
Railsのアプリケーションの設計について考える機会があったのでその過程で考えたこととをまとめておきます。
## 背景
Railsをメインで使用している企業で新規のWebアプリケーションを0ベースで作ることになった。
その企業はRailsでかなり大規模なアプリを運用しており、Rails自体の知見は十分。一方で伝統的なRailsでの開発手法に大規模開発の限界も感じており、この機会に設計のPrcaticeを模索したいという要望もあります。
筆者の方はアプリケーションの設計にはそれなりに自信がありますが、普段使用している言語はScalaやNodeJS(TypeScript)がメインです。
Railsでの開発は何度もやっており、特に開発に不自由することはありませんが、フレームワークの細かい癖などはあまり把握していません。今回の要件では元々のチームのスキルを活かすために、Rails自体を別の言語やフレームワークに置き換えることは考えません。
Railsの良さを活かしつつモダンな設計手法を取り入れるにはどうすれば良いかを考察するのがこの文書の主目的になります。
## 基本設計方
オブジェクト指向って結局なんなん?
#とりあえずオブジェクト指向ってなんなん?
モノ(オブジェクト)の組み合わせでプログラムを動かしていくという考え方です。
アプリケーションは部品から構成されており、部品同士が相互に作用し合うことで全体が動く(歯車が噛み合う)ようなイメージです。部品が「オブジェクト」であり、相互作用はオブジェクト間で受け渡される「メッセージ」であると考え、
正しいメッセージを正しいオブジェクトへ届けるには『メッセージの送り手が受け手のことを知っている』必要があります。
そして、相手のことを知っている、つまり2つのオブジェクト間に依存関係が発生するということです。
この「依存関係」を管理することこそオブジェクト指向設計であるということです。
![087582.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608770/99cd3d5b-e485-c654-0ff5-3f46be847364.jpeg)
キャッチボールでいうのであれば、大人と子供はお互いの位置を理解しており、
どのくらいの力加減で投げれば相手がキャッチで
この問題地味に難しい…(Ruby)
#0から9までのカウント(Ruby編)
#問題
0から9までを数えるカウンタを考えます。0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9
このカウンタの拡張として、任意の数から始められるカウンタを考えました。
2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 0 → 1
(2から始める例、カウンタは9まで進んだら0に戻ります)入力から数字nを受け取り、nからカウンタをスタートさせて、
カウンタの値を順番に10個出力するプログラムを実装してください。
#入力される値
入力は以下のフォーマットで与えられますn
・nはカウンタの最初の値
#期待する出力
nから始まるカウンタの10個の値を、順番に改行区切りで出力してください。
#入力例1
0#出力例1
0
1
2
3
4
5
6
7
8
9#入力例2
2#出力例2
2
3
4
5
6
7
8
9
0
1
#私の回答(結局解けなかった)
“`java:
n = 2
# nが10まで進んだら0にリセットする、それ以外はパスして10個出力
for i in n..9 d
【Ruby On Rails】ActionView::Template::Error (ActiveStorage::InvariableError)の原因と対処法(仮説・検証)
備忘録です。
ActionView::Template::Error (ActiveStorage::InvariableError)の原因と、その対処法について仮説・検証しました。# エラー背景・経緯
デプロイしたアプリの動作確認を行うことにしました。今回は画像がアップロードされているかどうかを、簡易的に手動で確認したいため、単体テストや結合テストを行わずに動作確認を行うことにしました。今回は周りの友達に動作確認テストの協力をしてもらいました。
協力内容としては、画像を投稿できるフォームにファイルを添付して、投稿したファイルがビューに表示できるかどうかを確認して欲しいと依頼しました。# エラー内容
協力者である友達から、画像ファイルを添付したと報告をもらったので、デプロイしたアプリの詳細画面を確認しました。すると、”We’re sorry but something went wrong”と表示されてしまいました。まずは、ターミナルでログとそのエラー内容を確認しました。(今回はheroku)
“`terminal
% heroku logs –tail(中略
日本時刻設定と表示方法まとめ
#はじめに
自分用の備忘録
忘れがちなのでまとめてみる#手順
## 日本時刻設定
### アプリケーションファイル編集
“`ruby:config/application.rb
# 中略module App
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.0 # 日本語の言語設定 config.i18n.default_locale = :ja # 日本時刻の設定 config.time_zone = 'Tokyo' # 中略 ``` ### 時刻のフォーマットを設定 ``` config/locales/ja.yml => 作成
“`
“`yml:config/locales/ja.yml
ja:
time:
formats:
default: “%Y/%