- 1. Rails + heroku 無料でアプリケーションを公開
- 2. Railsで綺麗に\nをに変換する方法
- 3. RubyonRailsでnil落ちの回避方法
- 4. rails generate が動かないときの対処
- 5. deviseを用いたユーザー登録をウィザード形式にする
- 6. while文とfor文
- 7. [備忘録]Railsにおけるテスト
- 8. Ruby on RailsでGoogle Books APIを叩く
- 9. [Rails] mysql2 で bundle installが失敗するときの対処法
- 10. [備忘録]Ruby開発環境の作りかた
- 11. rubyのバージョン変更 2.5.1
- 12. 【rails】読みやすいコードの書き方【初心者向け】
- 13. 5つのプログラミング言語のまとめ
- 14. 【Rails】authenticateメソッドが返すもの
- 15. ActiveAdmin の各パーツのカスタマイズ方法がドキュメントのどこに載っているのかざっくり調べた
- 16. 独学でエンジニアを目指してからの三ヶ月間の学習振り返り
- 17. 【メモ】条件分岐
- 18. 【備忘録】Ruby : モジュールの使い方(Mix-in,多重継承)
- 19. Ruby の Enumerable を再実装するときに正解が見たくなったら TruffleRuby の実装を見るとわかりやすい
- 20. Ruby の Enumerator に with_last を追加してみた
Rails + heroku 無料でアプリケーションを公開
##前提
– Mac OS
– Ruby on Rails
– Herokuアカウント作成済
登録がまだの方は[Heroku公式サイト](https://jp.heroku.com/)から登録してください。[Herokuとは](https://jp.heroku.com/what)、`PaaS(Platform as a Service)`と呼ばれるサービスで、
アプリケーションを実行するためのプラットフォーム。
無料でさくっと公開した方はオススメ。– 未認証アカウントの場合:無料 dyno 時間は 550 時間/月まで
(クレジットカード登録をした場合:+ 450 時間/月が付与 合計で1,000時間/月 利用可能)
– 必要な RAM は 1 dyno あたり 512 MB
– 30分アクセスがないとスリープしてしまう(スリープ中はdynoを消費しない)
– HerokuPostgreSQLは、10000行までの制限あり詳しくは下記公式のページ参照してください。
https://jp.heroku.com/what##1. Heroku CLI インストール
“`
Railsで綺麗に\nを
に変換する方法
## 準備
まず、Stringクラスを拡張します。ファイルの置き場所はお作法です。“`ruby:/lib/ext/string.rb
class String
def to_br
ERB::Util.h(self).gsub(/\R/, “
“)
end
end
“`先ほどのstring.rbを初期化時に読み込みます
“`ruby:/config/initializers/extension.rb
require ‘ext/string’
“`これで準備完了です。
## 使い方
あとは任意のhtmlファイルにて、
“`erb:hoge.html.erb
<%== hoge_str.to_br %>
“`または、
“`slim:hoge.html.slim
== hoge_str.to_br
“`
などで綺麗に\
へ変換することができます。
RubyonRailsでnil落ちの回避方法
#RubyonRailsでnil落ちの回避方法
`find`などを使用した時に、レコードが存在しない場合`NoMethodError`が発生する。
そんな時に検索結果を`nil`で返したい時に行う方法を色々。## `||=`を使う
修正前
`User`の`id`が存在しない場合`NoMethodError`が発生する。“`ruby:
@current_user = User.find(params[:id])
“`修正後
`User`の`id`が存在しない場合`@current_user`は`nil`を返す。“`ruby:
@current_user ||= User.find(params[:id])
“`##`&.`を使う(ぼっち演算子)
レシーバーが nil のとき,NoMethodErrorを投げずにnilを返してくれる機能。“`ruby:
@current_user = User&.find(params[:id])
“`メソッドやスコープにも使えるので、便利
“`ruby:user.rb
class User < Applic
rails generate が動かないときの対処
`rails g`で以下のようなエラーで動かない場合
“`
/var/share/sample/vendor/bundle/ruby/2.2.0/gems/spring-1.3.6/lib/spring/client/run.rb:98:in `gets’: Interrupt
from /var/share/sample/vendor/bundle/ruby/2.2.0/gems/spring-1.3.6/lib/spring/client/run.rb:98:in `verify_server_version’
from /var/share/sample/vendor/bundle/ruby/2.2.0/gems/spring-1.3.6/lib/spring/client/run.rb:56:in `run’
from /var/share/sample/vendor/bundle/ruby/2.2.0/gems/spring-1.3.6/lib/spring/client/run.rb:37:in `warm_run’
from /var/
deviseを用いたユーザー登録をウィザード形式にする
備忘録として書き込みます
## 環境
– ruby 2.5.1
– Rails 5.2.4.1
– devise (4.7.1)一つのアカウントで複数人の栄養管理をするという趣旨アプリを作っています。
また、アカウント登録と同時に管理ユーザーも一人登録するという想定でアプリを作っています。
そのためにウィザード形式での登録を使ったらカッコ良いんじゃないかなあと思い使ってみました。まず、deviseを使ってUserモデルを登録(アカウントに当たります)
“` rails:db/migrate
class DeviseCreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false
while文とfor文
## 複数の繰り返し処理
アプリケーション内で良く使われる繰り返し処理の種類
### while文
“`ruby
num = 0
while num < 50 do puts num num += 1 end ``` 数字を0から49まで出力するコードです 1行目で変数numを定義 2行目のwhileにてnumの値が50になるまでdo~endの動作を繰り返します 3行目で変数numの値を出力 4行目でnumに+1します 5行目はwhile文の終わりを示すendです 出力すると ```:ターミナル 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ``` とnumが50になるまで出力しています。 ### for文 ```ruby for num in 0..50 do puts num end ``` 変数numに0~50まで数を入れ
[備忘録]Railsにおけるテスト
## テストとは
記述したコードが意図した通りに動作するかを確認するもの
テストを行わないで世に出るサービスは無い
Rspecを利用する
利用する際にはGemのrspec-railsのGemをインストールすることで使用できる。
### メリット
仕様漏れを防げる
リファクタリングや機能追加がしやすくなる
### 心がけること
必然的に記述コードが増えるので開発時間が長くなるのは仕方ない、しかしそれを超えるメリットやリスクヘッジがある
同じような記述のコードが増えるがリファクタリングしすぎてしまうと何のテストかわからなくなってしまうので、テストコードはわかりやすさ重視で記述する。
### 種類
単体テストと統合テストがある
## RSpecの設定
“`:ターミナル
$ rails g rspec:install
“`
RSpecの設定ファイルを作成
下記のファイルが作成される“`:ターミナル
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
“`
共通の設定
Ruby on RailsでGoogle Books APIを叩く
## 動機
本のレビューサイト的なもの(厳密には違いますが、説明が楽なため)をポートフォリオとして作っています。本の情報を取得はAPIで行うわけですが、本のAPIにも色々あります。
[書籍検索APIは結局どれが一番いいのか](https://qiita.com/Hidekazu-Karino/items/3c2edbadbcbf1551c6cf)上の記事ではopenbdが勧められていますが、私はGoogle Books APIを使うことにしました。実装が比較的楽みたいです。(今のところ困っていません)
公式:
[Google Books API – Google Developers](https://developers.google.com/books/docs/v1/getting_started?hl=ja)で、RubyでGoogle Books APIを叩いたドキュメントを探していて、しかし見つからなかったというのが、本記事を書くに至った動機になります。
[Google Books APIとVue.jsを使ってシンプルなBook Finder appを作る](ht
[Rails] mysql2 で bundle installが失敗するときの対処法
最近手伝っていたプロジェクトでローカルPCにMySQLを入れなきゃいけないことがあったんですが、`bundle install`時にエラーが起こり解決にけっこう時間を取られたので、メモとして残しておきます。
## バージョン
– ruby 2.5.3
– Rails 5.2.3
– MySQL 5.7## エラー内容
gemfileに`gem ‘mysql2’, ‘>= 0.4.4’, ‘< 0.6.0'`と記述がある状態で`bundle install`を行ったときに下記のようなエラーが発生しました。 ``` Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load ----- ----- Setting libpath to /usr/local/opt/mysql@5.7/lib ----- creating Makefile current directory: /Users/gunji/.rbenv/versions/2.5.3
[備忘録]Ruby開発環境の作りかた
MacOSがMojave以前の場合の方法
## rbenvとruby-buildをインストール
“`:ターミナル
$ brew install rbenv ruby-build
“`## rbenvをどのディレクトリからでも使用できるようにする
“`:ターミナル
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
“`
bash_profileはMacOSのヴァージョンがCatalinaかMojave以前かで異なるので注意## bashファイルの変更を反映
“`:ターミナル
$ source ~/.bash_profile
“`## readlineをインストール
“`:ターミナル
$ brew install readline
“`realineはターミナル上で日本語入力を可能にするものです
## readlineをどこからでも使用できるようにする
“`:ターミナル
$ brew link readline –force
“`## rbenvを利用してRubyをインストール
処理に時間がかか
rubyのバージョン変更 2.5.1
今回はプログラミングスクールの際、rubyのバージョンを誤って変更してしまった際
元に戻した方法を記載い致します。通常慣れているかたはありえない事だと思いますが、私の様に何も気にせず記事投稿の内容を進めていると起こったりするかもしれません。笑
ですのでこちらの記事は初心者学習の傾けに記載致します。開発環境
ruby 2.5.1
rails 5.2.4.1
OS Sierra開発中環境変数を触ってしまい、パスが通らなくなりました。
適当に記事を参考に元に戻せるか試してみましたが、パスが通っておらずPCによってもコマンドが異なる
為、投稿記事の内容では元に戻せませんでした、ですので今回の記事もあくまで環境が同じ方向けになります。
ご注意ください。私の場合はrubyのバージョンが2.3.4だったかな? つまり現在利用いていたrubyのバージョンより古くなってしまい、一時的に開発ができなくなってしまいました。
ですが私の場合
下記のコマンドで簡単に元に戻せました。
ターミナルに下記のコマンドを1行づつ入力
—-
echo ‘eval “$(rbenv
【rails】読みやすいコードの書き方【初心者向け】
#はじめに
読みやすいコードを書くことで**コードレビューの効率が上がりますし、後々の変更もしやすくなります。**
逆に読みにくいコードは読む時間がかかりますし、バグも混入しやすくなり、原因特定に時間がかかってしまいます。
上記のような理由で、業務の効率を高めるために、可読性の高いコードを書くことは非常に重要です。#参考文献
リーダブルコード要約とリーダブルコード要約の活用方法
https://qiita.com/AKB428/items/20e81ccc8d9998b5535d脱初心者の第一歩!「これは!?」と思わせるイケてるコードの書き方【初心者向け】
https://note.com/cohki0305/n/n061d6fca4b01#読みやすいコードの書き方
###1.変数に分かりやすい名前をつける基本的に英語で命名し、ぱっと見ただけで分かりやすい名前をつけます。
“`ruby
#悪い例
str = “suzuki” #何が入っているか分からない
time = 10 #単位がないので分かりづらい
“`“`ruby
#良い例
name = “suzu
5つのプログラミング言語のまとめ
これから学ぶ5つのプログラミング言語について、概要をまとめます。
#HTML
*HTML(HyperText Markup Language)*– ウェブページを作成するために開発された言語。インターネット上で公開されてるウェブページのほとんどは、HTMLで作成されている。
– HTMLはプログラミング言語ではなくマークアップ言語と言い、意味付けしたい箇所をタグで囲んで(マークアップ)して表現するのが特徴。
#CSS
*CSS(Cascading Style Sheets)*– HTMLのレイアウトを指定するための規格。
– HTMLは文字情報だけでレイアウトの規格がないが、CSSを用いることで、要素に対して文字の大きさや色、罫線の太さ、位置などのレイアウトを指定できる。
#JavaScript
– 動的なWebページを作成する事のできるプログラミング言語。通常はブラウザ上で実行される。
– キーボードやマウス操作で画面を動かせたり、アニメーションを表示したりすることができる。#Ruby
– まつもとゆきひろ氏によって開発された言語。– プログラマーにとっ
【Rails】authenticateメソッドが返すもの
#はじめに
モデルのテストを書いているときに、authenticateメソッドの検証で少しつまづきました。
簡単な内容ですがエラーの理由・対策を記載します。#authenticateメソッド
has_secure_passwordメソッドをユーザーモデルで呼び出すだけで使えるようになるメソッド。
パスワードを引数としてユーザーの認証を行うことができる。#ユーザーモデルのテスト(RSpec)
まずは誤ったパスワードを入力した場合のテスト。
(FactoryBotではパスワードを”password”と設定)“`
(略)
context ‘正しくないパスワードの場合’ do
it ‘認証がされない’ do
expect(user.authenticate(“invalid_password”)).to eq(false)
end
end
(略)
“`
問題なく通過。次に、正しいパスワードを入力した場合のテスト。
“`
(略)
context ‘正しいパスワードの場合’ do
it ‘正常に認証される’ do
ActiveAdmin の各パーツのカスタマイズ方法がドキュメントのどこに載っているのかざっくり調べた
## はじめに
最近 [ActiveAdmin](https://activeadmin.info/index.html) について、ドキュメントを読みながらカスタマイズを試しているのですが、画面の各パーツがドキュメントでどこを指しているのかがわかりづらかったので、備忘で整理しておきます。
## ざっくり全体感を掴むには
[ActiveAdminのドキュメントのトップページ](https://activeadmin.info/index.html) にのっている説明画像をまず見るとイメージがつきやすかったです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/569f6085-0963-ec78-ab0c-d6be80632291.png)
## 各パーツについて
ActiveAdmin が用意しているデモ画面を参考にします。
http://demo.activeadmin.info/admin/users
### Global Navigation
ヘッダ
独学でエンジニアを目指してからの三ヶ月間の学習振り返り
# はじめに
初めまして YKと申します今回は振り返りで、どのように何を学習してきたかまとめます。
##学習時間についてと挫折防止のコツ
継続が不得意な方は学習を時間を図るのは個人的に勧めません。
何時間やったかが重要ではなく、どこまでやったかが大事です。また1日2時間やると決めたところで勉強しなきゃ感が出てきて挫折する確率も上がると思います。
なので1日の平均学習時間は図っていませんが4時間以下の日は無いと思います。
挫折防止のコツとしてはなりたい自分をイメージする事と勉強していると思わず趣味として知識を得ているんだと洗脳すると継続して続けられると思います:smirk:
私は早くアプリ製作したいというモチベによって苦なくプライベートの時間は殆どプログラミングしていました。
#なにを学習してきたか?(時系列順)
###11月5日~12月5日
## ・Progate 「HTML & CSS」「Javasript」 全コース
最初は王道のProgateさんにて学習を開始しました。意識した事:このころはWEBコーダーを目指していたので基本的なWEBサイトの構造をおおまかに理解
【メモ】条件分岐
if maxmin.to_i <= 14 Auter hoode-f pant shose ================================================================== maxmin.to_i <=14 1 2 3 4 5 TOP auter-f, TOP2 jaket-s inner t-long pant shose 6 8 10 12 14 TOP auter-f inner t-long pant shose 7 9 11 13 TOP auter innner Hoode-f t-long pant shose 15 16 17 18 TOP Jaket-s Jaket-m inner hoode-f t-long pant shose 19 20 21 22 24 26 TOP Jaket-s Jaket-m hoode-j inner t-long t-short pant shose 23 25 27 28 TOP ho
【備忘録】Ruby : モジュールの使い方(Mix-in,多重継承)
“`ruby:sample.rb
module ActionTarget
# モジュール
def throw
puts “#{@person}は#{@object}を投げた”
enddef kick
puts “#{@person}は#{@object}を蹴った”
end
endclass ActionPlace
# 継承元クラス
def run
puts “#{@person}は#{@place}で走った”
enddef sleep
puts “#{@person}は#{@place}で寝た”
end
endclass Person < ActionPlace # クラスを継承 include ActionTarget # モジュールのメソッドが使えるようにミックスイン attr_accessor :object,:place,:person def initialize(object,place) @object = object @place = place @person = "私" end en
Ruby の Enumerable を再実装するときに正解が見たくなったら TruffleRuby の実装を見るとわかりやすい
# `Enumerable` の再実装やってると正解が見たくなる
[仲間で集まって Ruby の `Enumerable` のメソッドを再実装する遊び](https://qiita.com/akinov/items/42292674587dd532d6ae)をよくやっているんだけど、書いたら答え合わせがしたくなる。そういうときは [CRuby の実装](https://github.com/ruby/ruby) を見るのが一番なんだけど、Cが読めないとかなり辛い。
# 例: `Enumerable#collect` の CRuby の実装(?)
“`c:enum.c
static VALUE
enum_collect(VALUE obj)
{
VALUE ary;
int min_argc, max_argc;RETURN_SIZED_ENUMERATOR(obj, 0, 0, enum_size);
ary = rb_ary_new();
min_argc = rb_block_min_max_arity(&max_argc);
Ruby の Enumerator に with_last を追加してみた
# したいこと
Rails で HTML を生成するとき、リストをループして、末尾だけちょっと違うものをレンダリングすることが良くあると思う。
“`html:ユーザのリストをレンダリング
aさんとbさんとcさんです
“`これはこんな感じに書くとおもう。
“`erb:mapしてjoin
<%= users.map {|user| "#{user.name}さん"}.join('と') %>です
“`単純なものはこれで良いけど、レンダリングするものが複雑になってくると `each` にブロック渡してレンダリングしたくなる。
“`erb:こんなふうにやりたい
<% users.each.with_last do |user, last| %>
<複雑なマークアップ>
<%= user.name %>さん<%= last ? 'です' : 'と'%>
複雑なマークアップ>
<% end %>
“`こんな感じでやりたい。
# 実装
`with_index` と同じアイデアなので、 `with_index` の定義されてる [Enumera