30DAYSトライアル4th(Rails)DAY28(仮)の課題は「ドットインストール Rails入門コース #01〜#13」です。
※(仮)としているのは東京フリーランスの記事ではDAY20までしか書かれていないので、その先を勝手に自分で決めて進めているからです。
目次
ドットインストールの成果物
ProgateはTwitterのようなアプリを作成しながらRailsを学習しましたが、ドットインストールでは簡易的なブログアプリを作成しながら学習を進めていきます。
こんな感じのやつです。
ユーザー管理もしないですし、Progateよりもかなりあっさりしています。
ちなみに無料会員でもRailsコースは全てのレッスンを受講可能です。
30DAYSトライアル4th(Rails)DAY28(仮)の学習内容
Progateで一度学習しているので、30DAYSトライアル4th(Rails)DAY28(仮)ではドットインストールを半分ぐらいまで進めました。
- #01 Ruby on Railsを使ってみよう
- #02 動作確認をしてみよう
- #03 Scaffoldを使ってみよう
- #04 ディレクトリ構成を確認して行こう
- #05 モデルを作ってみよう
- #06初期データを流し混んでみよう
- #07 コントローラを作ってみよう
- #08 記事の一覧を表示してみよう
- #09 rootパスを設定してみよう
- #10 画面をカスタマイズしてみよう
- #11 link_toヘルパーを使ってみよう
- #12 記事の少佐を表示してみよう
- #13 画像にリンクを貼ってみよう
#01 Ruby on Railsを使ってみよう
Ruby on Railsの概要の説明とRailsのインストールを実際に行います。
レッスンではドットインストール用のに作成した仮想開発環境(ローカル開発環境の構築[macOS編])にRailsのインストールを行っていきますが、僕は自分のPC(Mac)に最新版(Rails6.0.1)をインストールしてみました。
Railsのインストール
Railsのインストールは下記のコマンドをターミナルにて実行して行いますが、Rails6にはRuby2.5以上が必要になるので、Rubyのバージョン確認から行います。
1 2 3 4 5 |
# ターミナルにて下記コマンドを実行してRubyのバージョンを確認 Ruby -v # 実行結果のイメージ ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19 |
僕のMacは幸いRuby2.6.3だったため、そのままRailsのインストールにうつることができました。
※Rubyをバージョンアップする場合はこの下記サイトなどを参考に行ってください。
Rubyのバージョンアップ方法を現役エンジニアが解説【初心者向け】
そして、Railsのインストールです。
1 2 3 4 5 6 7 |
# ターミナルにて下記のコマンドを実行 gem install rails [--no-document] # 下記のようなメッセージが表示されればインストール成功 Bundle complete! 17 Gemfile dependencies, 75 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. run bundle binstubs bundler |
僕の場合はインストールコマンドをスーパーユーザー(sudo)で起動しないと権限がないと言われ、インストールできませんでした。
#02 動作確認をしてみよう
インストールしたRailsに内包されているWebサーバー(Puma)を起動して動作確認を行います。
アプリケーションの作成
Progateで学習済みですね。下記のコマンドを実行することで、アプリケーションを作成することができます。
1 2 |
# 下記のコマンドをターミナルにて実行 rails new アプリケーション名 |
するとカレントディレクトの下にアプリケーション名で指定したフォルダが作成されます。
Webサーバーの起動
Railsに内包されているWebサーバー(Puma)を起動するには、下記のコマンドを実行します。
1 2 3 4 5 6 7 |
# 下記のコマンドをターミナルにて実行 rails server -b IPアドレス [-d] # 下記のメッセージが表示された起動完了 => Booting Puma => Rails 6.0.1 application starting in development => Run `rails server --help` for more startup options |
「-dオプション」を付加することでWebサーバーをバックグラウンドで起動することができます。むしろ、バックグラウンドで起動しないとターミナルを一つ占有することになるので、バックグラウンドでの起動がおすすめです。
しかし、僕の場合はRailsのインストール時に「Webpacker」のインストールに失敗していたようで、すんなり起動とはいきませんでした。
Webpackerのインストール(Webサーバーの起動に失敗した場合)
下記のQita記事を参考に行いました。
Rails6 Webpackerでエラーが出た
Webpackerのインストールは、ターミナルにて下記のコマンドを実行します。
1 2 3 4 5 6 7 8 |
# 下記のコマンドをターミナルにて実行 rails webpacker:install # 下記のメッセージが表示された場合はNode.jsのインストールが必要 # (このメッセージはRailsインストール時にも表示されているはずです) sh: node: command not found sh: nodejs: command not found Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/ |
エラーメッセージに表示されている「https://nodejs.org/en/download/」からNode.js(サーバーサイドで動作するJavaScript)のインストーラーをダウンロードしてインストール後に、再度Webpackerのインストールを実行すると次は下記のエラーが・・・。
1 |
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/ |
つぎはYarn(Node.jsのパッケージマネジャーであるnpmと互換性があるFacebookが公開しているもの)がないと言われます。
これまたエラーメッセージに表示されている「https://yarnpkg.com/lang/en/docs/install/」を参考にyarnをインストールしようとターミナルにて下記のコマンドを実行。
1 2 3 4 5 |
# Yarnのインストールコマンド(ターミナルにて実行) brew install yarn # エラー -bash: brew: command not found |
次はbrewコマンドがないと怒られました。
下記のQita記事を参考にbrewのインストールコマンドをターミナルにて実行します。
macOSにHomebrewをインストール
1 2 |
# 下記のコマンドをターミナルにて実行 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
ここまでやってYarnのインストール、Webpackerのインストールを行ってやっとWebサーバーを起動することができました。
Webサーバーが起動していることの確認
ブラウザで「http://IPアドレス:3000」にアクセスし、以下のような画面が表示されたらOKです。
#03 Scaffoldを使ってみよう
RailsにはScaffoldというアプリのベースを簡単に作成できる機能があります。
Scaffoldを使用するとモデルやコントローラ、ビューをまとめて作成してくれて一つの簡易的なアプリが起動できる状態となります。
Scaffoldはターミナルで下記のコマンドを実行します。
1 2 3 4 5 |
# 下記のコマンドをターミナルにて実行する。 rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2・・・ # DBに反映 rails db:migrate |
これだけで下記のようなアプリができます。
これを足場(Scaffold)にしてアプリ開発を行うことが可能です。
でも、僕の環境だとここでもすんなりとはいってくれませんでした・・・。
カラムのデータ型に「String」を指定するとdbに反映するタイミングでエラーとなり、モデルが作成されないという自体に陥ってしまいました。
エラーの内容は以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
== 20191130235429 CreateMemos: migrating ====================================== -- create_table(:memos) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: private method `String' called for #<ActiveRecord::ConnectionAdapters::SQLite3::TableDefinition:0x00007fafe6bf84a0> ・ ・ 中略 ・ ・ bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: NoMethodError: private method `String' called for #<ActiveRecord::ConnectionAdapters::SQLite3::TableDefinition:0x00007fafe6bf84a0> ・ ・ 以下略 |
ActiveRecord::ConnectionAdapters::SQLite3::TableDefinitionにStringメソッドなんてないぜ的な感じ。
色々と調べてみましたが、Rails6でString型が廃止されたなどという情報もなくこの問題はお蔵入り・・・。
結果的にデータ型をtext型にしたらうまくいきました。
ちなみに自分の環境は以下の通りです。
- Ruby:2.6.3
- Rails:6.0.1
- Sqlite3:3.28.0
まとめ
自分でDAY28に定めているものの4分の1の内容しか記載してませんが、記事が長くなったので一旦終わります。
開発環境構築はプログラミング初心者にとってはかなりハードルがあるので、ここでつまずいてプログラミングを諦めてしまう人が多いような気がします。
特にProgateではブラウザ上に開発環境が準備されているので、学習を終えて実践にうつった時の最初の正念場になると思います。
開発環境でつまづいたとしても、Google先生に聞けば解決につながる記事は見つかるはずなので、「成長するチャンス」と思って問題を解決していきましょう!!