ためすう

Rails5 で Bootstrap4 をインストールする

2019-04-25

やったこと

Rails5 で Bootstrap4 を設定する方法を調べました。

確認環境

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

gem のインストール

どのバージョンか忘れましたが、今回より古いバージョンの時はインストールが必要だった気がしたのですが、元から入っているようです。

bootstrap-sass がインストールされていればOKです。

Gemfile.lock

     bootstrap-sass (3.3.7)
       autoprefixer-rails (>= 5.2.1)
       sass (>= 3.3.4)

ここでちょっと注意です。 4系に対応するには、違うgemを使います。

gem 対応バージョン
bootstrap-sass 2 or 3系
bootstrap 4系

このままではあまり面白くないので、4系を入れてみます。 インストール手順は github の通りですが、とにかくやってみます。

Gemfile

gem 'bootstrap', '~> 4.3.1'
$ bundle install

端折りますが、下記を参考にしてください。

ruby のバージョンを上げてから、bundle install でコケた時にやること – ためすう

ファイルの編集

ファイルの拡張子を scss にします

$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss
app/assets/stylesheets/application.scss

上記ファイルを編集して、bootstrap を読み込みます

@import "bootstrap";

Boostrap4 の機能を使ってみる

表示したい view ファイル

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="radio" name="options" id="option1" checked=""> Radio 1 (preselected)
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option2"> Radio 2
  </label>
</div>

※ もし反映されない時はサーバーを再起動などしてみてください(もちろん開発環境で)

最後に

もし、bootstrap-sass を使わないなら、削除しておいても良いかもしれませんね。

参考

Bootstrap 4 Cheat Sheet by Creative Tim and BootstrapBay

これ見ながらやると捗ります。

ruby のバージョンを上げてから、bundle install でコケた時にやること

2019-04-25

やったこと

Rails5 で利用する Ruby のバージョンをあげた後、bundle install がコケた時のメモです。

確認環境

作業前

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

$ rails --version
Rails 5.2.3

作業後

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

実施

Ruby のバージョンを 2.2.7 -> 2.5.0 にした後、

bundler のインストール

$ bundle update
エラー抜粋
rbenv: bundle: command not found

The `bundle' command exists in these Ruby versions:
  2.1.5
  2.2.2
  2.2.7

bundle コマンドが rbenv の 2.5.0 で利用できない状態だからです。

ということで、bundler を入れます。

$ gem install bundler
Fetching: bundler-2.0.1.gem (100%)
Successfully installed bundler-2.0.1
Parsing documentation for bundler-2.0.1
Installing ri documentation for bundler-2.0.1
Done installing documentation for bundler after 3 seconds
1 gem installed

bundler でコケる

$ bundle install
Traceback (most recent call last):
	2: from /Users/xxxx/.rbenv/versions/2.5.0/bin/bundle:23:in `<main>'
	1: from /Users/xxxx/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path'
/Users/xxxx/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
$ gem install bundler -v 1.16.1

これを実行して、もう1回 bundle install します。

nokogiri でコケる

$ bundle install

エラー抜粋

An error occurred while installing nokogiri (1.9.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.9.1'` succeeds before bundling.

...


pkg-config could not be used to find libxml-2.0
Please install either `pkg-config` or the pkg-config gem per

    gem install pkg-config -v "~> 1.1"

この gem を取り込めば OK そうです。

インストール後、bundle install は無事に終わりました。(やっていることの割に険しかった)

参考

Rails5 で利用する Ruby のバージョンを上げる

2019-04-24

やったこと

Rails5 で利用する Ruby のバージョンをあげました。

確認環境

作業前

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

$ rails --version
Rails 5.2.3

作業後

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

実施

新しいバージョンの Ruby をインストール

ある gem を利用しようとしたら ruby のバージョンを上げろと言われたので

仕方なく上げることにしました。

今回は 2.5.0 に切り替えます。

利用するバージョンの切り替え

$ rbenv global 2.5.0

Railsプロジェクトの .ruby-version 更新

.ruby-version

2.5.0

数分嵌りました…

このファイルは rbenv が ruby のバージョン決めるときにみるやつです。

Gemfileを更新して、bundle install

Gemfile

ruby '2.5.0'

bundle 実行

$ bundle install

エラーがいっぱい出る可能性がありますが(Ruby のバージョンがこの記事と同じなら発生するかもです)

Google力でなんとか乗り切ってください。

2019/04/25 修正

発生したエラーの解決は別記事に切り出して、投稿後リンク貼ります…

下記に発生したエラーを解決した時の記事のリンクを貼ります。

ruby のバージョンを上げてから、bundle install でコケた時にやること – ためすう

Rails5 で ルーティングを設定する (基本編)

2019-04-24

やったこと

Rails5 でルーティングを設定する方法を調べました。 今回の対象は基本だけに絞ります。

確認環境

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

$ rails --version
Rails 5.2.3

調査

現在設定されているルーティングは下記で確認できます。

$ rails routes

resources ルーティングを自動生成する

config.ru

resources :tasks

root を指定する

config.ru

root 'tasks#index'

/ にアクセスすると、tasksコントローラーのindexアクションが呼び出されます。

所感

ルーティングの resources なんかは、 rails の「設定より規約」を感じられるかもしれません。

  • url が自動生成される
  • url を解析して実行するアクションを決定する (基本ルールに則った形)

ドキュメントを見ると、色々な設定方法があり、痒い所に手が届きそうな気がします。

規約通り実装できるものに関しては、かなりシンプルにかけそうです。

参考

Ruby と Ruby on Rails で確認する環境

2019-04-23

やったこと

Ruby と Rails のとあるAPIの動作を試すときに使う環境を調べました。

調査

irb (ruby のみ)

$ irb
irb(main):001:0> puts 'hello'
hello
=> nil

ちなみに irb は Interactive Ruby の略のようです。 どのディレクトリからも実行できて、ファイルも保存せずに試せます。

rails console

内部的に irb を使っているようです。(コードリーディングまでは出来てない)

$ rails c

実行例が下記です。

Railsチュートリアルで作成したサンプルアプリにて、コンソールを立ち上げました。 Userクラスが読み出せているのが分かると思います。 (Userクラスは Rails のモデルです)

Running via Spring preloader in process 58267
Loading development environment (Rails 5.1.6.2)
...
irb(main):002:0> User.first
  User Load (1.0ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 1, name: "Example User", email: "example@railstutorial.org", created_at: "2019-03-29 03:48:50", updated_at: "2019-03-29 03:48:50", password_digest: "$2a$10$8CzQ9IXLNgrO4dT5cRKU1O41PJ3zJ.Wl41Vh/N/KWLl...", remember_digest: nil, admin: true, activation_digest: "$2a$10$GHz5AmbuxCBR0J0VrhOGMOuDPvWf4piIUV6y7AX8JTF...", activated: true, activated_at: "2019-03-29 03:48:50", reset_digest: nil, reset_sent_at: nil>

xxx.rb でターミナルで実行する (ruby のみ)

test.rb

puts 'test now'

$ ruby test.rb

出力結果

test now

vim 開いたまま実行する (ruby のみ)

vim で quickrun を導入します

~/.vimrc に下記を追加

NeoBundle 'thinca/vim-quickrun'

さらに :NeoBundleInstall

test.rb

puts 'test now1'
puts 'test now2'
puts 'あああ'

:QuickRun

すれば、vim のペインが開き下記が出力されました。

test now1
test now2
あああ

さらに選択した行だけでも実行できました。

参考

Ruby と Ruby on Rails のドキュメント

2019-04-23

やったこと

Ruby と Rails に触れる機会が増えたので、参考にするドキュメントを調査します。

調査

Ruby

github の README.md に記載があったリファレンスです。

Ruby on Rails

github の README.md に記載があったリファレンスです。

Rails Guide からこちらのリンクが貼られています。

↓ こちらは日本語に翻訳されているサイトもあります。

Ruby on Rails のソースコードを読む

2019-04-22

やったこと

Ruby on Rails のソースコードを読む方法を調べました。

確認環境

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

調査

選択肢1

github から Ruby on Rails の ソースコードを落とす

GitHub - rails/rails: Ruby on Rails

この方法の難点は、(あまりないかもしれませんが)Rails の本体をいじって動作を確かめるということが出来なさそうなところです。

選択肢2

rails が install されているファイルから読む

ローカルで実行しているということは、Rails のソースコードもローカルのどこかにあると思われるので、インストールされているファイルから読みます。

今回は、こちらでやってみます。

インストールされているrailsを読む (選択肢2)

gem のインストール先確認

$ gem environment

出力 (一部抜粋)

INSTALLATION DIRECTORY: /Users/xxxxx/.rbenv/versions/2.2.7/lib/ruby/gems/2.2.0

上記のディレクトリからrailsを探したのですが、README.mdしかありませんでした。

/Users/xxxxx/.rbenv/versions/2.2.7/lib/ruby/gems/2.2.0/gems/rails-5.2.2/

どうやら Rails は個別の gem が集合して出来ているようです。

gem のインストール先に下記のディレクトリが存在していました。

rails のソースコードにあるディレクトリ

actioncable
actionmailbox
actionmailer
actionpack
actiontext
actionview
activejob
activemodel
activerecord
activestorage
activesupport
... (続く)

本来ならソースコードを変更して確かめたいところですが、どの gem がどういう役割なのか分かっていないので今日はこの辺で終わります。

Ruby の配列で、先頭、最後の要素を取得する

2019-04-22

やったこと

Ruby の配列で先頭、最後の要素を取得する方法を調べました。

確認環境

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

調査

irb を起動します。

$ irb
irb(main):002:0> a = ["a", "b", "c", "d"]
=> ["a", "b", "c", "d"]
irb(main):003:0> a.first
=> "a"
irb(main):004:0> a.last
=> "d"
irb(main):005:0> a
=> ["a", "b", "c", "d"]

この確認から分かることは、first last で呼び出した後も、元の配列は変更されないということです。

元の配列も変更したいときは、shift pop を使います。

irb(main):007:0> a.pop
=> "d"
irb(main):008:0> a
=> ["a", "b", "c"]
irb(main):009:0> a.shift
=> "a"
irb(main):010:0> a
=> ["b", "c"]

参考

Ruby の定数、変数について

2019-04-16

やったこと

Ruby での定数、変数について調べました。

下記について調べます。

  • 定数
  • ローカル変数
  • グローバル変数
  • インスタンス変数
  • クラス変数

確認環境

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

定数

定数名は大文字アルファベットで始まる必要があります。

ABC = 'abc'

ローカル変数

ローカル変数名は「ruby」や「ruby」のように先頭が小文字アルファベットかアンダースコア()で始まる必要があります。

ruby = 'ruby_string'
_ruby = 'ruby_string'

グローバル変数

グローバル変数名は$から始まる必要があります。

$abc = 'abc'

インスタンス変数

インスタンスの中でだけ参照できる変数をインスタンス変数と言います。

「クラスインスタンス変数」というものもあるようですが、今回は割愛します。

class My
    def initialize()
        @length = 0
    end

    def length
        @length += 1
    end
end

p @length

c = My.new
p c.length
p c.length

c2 = My.new
p c2.length

実行結果

$ ruby test.rb
nil
1
2
1

attr_accessor を利用すると、インスタンス変数のセッター、ゲッターが定義されるようです。(今回は試しません)

クラス変数

@2つからはじまる名前で記述します。

class My2
    @@length = 0

    def printLen
        @@length += 1
    end
end

my2 =  My2.new
p my2.printLen
p my2.printLen

my2_2 =  My2.new
p my2_2.printLen

実行結果

$ ruby test.rb
1
2
3

参考

Ruby でデバッグするときに使うメソッド (p、puts、print)

2019-04-15

やったこと

Ruby でデバッグするときのメソッドを調べました

下記のメソッドを試しました。

  • p
  • puts
  • print

確認環境

$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]

調査

test.rb

a = {key: 1, name: 'abc'}
b = [1, 2, 3]

puts 'p で出力'
p a
print "\n"
p b

print "---\n"

puts 'puts で出力'
puts a
print "\n"
puts b

print "---\n"

puts 'print で出力'
print a
print "\n"
print "\n"
print b
print "\n"

実行結果

$ ruby test.rb
p で出力
{:key=>1, :name=>"abc"}

[1, 2, 3]
---
puts で出力
{:key=>1, :name=>"abc"}

1
2
3
---
print で出力
{:key=>1, :name=>"abc"}

[1, 2, 3]

参考

【ruby】p pp puts print 違い。 - Qiita