Rails Diary

プログラミングの学習記録です。

RUNTEQ記録(5)RubyとRailsの環境構築メモ

※ごちゃごちゃ書いています。。。

chapter3進行中、何がなんだか行き詰まってしまったためChapter2からやり直すことにしました。

 

結論から言うと、やり直すほど深刻な詰まり方ではなかったのですが、サーバーが起動できなくなったり、テキストの図の通りの見た目が作れなかったり、削除する際の確認ダイアログが出てこなかったり、少し進める度に壁にぶち当たるのでどこかで脱却するために最初からやり直すことに。時間をかけすぎてしまいました。

 

 

*取り組んだこと

・現場Railsやり直し

 

①現場railsの読み進め方を読んで、指定されている環境で作業していなかったことが分かる

Rubyは入門で最新版の3.0.2にしたままだったがまあいいかとそのまま

③gem installでrailsの5.2.6(指定のバージョン)をインストール

rails _5.2.6_ new scaffold_appを実行し、作成したディレクトリに移動

⑤lsでディレクトリの中身を確認すると、書籍に記載されているものと比べて明らかに足りない

⑥原因がよく分からないままサーバーを起動させるがそもそも起動できない

 

⑦ランテックの質問に同じような質問があり、確認すると「rubyをアンインストールしてから、再インストールし、もう一度rails newを試す」と良いとのことでリトライしてみると書籍の通りにできた。

 

追い質問「なぜエラーになったのか」に対し、rails newが最後まで成功していなかったことが原因とあったが、ではなぜ成功しなかったのかは未だに分からない。

バージョンを変更したことでできるようになったので、バージョンの相性みたいなものがあるのかな?と勝手に思っている。

 

RubyRails  環境構築(備忘録)

・現場railsの読み進め方の指示通りの環境にするため、3.0.2だったrubyを一度アンインストール

・バージョンを2.5.1に指定してRubyを再インストール

【参考サイト】

Ruby アンインストール・再インストール - Qiita

MacにRubyをインストールする(rbenv) - Qiita

 

ruby -vでバージョン確認 → 3.0.2

②which rubyrubyのインストール先を確認

→user/ユーザー名/.rbenv/shims/ruby  →.rbenvにあることが分かる

③rbenv uninstall 3.0.2 #アンインストール

④readlineのインストールを再度すべきかわからなかったけれど、また日本語入力できないと困るので一応することに

brew install readline インストール

brew link headline ―force パスを通す

 

⑤M1Macだと「rbenv install 2.5.1」では上手く行かなかった

RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC rbenv install 2.5.1」を実行

 

*「rbenv versions」で変更可能なインストール済みのバージョンが表示される

rbenv versions

  system

  2.5.1  ←ちゃんとインストールできてる!!

  2.6.8

  • 3.0.2 (set by /Users/igm_pman/.rbenv/version)

 

*バージョンを切り替える

rbenv global 2.5.1

ruby -v

ruby 2.5.1p57 (2018-03-29 revision 63029) [-darwin20]

 

↑バージョンの切り替えは

システム全体の適用「rbenv global バージョン」か

現在の作業ディレクトリ以下に適用「rbenv local バージョン」のいずれかを実行

 

 

⑥現場railsの読み進め方で、rails6は環境構築の難易度が上がることを知る

Javascript用にWebpackerのビルド環境とやらを用意する必要があるらしい)

 

rails newする際はバージョンを指定(バージョンを指定しないと最新版で作成されてしまう)

rails _5.2.6_ new scaffold_app

 

⑧一週目は確認不足で書籍のまま、postgresqlのインストールをしてしまったが、データベースも環境構築難易度の低いSQLite3を使うとのこと、書籍に書いてある「-d postgresql」オプションを付けなかった場合、デフォルトでSQLite3が適用されるそうなので、何も付けずにバージョン指定のみのrails newをする

 

rails gでファイルを生成後、code scaffold_appを実行するとソースコードの編集ができるようにする。codeというコマンドがなかったので、「Cmd + Shift + p」→「Shell」→「Enter」

codeコマンドをインストールする

 

指示通りの中身になったため、このままchapter2をやり直す

 

 

chapter2やり直し

 

ユーザー管理アプリの雛形を作成

$ rails g scaffold user name:string address:string age:integer

$ rails db:migrate

 

Scaffold土台、足場という意味。文字通り、機能の足場を作るサブコマンド。

rails gでuserに関するscaffoldを自動生成する

 

Rails sでサーバー起動 (起動できた!)

http://localhost:3000/users

にアクセスすると、簡単なユーザー一覧画面が表示される

(まだ一人もユーザー登録していないので、一覧という感じはしない)

 

 

ユーザー管理に必要な機能(CRUD

「作成(Create)」

「読み出し(Read)」

「更新(Update)」

「削除(Delete)」が生成される

 

*Scaffold機能でCRUDを備えたWebアプリをコマンド一つで作成できる。

railsというフレームワークを使いこなす上でお手本

(確かにとても分かりやすいと思う🙏

 

 

リレーショナルデータベース(RDB)とは、、、

・リレーショナル・・・「関連付けられた」「関係のある」

・データベースはデータを入れる箱

・リレーショナルデータベースはデータベースの種類

 

↑あんまりよく分からなかったが、普段使っているDB≒リレーショナルデータベースと思って良いとのこと。

 

 

◎HTMLのtableタグというものについて

th・・・table header(見出し)

tr・・・table row(行)

td・・・table date(データ)

 

 

◎datebase.ymlはデータベースと接続するための設定ファイル

YAML形式

書いてある内容

 

default: &default  ←共通化したい部分をエイリアス

  adapter: sqlite3(データベースに接続するアダプタ名: sqlite3)

  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

  timeout: 5000

 

development:

  <<: *default  エイリアスの参照(一々同じ内容を書かずに済む)

  database: db/development.sqlite3

(データベース名)

 

test:

  <<: *default

  database: db/test.sqlite3

 

production:

  <<: *default

  database: db/production.sqlite3

 

↑「development」「test」「production」という3種類の環境用にそれぞれデータベースに接続に必要な設定が記述されている。

 

yamlファイル

yamlファイル

・インデントで階層構造を表現する

・配列やハッシュも表現できる

・データの保存や設定ファイルなどによく利用される

 

railsのファイルにおけるハッシュ形式の書き方(頻出)

animal:

   cat: “ネコ”

   dog: ”イヌ”

(確かにスッキリしてる🤔)

 

RailsMVC (モデル・ビュー・コントローラ)

UI(ユーザーインターフェース)とは、、、

ユーザーからの入力を受け付けたり、アプリケーションの状態をユーザーに伝えたりする部分。ユーザーとのやり取り担当?

 

MVCとは、UIを持つソフトウェアのアーキテクチャ(構造)の一種

(ソフトウェアをどのような構造にするか)

 

目的は?

ユーザーとのやり取りを扱うUIと、アプリケーション固有のデータや処理の扱いは性質の異なるものであり、それをごちゃ混ぜにして記述するとコードが複雑になり保守性が悪くなる。

 

まず、保守とは「不便なく使える状態を維持すること」

ちゃんと動いているか監視したり、動かなくなったら何とかしたり、使える状態を維持することに加え、不具合を直したり、機能を追加することをいう。

 

保守性とは、それら保守のしやすさを言う。

つまり、性質の異なる「UI(ユーザーとのやり取り)」と「アプリ固有データや処理の扱い」を同じ機関で管理しようとすると、必然保守はしづらくなるため、管理する機関を分けて管理しやすくしようというのがMVC構造の目的。

 

 

 

 

*感想

情報過多でパンクしそうです🙄

全部を一気に覚えるのは無理と分かっているけれど、理解できないまま進めても、その情報が必要なときに頭の隅にも浮かばなそうなので、ぼんやりとでも理解できて良かったです。