カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

1-1

Rails Scaffold を利用して爆速で CRUD 機能を実現しよう

この章では、 Rails の Scaffold を利用して、CRUD 機能を実装します。

CRUD とは Create(作成) / Read(表示) / Update(更新) / Delete(削除) の略でアプリケーションを実現するために必要十分な機能群のことを指します。

そして、Rails の Scaffold を利用することによって、その CRUD を素早く実現できるので実際に試してみましょう。

snippet_app プロジェクトの生成

まずは、 rails new コマンドを利用して新しいプロジェクトを作成しましょう。
任意のディレクトリ配下で下記コマンドを実行しましょう。

shell
12
Copied!
$ rails _5.2.3_ new snippet_app $ cd snippet_app

(場合によっては管理者権限でコマンドを実行する sudo を先頭につける必要があります)

次に下記のコマンドを実行しましょう。

Copied!
$ bundle install

Rails Scaffold を用いてモデル、コントローラ、ビューをまとめて生成する

そして、 rails generate scaffold コマンドを利用して、モデル、コントローラ、ビューをまとめて生成します。

shell
1
Copied!
$ bundle exec rails generate scaffold snippet title:string language:string contents:string

(場合によっては管理者権限でコマンドを実行する sudo を先頭につける必要があります)

CSRF(クロスサイトリクエストフォージェリ)対策を無効にする

Rails で標準で備わっているWebアプリケーションの脆弱性の1つであるクロスサイトリクエストフォージェリ対策機能を無効化します。

  • 今回は学習のため無効化しますが、本来(公開目的)であれば無効化せずに実装するべきです。しかし、まずは動かすことを目的とするため割愛いたします。
  • 詳しくは こちら などをご覧ください

development(検証環境)用

Copied!
config   └── environments      └── development.rb(変更前)
ruby
123
Copied!
# Use an evented file watcher to asynchronously detect changes in source code, # routes, locales, etc. This feature depends on the listen gem. config.file_watcher = ActiveSupport::EventedFileUpdateChecker # この次の行に追記
Copied!
config   └── environments      └── development.rb(変更後)
ruby
12345
Copied!
# Use an evented file watcher to asynchronously detect changes in source code, # routes, locales, etc. This feature depends on the listen gem. config.file_watcher = ActiveSupport::EventedFileUpdateChecker config.action_controller.allow_forgery_protection = false

production(本番環境) 用

Copied!
config   └── environments     └── production.rb(変更前)
ruby
12
Copied!
# Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false # この次の行に追記
Copied!
config   └── environments     └── production.rb(変更後)
ruby
1234
Copied!
# Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false config.action_controller.allow_forgery_protection = false

(余談)mac の場合は、下記のように gsed コマンドを利用して追記することもできます。(直接編集した場合は不要)

shell
123
Copied!
$ sudo gsed -i -e "/config.file_watcher = ActiveSupport::EventedFileUpdateChecker/a \\\n config.action_controller.allow_forgery_protection = false" config/environments/development.rb $ sudo gsed -i -e "/config.active_record.dump_schema_after_migration/a \\\n config.action_controller.allow_forgery_protection = false" config/environments/production.rb

DB migrate

次に、データベースのマイグレーションを行います。

shell
1
Copied!
$ bundle exec rake db:migrate

(場合によっては管理者権限でコマンドを実行する sudo を先頭につける必要があります)

Rails アプリを実行する

ここまでできたら、アプリケーションが立ち上がることを確認しましょう。

shell
1
Copied!
$ bundle exec rails server

(場合によっては管理者権限でコマンドを実行する sudo を先頭につける必要があります)

このコマンドを実行したら、 localhost:3000 にアクセスし、アプリのRailsのデフォルトページが起動できることを確認しましょう。Ctrl + C で強制終了させることができます。

※ cloud9 を利用している場合は localhost:8080 がデフォルトとなるようです。

image

POST API を実行する

また、Terminal を開き curl を用いて API を実行しましょう。
成功すると、DB にデータが挿入されます。

アプリを起動させながら、Terminal の新規タブを開いて実行しましょう。

shell
123
Copied!
$ curl -X POST -H "Content-Type: application/json" -d '{"title":"title1", "language":"Ruby", "contents":"contents1"}' localhost:3000/snippets.json $ curl -X POST -H "Content-Type: application/json" -d '{"title":"title2", "language":"JavaScript", "contents":"contents2"}' localhost:3000/snippets.json $ curl -X POST -H "Content-Type: application/json" -d '{"title":"new title", "language":"JavaScript", "contents":"new contents"}' localhost:3000/snippets.json

下記のようなレスポンスが返ってくれば成功です。

Copied!
{"id":1,"title":"title1","language":"Ruby","contents":"contents1","created_at":"2019-06-22T05:37:23.186Z","updated_at":"2019-06-22T05:37:23.186Z","url":"http://localhost:3001/snippets/1.json"} {"id":2,"title":"title2","language":"JavaScript","contents":"contents2","created_at":"2019-06-22T05:38:43.775Z","updated_at":"2019-06-22T05:38:43.775Z","url":"http://localhost:3001/snippets/2.json"} {"id":3,"title":"new title","language":"JavaScript","contents":"new contents","created_at":"2019-06-22T05:39:43.775Z","updated_at":"2019-06-22T05:39:43.775Z","url":"http://localhost:3001/snippets/3.json"}

SQLite のデータを確認する

POST に成功していることを確かめるために、SQLite のデータを確認しましょう。
rails db コマンドで SQLite のコマンドラインツールを起動できます。

shell
1
Copied!
$ bundle exec rails db

(場合によっては管理者権限でコマンドを実行する sudo を先頭につける必要があります)

コマンドラインツールが起動できたら、以下のコマンドを入力してください。

shell
1
Copied!
sqlite> select * from snippets;

下記のような結果となれば、成功です。

Copied!
1|title1|Ruby| contents1|2019-06-22 05:37:23.186440|2019-06-22 05:37:23.186440 2|title2|JavaScript|contents2|2019-06-22 05:38:43.775661|2019-06-22 05:38:43.775661 3|new title|JavaScript|new contents|2019-06-22 05:39:43.775661|2019-06-22 05:39:43.775661

確認ができたら、下記コマンドにて sqlite を終了させましょう。

shell
1
Copied!
sqlite> .exit

ここまで実行できれば、Server 側の実装は完了です。次の章に進みましょう。

現在のパート (7)
全パート (34)
みんなで助け合おう!
現在のパートのディスカッション 全7件
1-1
jyonson 2021-02-24
bundle install がうまくいかない

発生している問題

bundle installをすると、An error occurred while installing puma (3.12.6), and Bundler cannot continue.このようなエラーが出ます。

エラー画面をスクショで添付してください

スクリーンショット 2021-02-24 0.01.24.png

試したこと

https://ja.stackoverflow.com/questions/68331/railsローカル環境構築にて-pumaがインストールできないエラー-error-occurred-while-installing-puma-4-3-5

補足情報(フレームワークのバージョン・OS)

Rails 5.1・Mac OS

1-1
jyonson 2021-02-16
Snippetsコントローラーの中身

rails g scaffoldで必要なものを作成した際に、Snippetsコントローラーの中の各アクションの中の記述は自動的に追加されるのでしょうか?

1-1
たい 2020-09-07
(7) Failed to connect to localhost port 3000: Connection refused

1-1のPOST API を実行するの箇所のcurl -X POST -H "Content-Type: application/json" -d '{"title":"title1", "language":"Ruby", "contents":"contents1"}' localhost:3000/snippets.jsonを実行するとエラー発生

発生している問題

(7) Failed to connect to localhost port 3000: Connection refused

解決方法がわかりません。

1-1
Tomohiro Hagino 2020-08-01
修正が必要だと思います

このコマンドを実行したら、 localhost:3000/index.html にアクセスし、アプリのRailsのデフォルトページが起動できることを確認しましょう。Ctrl + C で強制終了させることができます。

このコマンドを実行したら、 localhost:3000 にアクセスし、アプリのRailsのデフォルトページが起動できることを確認しましょう。Ctrl + C で強制終了させることができます。

1-1
田中 啓汰 2020-05-22
質問です

お世話になっております。現在cloud9の環境下で実装しているのですが、POST API のcurlコマンドにおける"url"の値がlocalhost:3000だとrefusedになってしまいます。

"curl: (7) Failed to connect to localhost port 3000: Connection refused"

ネットにも情報がなく苦戦しております。
cloud9の場合urlには何を指定すればいいのでしょうか。
お忙しい中お手数をおかけして申し訳ありません。