- 0.0.1. [Rails]Carrierwaveを用いて画像をアップロードする方法
- 0.0.2. Rustに影響を与えた言語たち
- 0.0.3. テスト
- 0.0.4. Rubyでチンチロゲームを作る 最終回 レビューを受けての改善
- 0.0.5. Rspecの基本[Rails]
- 0.0.6. Railsビギナーやってみた【第1章】
- 0.0.7. 【Ruby】print, puts, p の違い
- 0.0.8. ファイルがあるのにActionController::MissingExactTemplateが出た
- 0.0.9. Git clone から 環境構築 して プロジェクトに参加するまでの道のり(全部盛り)
- 0.0.10. コンテナ上で RSpec 実行中、身に覚えのない MYSQL Lock TimeOut エラー
- 0.0.11. Ubuntu 20.04 に rbenv で Ruby 環境を整える最小手順
- 0.0.12. MeCabで形態素解析してみた
- 0.0.13. Yamlファイルを活用してDBにデータを挿入する
- 0.0.14. rails のparams[:id]の正体
- 1. 前提条件
- 2. showアクションの設定
[Rails]Carrierwaveを用いて画像をアップロードする方法
## carrierwaveとは▼
簡潔に述べると画像をアップロード機能を簡単に追加してくれるRailsのライブラリ(gem)です。
アップロードする画像のサイズを指定したりできます。## 投稿された画像の保存ファイル▼
投稿される画像は、アプリケーションのpublic以下に溜まっていきます。
画像をGitHubで管理する必要が無い場合は、下記のように.gitignoreに記述を追加して
Gitで管理しないようにしましょう。“`
# .gitignoreへ追加
public/uploads/*
“`## carrierwaveの追加方法▼
上から順に実行。“`
# ターミナルで実行
$ brew install imagemagick
“`“`
# Gemfileに追加
gem ‘carrierwave’
gem ‘mini_magick’
“`“`
# ターミナルで実行
$ bundle install
“`“`
# ターミナルで実行
$ rails g uploader image
“`“`
# app/models/
Rustに影響を与えた言語たち
Rustを使っていると時々**「あれ?この機能、他の言語に似てない?」**と思うことがあります。最初に思ったのはトレイトで、これはHaskellの型クラスやScalaのImplicitsを使った型クラスパターンと同等な機能と理解しました。クロージャのシンタックスはRubyのブロック記法に似ているなと感じました。そんな**「似ている」**を少しだけ深堀りしてみたいと思い、Rustに影響を与えた言語を調べて見ました。
(本記事は[自分のブログ](https://hinastory.github.io/cats-cats-cats/2020/06/13/rust-influences/)からの転載記事です。)
# TL;DR
– Rustに影響を与えた言語に関してはすでにまとまったページがありました
– [Influences – The Rust Reference](https://doc.rust-lang.org/reference/influences.html)
– [Why Rust? – #Influences | Learning Rust](https://
テスト
#mark down記法とはなんぞや
書式は右上の?マークに記載
???
細かな特徴
tab でスペースを挟めない## 良い記事を書くためには
役に立つ記事
自分用のメモのつもりで書いたものでも、少し気をつけるだけでぐっと価値のある記事にすること
## 意識すると望ましいもの
1.具体的で簡潔なタイトル
ex 「Rubyメモ」→「Rubyの定数探索はスコープと継承関係のどちらが優先されるか
「備忘録」→ 「特有の書式、〇との違い、特徴、特殊性、類似性」2.環境や前提条件を説明
ex
ソフトウェアのバージョンは何か、記事中のコードを実行するためにはどんな手順が必要かを書いておくと、自分の環境に当てはまるかどうかを後から読む人が判断しやすくなります。os: windows10
ruby 2.23.引用元や参考元へのリンクを書く
引用元 dot.install
4.
**
6/14 投稿 書き方のためのサンプル例としてガイドラインから流用
https://help.qiita.com/ja/articles/qiita-article-g
Rubyでチンチロゲームを作る 最終回 レビューを受けての改善
# レビューをもらおう
前回の記事で一応は全体のコードは仕上がった。しかし、まだまだアラが多い。そういうわけで、自分が所属しているオンラインサロンでコードレビューをしてもらった。けっこうたくさんの指摘があったので、ひとつずつ対応していった。# 指摘事項一覧
#### 文法関連
+ Rubyのインデントは半角スペース2つ
+ 単純な比較は==を使用する/thenも必要なし
+ 変数展開を使ったほうがいい+ ファイル名がわかりにくい(`transfer_money` -> `player.rb`へ)
#### メソッドの移動
+ サイコロを振る/お金をかけるのはplayerの中にいれたほうがいい
(playerの行動であるため)+ `check_win_lose`や`transfer_money`メソッドはPlayerのメソッドではないかも
#### 読みやすくする
+ `main.rb`はゲームの流れの単位でメソッド化すると全体がみやすくなる
+ 同じ内容が複数ある箇所はまとめる(`strength_relationship`など)
+ `roll_dice`の
Rspecの基本[Rails]
#RSpecの基本的な文法の忘備録
##はじめに
テスト例文の機能は思い出しやすいようにざっくり書いているのでプログラミング的に合っているかは保証しない参考文献
現場で使えるRuby on Rails5 速習実践ガイド使えるRSpec入門・その1
https://qiita.com/jnchito/items/42193d066bd61c740612##事前用意
Railsジェネレーターで適当にscaffoldを作成“`ruby:
rails new plactice
“`
“`ruby:
rails db:create
“`
“`ruby:
rails g scaffold user name:string age:integer
“`
“`ruby:
rails db:migrate
“`
“`ruby:
rails s
“`
これで、雛形は作成完了。
Modelディレクトリのuser.rbを下記のように作成“`ruby:model/user.rb
class User < ApplicationRecord def initial
Railsビギナーやってみた【第1章】
##この記事について
ProgateのWeb開発コースを終えた後に始めたRailsチュートリアルが難しすぎて途方に暮れていた私が、Railsビギナーを通して、アプリ開発ができるようになるための学習記録です。##Railsビギナーとは
[Railsビギナー](https://maki-nomad.com/rails-beginner/)
フリーランスでプログラマーをされている、真木裕也さんが作成されたプログラミング初心者向けの教材です。
第0章〜3章まであり(2020/6/13現在)、丁寧な説明に沿って質問サイトを作っていきます。無料とは思えない丁寧さと内容です。感謝。。。##第1章「質問投稿機能を作ろう」
(第0章については、VSCodeの簡単なセットアップですので省きます)desktopに移動し、beginner_appを作成(`rails new`コマンド)
フォルダを開き`rails s`起動#####⚠️rails s起動時のエラー
`Please run rails webpacker`などと言われることがあります。起動が成功するまでとにかく言われた通り
【Ruby】print, puts, p の違い
# はじめに
Ruby でコンソールに文字列を出力する際の関数として、`print`, `puts`, `p` が用意されているが、違いについて自分なりにまとめてみた。
確認したバージョン : ruby 2.6.6p146 (2020-03-31 revision 67876) [x64-mingw32]# 表示をいろいろ試してみる
## `print`
`print` は、文字列をそのまま出力する。オブジェクトが渡された場合は、オブジェクトの`.to_s` メソッドで返された文字列を出力する。“`
print “abc”
print “def”# => abcdef
“`改行文字`\n`やタブ文字`\t`については、シングルクォート`’`で囲むと`\`をエスケープして文字表示し、ダブルクォート`”`で囲むと、それぞれ改行、タブとして解釈して表示する。
“`
print ‘a\nb\tc’
# => a\nb\tc # シングルクォートだと、改行、タブを解釈しないprint “d\ne\tf”
# => d # ダブルクォ
ファイルがあるのにActionController::MissingExactTemplateが出た
#ActionController::MissingExactTemplate
“`error
ActionController::MissingExactTemplate (Customer::TopController#index is missing a template for request formats: text/html):
“`こんなエラーが出た。
Railsで開発を行っている中で時々見るエラーだな。
適切なTemplateが見つかりません。というエラー。
まあいつもみたいに対応しようcontrollerのアクションに対して適切なビューがないんだろ…
controllerのアクション名とviewのページ名を確認しよう…
ファイル名でも間違えたのかな…?間違ってないや。
ディレクトリもあってる。
なんでだ?Completed 406 Not Acceptable in 2ms
ん? 406error?406error初めてみたわ
##解決方法
そういえばerbじゃなくてslimファイル使ってたんだ!
Gemfileに以下を追
Git clone から 環境構築 して プロジェクトに参加するまでの道のり(全部盛り)
他の人が作っているプロジェクトに参加したい! と思い、とりあえずGit Cloneするものの、そのあともなかなか骨が折れます。道すがらバージョンあわせ(ここではRuby・MySQLを使用)に見舞われたり、共同作業を想定している場合は、参加される側([記事末尾に記載](#製作者側がすること))もあらかじめしておかなくてはならないことがありますので、その道のりを丸っと記録しておきました。部分的にでも、参考になるところがあればうれしいです。
# Gitリポジトリからcloneする
参加したいGitHubのページにアクセス。「Clone or download」のボタンをクリックするとURLが取得できる。
![スクリーンショット 2020-06-13 12.17.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410392/7f028040-90e8-d3d5-3cc9-6bf7c5a1963d.png)
このURLをコピーして、ターミナルで以下のようにコマンドを打つと、現在いる場所にフォルダが作成される
コンテナ上で RSpec 実行中、身に覚えのない MYSQL Lock TimeOut エラー
ポンコツすぎる過去の自分に贈る。
# 原因– 原因 1. コンテナ上でテストを走らせる際、`binding pry`で実行を停止しながらデバッグ等を行っていた。
– 原因 2. あろうことか、**コンテナを停止せず**(binding pry で止まっている状態)、**新しいターミナルを立ち上げ、再度テストを実行。**
– 原因 3. コンテナが乱立し、**同タイミングで複数コンテナがテスト用データの作成等で、 同じDBのテーブルをいじろうとしている状態**に。
イメージ
– その結果、引き起こされたのが
“`ruby
Mysql2::Error::TimeoutError: Lock wait timeout exceeded
`
Ubuntu 20.04 に rbenv で Ruby 環境を整える最小手順
Ubuntu 20.04 に rbenv による Ruby 環境を整える最小手順をまとめてあります。
## 前提
– Ubuntu 20.04 インストール直後
– シェルは Bash
– インターネット接続環境※ WSL2 でも大丈夫です。
## インストール
### rbenv + ライブラリ
“`console
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo ‘export PATH=”~/.rbenv/bin:$PATH”‘ >> ~/.bashrc
~/.rbenv/bin/rbenv init >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git “$(rbenv root)”/plugins/ruby-build
apt install -y build-essential libssl-dev zlib1g-dev
“`### rbenv でインストール
“`
r
MeCabで形態素解析してみた
Ubuntu(bionic)上で、Ruby(mecabジェム)を使って形態素解析を実行してみるところまでの手順です。
まずはインストール。
“`bash
apt install mecab mecab-ipadic-utf8 libmecab-dev
gem install mecab
“`以下のプログラムで解析結果を出力してみてみることが出来ます。
“`ruby
require ‘mecab’tagger = MeCab::Tagger.new
puts tagger.parse(open(‘sample.txt’).read)
“`出力結果の文字列(String)をパースして、単語の出現回数順に表示するサンプルです。
“`ruby
require ‘mecab’tagger = MeCab::Tagger.new
t = tagger.parse(open(‘sample.txt’).read)
words = {}
t.split(“\n”).each do |l|
w = l.split(“\t”)[0]
c = words[w] ||
Yamlファイルを活用してDBにデータを挿入する
### 1)背景
Yamlファイルについて、環境設定などの用途で使用されることが多いですが、アプリケーションでデフォルトデータを予めデータベースに登録したい場合なども、csvファイルと比較してyamlファイルは便利です。私のようにポートフォリオを作成していると、サンプルデータについて、見てもらう人が意識せず、セッティングしておく必要があります。ソースには書かない、csvは可読性が低いなど、yamlが登場する場面だと思います。
### 2)環境
| 項目 | 内容 |
|:—————–|:——————:|
| OS.Catalina | v10.15.4 |
| Ruby | v2.5.1 |
| Ruby On Rails | v5.2
rails のparams[:id]の正体
railsでアクションを定義するときに受け取るデータを
“`ruby
params[:id]
“`
と表現することが多かったのだけどいまいち意味がわかっていなかったのでメモ。
同じようなことで悩んでいる方の参考になればと思う。前提条件
例えばこんな感じで投稿を表示する画面で投稿の詳細を確認する機能を実装したかったとする。
詳細表示するアクションはshowアクションなのでコントローラーにshowアクションを定義しつつそれに対応するビューを用意してあげると良さそう。showアクションの設定
多くのrailsの学習サイトなどではshowアクションは以下のように表現されていることが多いんじゃないかと思う。
“`ruby
def show
[Rails5] Rspec -ネスト時の単体テスト-
#・はじめに
Routingネスト時の単体テストについて備忘録として残します。
#1. 前提条件
**まず以下の様にpostテーブルが存在しているとします、**
“`ruby
create_table “posts”, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8”, force: :cascade do |t|
t.string “content”, null: false
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
t.integer “group_id”
t.integer “user_id”
end
“`**そして以下の様にgroup配下にネストされている状態です。**
“`ruby
resources :groups do
resources :posts, only: %i[new create edit update]
end
“`#2.結論
Rails6でドラッグ&ドロップ可能なマークダウンエディタを作成する(Active StorageとSimpleMDEとInline Attachmentを使用)
# 概要
Rails6でQiitaの投稿画面のように、画像をドラッグ&ドロップ可能なMarkdownエディタを作成した際のメモです。
![img.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149198/9a3ed643-c396-1c0b-b5cb-be8497e39954.gif)
[参考コードはこちら](https://github.com/nobu17/rails_markdown_drag_and_drop)
ちなみにRailsをGWに学んで、このエディタ機能を実装したblogを作成しました。
(Heroku,GCSで構築)
地元の静岡県東部のスポット等を紹介していますので興味があればどうぞ。
[駿河部](https://surugabu.com)# 環境
Mac OS 10.15.4
Ruby 2.6.3p62
Rails 6.0.2.2# 使用する機能について
主に3つのOSS及び機能を使用して実装をしています。
– SimpleMDE
– Inline Attac
Rubyで80行くらいのインタプリタ(コンパイラ?)作った
Rubyの勉強がてら四則演算できるインタプリタっぽいの作りました。
## コード
インタプリタ本体
“`rb
class Interpreter
def calc(code)
create_tokens(code)
exec(stmt)
end
private
def create_tokens(code)
@tokens = []
while !code.empty?
arr = [
[/^[0-9]+(\.[0-9]+)?/, “num”],
[/^[\+\-\*\/]/, “bin”],
[/^[()]/, “bra”],
[/^\;/, “semicolon”],
]
token = arr.map { |(regex, type)|
val = code[regex]
{ type: type, val: val } if !val.nil?
}.compact.first
【Rails】impressionistを用いてPV数ランキングの実装
# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/bfadc8da-20f1-aff1-473d-9246594ec38f.gif)
# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina# 前提
下記実装済み。
・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)# 実装
### 1.`impressionist`を導入
**※バージョンを指定する事に注意!(指定しないとエラーが出た)**
“`ruby:Gemfile
gem ‘impressionist’, ‘~>1.6.
Rspec 導入メモ_Rails
#RSpec学習における技術メモ(導入)
##RSpecとは
rubyにおけるBDD(振舞(ビヘイビア)駆動開発)のためのテスティングフレームワークである。
※テストの概念は別途まとめるため単語のみの理解とする。
##capybaraとは
Webアプリケーションのブラウザ操作をシミュレーションできる他、ブラウザ操作をcapybaraのDSLを用いて直感的に記述できる。
実際にブラウザやHandlessブラウザ(GUIのない)ブラウザを操作可能
##FactoryBotとは
テスト用データの作成をサポートしてくれるgemである。
テスト用データを簡単に用意でき、テストから呼び出して利用することができる。#導入gem
– Rspec
– Capybara
– FactoryBot
を用いてRubyonRailsのテストコードを記述して行く##RSpec導入
Gemfileにgemを追加
この際、テストグループのブロックに記入すること
グループ内に記入することでテスト環境のみでgemが有効になる。※ブロック参照サイト
http://ruby.studio-kingdom.co
【Ruby】条件演算子が2回(以上)続く時
※本文内容が誤っていたことをコメント欄で教えて頂いたので修正しました。
# きっかけ
以前あるgemのインストールに失敗してしまった時に原因を探っていて、以下のコードにたどり着いたのだが、1行に条件演算子が2回出てきて「これはどういう条件で動くんだ?」と分からなかったのでメモ。“`ruby
idirs = idir ? Array === idir ? idir.dup : idir.split(File::PATH_SEPARATOR) : []
“`
https://github.com/ruby/ruby/blob/master/lib/mkmf.rb#L1780# 結論
外側から内側に向かって、順繰りに評価されていく。
“`ruby:irb
> 1 == 1 ? 2 == 2 ? “a” : “b” : “c”
=> “a”
# 1 == 1 が true なので 「”a” : “b”」 と : “c” とで 「”a” : “b”」, 次に 2 == 2 が true なので “a” : “b” は “a”> 1 == 1 ? 2 == 0 ? 3 ==