- 投稿日:2021-01-25T23:26:23+09:00
rails newするときのoptionなにしたらええんやっけ?となったとき
$ bundle exec rails help Usage: rails new APP_PATH [options] Options: [--skip-namespace], [--no-skip-namespace] # Skip namespace (affects only isolated applications) -r, [--ruby=PATH] # Path to the Ruby binary of your choice # Default: /Users/shoutaro/.rbenv/versions/2.7.2/bin/ruby -m, [--template=TEMPLATE] # Path to some application template (can be a filesystem path or URL) -d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/frontbase/ibm_db/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc) # Default: sqlite3 [--skip-gemfile], [--no-skip-gemfile] # Don't create a Gemfile -G, [--skip-git], [--no-skip-git] # Skip .gitignore file [--skip-keeps], [--no-skip-keeps] # Skip source control .keep files -M, [--skip-action-mailer], [--no-skip-action-mailer] # Skip Action Mailer files [--skip-action-mailbox], [--no-skip-action-mailbox] # Skip Action Mailbox gem [--skip-action-text], [--no-skip-action-text] # Skip Action Text gem -O, [--skip-active-record], [--no-skip-active-record] # Skip Active Record files [--skip-active-storage], [--no-skip-active-storage] # Skip Active Storage files -P, [--skip-puma], [--no-skip-puma] # Skip Puma related files -C, [--skip-action-cable], [--no-skip-action-cable] # Skip Action Cable files -S, [--skip-sprockets], [--no-skip-sprockets] # Skip Sprockets files [--skip-spring], [--no-skip-spring] # Don't install Spring application preloader [--skip-listen], [--no-skip-listen] # Don't generate configuration that depends on the listen gem -J, [--skip-javascript], [--no-skip-javascript] # Skip JavaScript files [--skip-turbolinks], [--no-skip-turbolinks] # Skip turbolinks gem -T, [--skip-test], [--no-skip-test] # Skip test files [--skip-system-test], [--no-skip-system-test] # Skip system test files [--skip-bootsnap], [--no-skip-bootsnap] # Skip bootsnap gem [--dev], [--no-dev] # Setup the application with Gemfile pointing to your Rails checkout [--edge], [--no-edge] # Setup the application with Gemfile pointing to Rails repository [--rc=RC] # Path to file containing extra configuration options for rails command [--no-rc], [--no-no-rc] # Skip loading of extra configuration options from .railsrc file [--api], [--no-api] # Preconfigure smaller stack for API only apps -B, [--skip-bundle], [--no-skip-bundle] # Don't run bundle install --webpacker, [--webpack=WEBPACK] # Preconfigure Webpack with a particular framework (options: react, vue, angular, elm, stimulus) [--skip-webpack-install], [--no-skip-webpack-install] # Don't run Webpack installhelpを見ましょう
$ bundle exec rails new . -B -d mysql --skip-turbolinks --skip-test --no-skip-webpack-install -Jこんな感じでつくりました。
- 投稿日:2021-01-25T22:58:18+09:00
railsのバリデーション
バリデーションとは
正当性を実証(確認)すること。
例えば、新規登録フォームでユーザー名が入力されていなかったら登録できない、
メールアドレスが正規の型でない等を検知する。新規登録時に名前、メールアドレスが入力されているか検証する
app/models/user.rbファイルに記入する。
validatesメソッドに presence:trueという引数を与えて使うことで検証できます。app/models/user.rbclass User < ApplicationRecord validates :name, presence: true validates :email, presence: true end長さを検証する
上記のコードにlenghtを追加します。
今回は名前を50文字、メールアドレスを255文字を制限とします。app/models/user.rbclass User < ApplicationRecord validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, length: { maximum: 255 } endフォーマットを検証する
メールアドレスにおなじみのパターンuser@example.comに合っているかを検証します。
無効なメールアドレスにはマッチしない正規表現を組み立てる必要があります。
正規表現とは、一定の規則に従って特定の文字列(群)を集合の要素として表す表記法。
コンピューターで,テキスト処理に使われる。
正規表現がこちら。
/\A[\w+-.]+@[a-z\d-.]+.[a-z]+\z/i暗号みたいでわかりずらいので表を置いときます。
正規表現 意味 /\A[\w+-.]+@[a-z\d-.]+.[a-z]+\z/i (完全な正規表現) / 正規表現の開始を示す \A 文字列の先頭 [\w+-.]+ 英数字、アンダースコア(_)、プラス(+)、ハイフン(-)、ドット(.)のいずれかを少なくとも1文字以上繰り返す @ アットマーク [a-z\d-.]+ 英小文字、数字、ハイフン、ドットのいずれかを少なくとも1文字以上繰り返す . ドット [a-z]+ 英小文字を少なくとも1文字以上繰り返す \z 文字列の末尾 / 正規表現の終わりを示す i 大文字小文字を無視するオプション app/models/user.rbclass User < ApplicationRecord validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX } end一意性を強制
メールアドレスの一意性を強制するために、validatesメソッドの:uniquenessオプションを使います。
uniquenessは登録されているメールアドレスは登録できないことを検証します。pp/models/user.rbclass User < ApplicationRecord validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }, uniqueness:true endemail属性を小文字に変換してメールアドレスの一意性を保証
emailを小文字に変換はemail.downcaseを使います。
今回の場合は、オブジェクトが保存される時点で処理を実行したいので、before_saveというコールバックを使います。
ユーザーがデータベースに保存する前にemail属性を強制的に小文字に変換しますapp/models/user.rbclass User < ApplicationRecord before_save { self.email = email.downcase } validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }, uniqueness: true end
- 投稿日:2021-01-25T21:30:19+09:00
アプリケーションの作成〜立ち上げ
アプリケーション作成の流れ
①アプリケーションを保存するためのディレクトリを作成
②新規のrailsアプリケーションを作成
③データベースを作成
④アプリのケーションの立ち上げ①アプリケーションを保存するためのディレクトリを作成
ホームディレクトリから新規フォルダで適当な名前のディレクトリを作成する
②新規のrailsアプリケーションを作成
cd ①のディレクトリ #①のディレクトリに移動する rails railsのバージョン new Career_up -d mysql #railsのバージョンを指定して、Career_upを作成 cd Career_up #Career_upのディレクトリに移動する pwd #現在のディレクトリに移動③データベースを作成
rails db:create #データベースを作成する④アプリのケーションの立ち上げ
cd Career_up #Career_upのディレクトリに移動する rails s #Career_upのディレクトリ上記のコマンドを打つ以上です
- 投稿日:2021-01-25T20:49:24+09:00
Model.human_attribute_name(:カラム名)について(Rails)
経緯
普段viewでよく見かけるタイトルについて自分の学習用のメモ的な感じです。
Model.human_attribute_name(:カラム名)とは?
ActiveRecord::Base のクラスメソッドで内部的にI18nモジュールを
利用してくれるというものです
参照先は config/locales/ja.ymlです。ja.yml--- ja: activerecord: errors: messages: record_invalid: 'バリデーションに失敗しました: %{errors}' restrict_dependent_destroy: has_one: "%{record}が存在しているので削除できません" has_many: "%{record}が存在しているので削除できません" models: task: タスク attributes: task: id: ID name: 名称 description: 詳しい説明 created_at: 登録日時 updated_at: 更新日時 user: name: 名前 email: メールアドレス admin: 管理者権限 password: パスワード password_confirmation: パスワード(確認) created_at: 登録日時 updated_at: 更新日時viewではこんな感じで使います。
th= Task.human_attribute_name(:name)この場合ですと「名称」ですね!
最後に
ymlの書き方は特徴があって毎回躓きます。。
- 投稿日:2021-01-25T19:23:45+09:00
Rails で 特定のページに別のレイアウト(デザイン)を指定する方法
始めに
ウェブアプリをつくっていると、それぞれのページでレイアウト(デザイン)を変更したいことがあります。
例えば、下層ページのデザインは共通で良いが、トップページだけは別のデザインにしたいといった場合です。環境
% rails -v Rails 6.1.1 % ruby -v ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin20]実装
Slimを使って効率的にhtmlを記述できるにします。
また、Sassを使って効率的にスタイルシートを書けるようにします。
そのために、Gemfileに以下を追記します。# Gemfile gem 'slim-rails' gem 'sass-rails'下層ページ全体
下層ページ全体で共通して使う スタイルシート application.scss は次のように書きます。
// app/assets/stylesheets/application.scss @import 'header'; // ヘッダー用のscssを取り込みます。 @import 'footer';// app/assets/stylesheets/_header.scss // ヘッダー用のSCSSをいろいろ書きます。 header { background: yellow; color: red; }ここで書いた スタイルシート application.scss は、下層ページ全体で使いたいので、
下層ページ全体で共通して使うレイアウトファイル application.html.slim に次のように書いて読み込みます。/ app/views/layouts/application.html.slim doctype html html head meta charset="utf-8" / sprocket管理下のcssを読み込む / <link rel="stylesheet" href="app/assets/stylesheets/application.css"> / と書くのと(だいたい)同じ意味です。 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' body / ヘッダーの内容は、下層ページ全体で共通なので、 / app/views/layouts/_header.html.slim に 記しておき、表示させます。 = render 'layouts/header' / 各ページ(index.html.slimやedit.html.slimなど)の内容がここに挿入される = yield / フッター = render 'layouts/footer' / 開発中のデバッグ情報を表示 - if Rails.env.development? = debug(params)/ app/views/layouts/_header.html.slim header ヘッダー一般的なウェブサイトでは、index.html を 次のような感じで書くかと思います。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> </head> <body> <header>ヘッダー</header> 内容いろいろ <footer>フッター</footer> </body> </html>上のレイアウトファイルと良く似ていることが分かるかと思います。
トップページ
トップページだけ、別のデザインにしたいときには、二つの方法があります。
1) トップページのコントローラ名と同じ名前のレイアウトファイルを用意する。
class TopController < ApplicationController def index end end// app/assets/stylesheets/top.scss // (略)/ app/views/layouts/top.html.slim doctype html html head meta charset="utf-8" / トップページ専用のscssを読み込みます。 = stylesheet_link_tag 'top', media: 'all', 'data-turbolinks-track': 'reload' body / トップページ専用のデザインになるよう、slim(html)でいろいろ書きます。 = yeild2) layout メソッドで、適用するレイアウトファイル名を指定する
Welcome コントローラ だけれども、
使用するレイアウトファイル名は、top.html.slimを使いたいときには、
layout メソッドを使って、使用するレイアウトファイル名を指定します。class WelcomeController < ApplicationController layout 'top' def index end end
layout 'top'
と書かなければ、
1. welcome.html.slim があればそれを、
2. なければ、application.html.slim のレイアウト(デザイン)になります。参考
Rails を学ぶために、いろいろな書籍がありますが、次の順番で学んでいくと理解しやすいかと思います。
【初心者向け】
0. RubyとRailsの学習ガイド
1. Railsの教科書【中級者向け】
2. 現場で使えるRuby on Rails 速習実践ガイド
3. Ruby on Rails チュートリアル【上級者向け】
4. Ruby on Rails 実践ガイドまた、Ruby on Rails ガイドも、Railsの個々の機能に関して詳しく説明が為されておりお薦めです。
皆様のご参考になれば幸いです。
- 投稿日:2021-01-25T18:06:09+09:00
Ruby on Railsでアプリを作ってみよう⑤
モデルとデータベースの役割
入力した情報などを保存しておくことができなければ
アプリケーションとして成り立ちません。今回は情報を保存するためのデータベースとモデルについて学習していきましょう。
テーブル
データベース内に作成される表形式でデータを収納する仕組みです。
全ての情報がごちゃ混ぜに保存されていると管理ができませんので
情報の種類ごとにテーブルを作成し管理します。レコードとカラム
表形式のテーブルに置いて行はレコード列はカラムといいます。
モデル
MVCの役割の一つで
データベースにどんな情報を保存するか、またどんな情報を取得してくるかを管理する役割を
持つのがモデルです。テーブルごと対応するモデルで管理されています。
図3
それではモデルを作成していきましょう
rails g model コマンド
rails g model モデル名(単数形)コントローラーは複数形で名前を付けましたがモデルは単数形で名前をつけましょう。命名規則です。
postモデルを作ってみましょう。
rails g model postそれではテーブルにどんなカラムを設定するかなど仕様を決めていきましょう。
マイグレーション
テーブルの仕様書です。このファイルの中にどのようなテーブルにするか書き込み反映します。
マイグレーションファイルはモデル作成と同時に自動で作られます。開いてみましょう。class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| #ここに設定したいカラム名や種類などをかく t.timestamps end end endマイグレーションファイルにはカラム名とカラムの型という物を記述します。
カラムの型は書き方が決まっていて複数の種類があります。用途によって使い分けます。
カラムの型 説明 用途 integer 数値 金額、回数など string 文字(短文) ユーザー名、メールアドレスなど text 文字(長文) 投稿文、説明文など boolean 真か偽か はい・いいえの選択、成功・失敗のフラグなど datetime 日付と時刻 作成日時、更新日時など テキスト型のcommentカラムを作ってみましょう
class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.text :comment t.timestamps end end endt.の後ろに記述されているのがカラムの型、その右側にシンボルで記述されているのがカラム名になります。
ここで作成したのはtext型のcommentカラムになります。マイグレーションファイルに記述しただけだとまだデータベースに反映されないので
マイグレーションを下記のコマンドで実行することが必要です。rails db:migrateこれでpostsテーブルに反映されました。
マイグレーションを変更したい時
一度マイグレーションを実行するとマイグレーションファイルの中身を書き換えただけでは
変更が反映されませんロールバックしてから記述を修正し再度マイグレーションを実行しましょう。rails db:rollbackrails db:migrate:statusコマンド
マイグレーションが実行済みであるかを確認するコマンド
Statusの部分にはマイグレーションが実行されているかいないかが示されています。
upなら実行中、downなら実行されていませんロールバックがうまく実行されていればdownになっています。
![]()
Sequel Pro
データベースを可視化できるツールです。
テーブル情報やカラム名などの情報を確認することができます。以上です。
- 投稿日:2021-01-25T17:15:17+09:00
Docker開発環境
はじめに
現在開発中のアプリにDockerを導入したのでアウトプットします。
環境
Ruby on Rails '6.0.0'
Ruby '2.6.5'
MySQL '5.6.47'Dockerfile
開発中アプリのルートディレクトリにDockerfileを作成します。
DockerfileFROM ruby:2.6.5 RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs RUN mkdir /アプリ名 WORKDIR /アプリ名 ADD ./Gemfile /アプリ名/Gemfile ADD ./Gemfile.lock /live_search/Gemfile.lock RUN gem install bundler RUN bundle install ADD . /アプリ名docker-compose.yml
docker-compose.ymlversion: '3' services: db: image: mysql:5.6.47 environment: MYSQL_ROOT_PASSWORD: 'password' ports: - "4306:3306" volumes: - ./db/mysql-data:/var/lib/mysql web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/アプリ名 ports: - "3000:3000" depends_on: - dbentrypoint.sh
entrypoint.shset -e rm -f /myapp/tmp/pids/server.pid exec "$@"database.yml
database.ymldefault: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password host: db socket: /tmp/mysql.sockpassword: password
host: db
を追加コンテナを作成
ターミナル% docker-compose buildDB作成、migrationの実行
ターミナル% docker-compose run web bundle exec rake db:create % docker-compose run web bundle exec rake db:migrateコンテナを起動
ターミナル% docker-compose up
- 投稿日:2021-01-25T14:03:37+09:00
【Ruby on Rails Tutorial】6章のテストでエラー
【Ruby on Rails Tutorial】6章のテストでエラー
Ruby on Rails Tutorial 6章の「リスト 6.10」を実行。
すると、あるエラーが発生した。
その後はいつも通りライアーゲームのBGMが脳内で流れると共に膝から崩れ落ちて就寝。
次の日の朝「直すか……」目次
どういうエラー?
以下のようなエラーが発生。
ターミナルPS C:\Users\(ユーザー名)\Desktop\Web\Ruby\rails_tutorial\sample_app2> rails test:models ansi: 'gem install win32console' to use color on Windows LoadError: UNIXServer is required per.rb:9:in `<class:TestCase>' C:/Users/(ユーザー名)/Desktop/Web/Ruby/rails_tutorial/sample_app2/test/test_helper.rb:7:in `<top (required)>' C:/Users/(ユーザー名)/Desktop/Web/Ruby/rails_tutorial/sample_app2/test/models/user_test.rb:1:in `<top (required)>' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => test:models (See full trace by running task with --trace)エラー文を読み解いてみる→それで頑張ってググるなどした。しかし、そのように出てきた情報で解決したわけではない。
なんか前にも似たようなことがあった気がすると考え、それをやってみたら直った。それを記す。解決法は?
まず悪さをしていたのは以下の「これを直すんや」の部分である。
ちなみに正確に言うと悪いのはこいつではない。
テストコードのテストを1つずつやってみたら、すんなりと成功(GREEN)するのだ。
つまり、悪さをしているのは並行処理を行うことでエラーが起きるRailsの方である。system>test_helper.rbENV['RAILS_ENV'] ||= 'test' require_relative "../config/environment" require "rails/test_help" class ActiveSupport::TestCase # Run tests in parallel with specified workers parallelize(workers: :number_of_processors, with: :threads) # ←これを直すんや # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. fixtures :all # Add more helper methods to be used by all tests here... endsystem>test_helper.rbparallelize(workers: 1) # ←こうするんやすると
PS C:\Users\(ユーザー名)\Desktop\Web\Ruby\rails_tutorial\sample_app2> rails test:models Started with run options --seed 34075 /0: [=---=---=---=---=---=---=---=---=---=-] 0% Time: 00:00:00, ETA: 2/0: [ ] 0% Time: 00:00:00, ETA: 2/1: [================== ] 50% Time: 00:00:00, ETA: 2/2: [===================================] 100% Time: 00:00:00, Time: 00:00:00 Finished in 0.23506s 2 tests, 2 assertions, 0 failures, 0 errors, 0 skipsテスト成功。
参考文献
- 投稿日:2021-01-25T10:55:35+09:00
No template for interactive request IdeasController#index is missing a template for request formats: text/htmlというエラーが出た
rails s を行ったら以下のエラーが出た
No template for interactive request IdeasController#index is missing a template for request formats: text/html NOTE! Unless told otherwise, Rails expects an action to render a template with the same name, contained in a folder named after its controller. If this controller is an API responding with 204 (No Content), which does not require a template, then this error will occur when trying to access it via browser, since we expect an HTML template to be rendered for such requests. If that's the case, carry on.調べるとどうやらIdeasコントローラーに対応するビューがないという意味のようだ。
view以下のideasディレクトリの名前がいつの間にか(いじっていたみたい、、)変わっていたのでideasに変更したら解決した。
- 投稿日:2021-01-25T10:42:05+09:00
Rails RSpecテストを導入しよう!
経緯
Railsチュートリアルなどではminitestが使われているが
実際の現場ではRSpecを用いたテストを行っているため
今回はRailsにRSpecを導入するまでの手順を乗せていこうと思います。利用するテスト用ライブラリ
1 RSpec
2 Capybara
3 FactoryBotRSpecのインストールと初期準備
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'rspec-rails', '~>3.7' end次に以下のgenereteコマンドを実行します。
bundle bin/rails g rspec:install =>Running via Spring preloader in process 4359 create .rspec create spec create spec/spec_helper.rb create spec/rails_helper.rb最後にminitest用のtestディレクトリを削除します。
rm -r ./testCapybaraの初期準備
spec/spec.helper.rbを以下のように編集します。
spec.helper.rbrequire 'capybara/rspec' RSpec.configure do |config| config.before(:each, type: :system) do driven_by :selenium_chrome_headless endFactoryBotのインストール
テストデータを作成支援してくれるFactoryBotを導入します。
Gemfileに以下のように追記します。group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'factory_bot_rails', '~> 4.11' end導入に向けての手順は以上となります。
最後に
ここまで見てくれてありがとうございました!
具体的な書き方については別の機会で解説していこうかなと思います!
- 投稿日:2021-01-25T02:00:40+09:00
【Docker + CircleCI + Rails】Missing secret_key_base エラー
環境
Ruby 2.7.1
Rails 6.0.3.4CircleCIを使ってECSへデプロイ時に以下のようなエラーが発生
rake aborted! ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`結論
Railsのmaster.keyをCircleCIの環境変数に設定しconfig.ymlとDockerfileに設定した環境変数を渡す事で解決しました。
Step1
CircleCI環境変数設定
nameをRAILS_MASTER_KEY
とし、
valueにmaster.key
の値を入力Step2
Dockerfileに追記
Dockerfile# 追記 ARG RAILS_MASTER_KEY ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}Step3
CircleCIの設定
.circleci/config.yml- aws-ecr/build-and-push-image: # 追記 extra-build-args: '--build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY}'extra-build-argsで設定する事でCircleCI内で設定した環境変数をRails側でENVとして受け取る事が出来るとのことです。
参考にさせていただいた記事
- 投稿日:2021-01-25T01:21:56+09:00
【M1チップ】Homebrew経由でのRubyインストールに苦戦した
概要
プログラミング勉強真っ只中の私ですが、先日M1チップ搭載のMacbook Proを購入しました。
そこでRuby on Railsの環境構築をしようとしたところ苦戦しましたが、初心者の私でもなんとか出来たのでやったことを残しておきます。
(最初はHomebrewって何?美味しいの?ってレベルでした)参考にさせていただいた記事
https://qiita.com/aiorange19/items/5ffaefc85f912f60c2fa動作環境
・Macbook Pro (13-inch, M1, 2020)
・macOS Big Sur (ver11.0.1)Xcodeをインストールして無い人は予めインストールしておくと幸せになれるかもしれません。
(App StoreからDL出来ます)
容量約12GBなのでめっちゃ時間かかった。Homebrewのインストール
Homebrewをインストールします。
https://brew.sh/index_ja公式ドキュメントにも記載があるように、M1チップのMacでは「/opt/homebrew」にインストールすることが推奨されているので、そうしましょう。
自分の場合は何も考えずに公式サイトのコードをコピペして自動的に「/opt/homebrew」にインストールされましたが...。(訳)
ただし、macOSIntelでは/ usr / local、macOSARMでは/ opt / homebrew、Linuxでは/home/linuxbrew/.linuxbrewにインストールしてください。予めディレクトリを作っておいて、インストール先を指定した方が良いかもしれません。
% cd /opt /opt % sudo mkdir homebrew /opt % curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrewbrewコマンドが打てない
しかし、このままだとbrewコマンドが打てなかった
% brew -v zsh: command not found: brewで、ここで最初の壁にぶち当たりましたが、どうやらPATHというものを通さなければならないらしい。
PATHを通すためには「.zshrc」
というファイルにその旨のコードを記述する必要があるっぽいんですけど...% ls -a . Documents Music Public Downloads .. Dropbox .DS_Store Movies Pictures Library Desktop .adobe .zsh_history .cups .zsh_sessions .dropbox .Trash Creative Cloud Files .localそのファイルが無い\(^o^)/
無くて焦りましたが、なかったら作れば良いということで作りました。
作成したら、PATHを通すコードを記述します。% touch .zshrc % open ~/.zshrc # .zshrcに下記を記述 export PATH=/opt/homebrew/bin:$PATH # またはコマンドラインで下記を実行 % echo 'export PATH=/opt/homebrew/bin:$PATH' >> .zshrc # .zshrcが編集できたら設定を反映させるために下記を実行 % source .zshrcbrewコマンドが使えるか確認してみる。
% brew -v Homebrew 2.7.5 # Homebrewのバージョンが表示されればOK無事PATHを通せました。
rbenvでRubyのインストール
Homebrewがインストール出来たら、Rubyのバージョン管理ができるようにrbenvをインストールします。
% brew install rbenvこれも先ほどと同じようにPATHを通す必要があるので、
.zshrc
に追記します。% open ~/.zshrc # 下記を記述 export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" # またはコマンドラインで下記を実行 % echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .zshrc % echo 'eval "$(rbenv init -)"' >> .zshrc # 設定を反映 % source .zshrcこれでRubyインストールの準備完了です。
Rubyのインストール
# 公開されている(DL可能な)Rubyのバージョン一覧を確認 % rbenv install -l 2.5.8 2.6.6 2.7.2 3.0.0 jruby-9.2.14.0 mruby-2.1.2 rbx-5.0 truffleruby-21.0.0 truffleruby+graalvm-21.0.02020年12月25日に
Ruby 3.0.0
が公開されましたが、ここでは2.7.2
をインストールしました。
Ruby 3.0.0はなんか動作が早くなったとか...。
もうちょっと勉強したらアップデートしようと思います。ということでRubyをインストール
% rbenv install 2.7.2、、、しようとしましたがなぜか上手くいかない。
いろいろ調べると、
openssl
関連で上手くいっていないようでした。
とりあえずインストールを試みましたが...% brew install openssl Error: /opt/homebrew/opt/openssl@1.1 is not a valid kegなんやこれ...
このエラー解消に結構時間がかかってしまいました。結果、
/opt/homebrew/Cellar
に作られてたopenssl@1.1
というフォルダが空だったので、一度削除したらインストール出来ました。
インストール出来ましたが、また
.zshrc
を編集してPATHを通します。% which openssl /usr/bin/opensl # homebrewへPATHを通しましょう # .zshrcに下記を追記 export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH" export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib" export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include" export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig" export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/homebrew/opt/openssl@1.1" # 設定を反映 % source .zshrc # 再度opensslの場所を確認 % which openssl /opt/homebrew/opt/openssl@1.1/bin/openssl % openssl version OpenSSL 1.1.1i 8 Dec 2020 # ちゃんとインストール出来てる # homebrewへリンクを通す % brew link opensslこれでようやくRubyをインストールできるはず!
% rbenv install 2.7.2 Downloading ruby-2.7.2.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.2.tar.bz2 Installing ruby-2.7.2... ruby-build: using readline from homebrew BUILD FAILED (macOS 11.0.1 using ruby-build 20210119) Inspect or clean up the working tree at /var/folders/p8/krxwz5vn6ld7l4_bc2g1xnbr0000gn/T/ruby-build.20210124030531.27274.KLMWnZ Results logged to /var/folders/p8/krxwz5vn6ld7l4_bc2g1xnbr0000gn/T/ruby-build.20210124030531.27274.log Last 10 log lines: checking for off_t... yes checking char bit... 8 checking size of int... 4 checking size of short... 0 checking size of long... 0 checking size of long long... configure: error: in `/var/folders/p8/krxwz5vn6ld7l4_bc2g1xnbr0000gn/T/ruby-build.20210124030531.27274.KLMWnZ/ruby-2.7.2': configure: error: cannot compute sizeof (long long) See `config.log' for more details You have not agreed to the Xcode license agreements, please run 'sudo xcodebuild -license' from within a Terminal window to review and agree to the Xcode license agreements....あれ?
最後を見ると、Xcodeインストールしとけや!って書いてありますね。
はい。自分は最初にインストールしてなかったのでここでまた無駄なダウンロード待ち時間が発生しました。3度目の正直
Xcodeをインストールし、再度実行。さすがに頼む。
% rbenv install 2.7.2 Downloading ruby-2.7.2.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.2.tar.bz2 Installing ruby-2.7.2... ruby-build: using readline from homebrew Installed ruby-2.7.2 to /opt/homebrew/opt/rebind/versions/2.7.2出来たーーー!!
あとは下記の流れに沿って...
% rbenv versions * system (set by /opt/homebrew/opt/rebind/version) 2.7.2 % rbenv rehash % rbenv global 2.7.2 % rbenv versions system * 2.7.2 (set by /opt/homebrew/opt/rebind/version) % ruby -v ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [arm64-darwin20]これでRubyのバージョン切り替えができるようになりました!
Ruby on Railsのインストール
Railsもインストールしておきましょう。
% gem install rails # バージョン指定しなければ最新版がインストールされる...と思います。 # 最後に一通り更新しておく % rbenv rehash % source ~./zshrc # Railsのバージョン確認 % rails -v Rails 6.1.1これでRuby on Railの環境も整いました!
ここまで長かった...
環境構築って大変
プログラミングを挫折する人が多い理由の一つに環境構築が大変、というのをよく目にしますが、よく分かった気がします。笑
しかし、色々根気強く調べながらやっていけばなんとかなる!とも思いました。
先輩エンジニアの方々の情報にはとても感謝です。まだまだ駆け出しの駆け出しですが、もっと頑張るぞ〜