モデルの作成
前回の振り返り
前回はプログラムに追加する拡張機能ライブラリを復習しました。
MVCシステムとモデル作成の復習
Webアプリケーションのサーバー側の動きMVCとPicTweetのモデルの作成
MVCシステムとは
▶︎MVCは、モデル(Model)とビュー(View)、コントローラー(Controller)を使用して処理を行うことから頭文字を取ってMVCと呼ばれているそうです。
Railsの処理
リクエスト→①ルーティング→②コントローラー→③モデル→④ビュー→レスポンス
としています。
詳しく知りたい人はMVCモデルとでも検索してください(´Д` )
簡単に説明します。一応..。
⓪リクエスト▶︎Webアプリケーションを使用している人からの要求
①ルーティング▶︎要求にあった行先を管理している
②コントローラー▶︎要求にあった処理を管理している
③モデル▶︎要求に必要なデータのやりとりをデータベースとしてくれる
④ビュー▶︎レスポンスとして返す見た目を管理
⑤レスポンス▶︎リクエストに対応した情報を返す
上記は一例です。実際はもっと多くのことができますが、簡単に説明するとこんな感じ。
ちなみに、作成の順番
モデル→テーブル(データベースの情報記録)→ルーティング→コントローラー→ビューの順に今回のWebアプリケーションは作っていきます!
モデルの作成
モデルの作成にはターミナルでrails gコマンドを使います。
rails g modelコマンド
▶︎rails g model モデル名(今回はtweet)とすることで必要なファイルを自動で作成してくれます。モデル名は単数形を使用する決まりがあります。
カレントディレクトリはもちろんpictweetで行ってください
% pwd
User/~~~/pictweet
% rails g model tweet
以下のようなログが生成されたら成功です
invoke active_record create db/migrate/20200306015943_create_tweets.rb create app/models/tweet.rb invoke test_unit create test/models/tweet_test.rb create test/fixtures/tweets.yml
これでappファイル内のmodelsファイルにtweet.rbができたと思います。
まとめ
今回は、MVCシステムの復習とモデルの作成を行いました。モデル名の命名規則忘れていました(・・;)気をつけなきゃ
次回はデータを保存するためのテーブルを作成します!
前回 ライブラリを導入してみる - whale_86’s blog
クジラの練習帳001と練習帳について
練習帳について
私は現在、オンラインでプログラミングを勉強しながら転職に向け毎日プログラミングを楽しんでいます。この期間中に学んだ課題の中の問題を解説するつもりで書き連ねていきます。
メソッドやコードの組み方を復習と深掘りを行える場所にしたいと思っています。
言語はRubyになります。
練習帳001(変数の定義と使い方)
以下のプログラムを変数を使用して書き直しましょう。
※消費税率は10%です
puts "120円のペンの消費税は#{120 * 0.1}円、1000円の本の消費税は#{1000 * 0.1}です。"
以下は回答になります
解答
変数を使うタイミングは、
①値の意味が分かりにくい
②同じ値を何度も使う
の2パターンです。
変数を使った方が良いのは消費税、ペン、本の3つになります。
▶︎消費税が①と②どちらにも当てはまります。
▶︎ペンと本は②に当てはまります。
上記を踏まえて書き換えると
#変数を定義
tax = 0.1
pen_price = 120
book_price = 1000
#式に変換
puts "#{pen_price}円のペンの消費税は#{pen_price * tax}円、#{book_price}円のほんの消費税は#{book_price * tax}円です"
となります。
変数を使う利点は可読性と値が変わった場合(今回の場合は値段、消費税)にも式を崩さず、変数の定義のみを変更すれば済む利点があります。
今回のような式だとあまり便利とは感じにくいかもしれませんが、例えば電卓やレジなどでは膨大な式が記録されているはずです。その場合に式全てを変えて間違っていないかチェックするよりも、式は変更せずに値を変えた方が楽なのです。
次回 クジラの練習帳002 - whale_86’s blog
ライブラリを導入してみる
前回の振り返り
database.ymlの編集とデータベースの作成まで行いました。
前回のブログ↓
database.ymlの編集とデータベース作成 - whale_86’s blog
今回使うライブラリの導入まで
ライブラリとは
▶︎他のプログラムと組み合わせて使用するために、複雑なプログラムを一つのセットにした物。プログラミングにおける拡張機能のこと。
ハンバーガー屋さんのセットでポテトを頼むような物ですね🍟
Rubyでのライブラリ
▶︎RubyでのライブラリはRubyGemsというシステムで管理がされている。そのため一つ一つのライブラリをGem(ジェム)と呼びます。
Ruby on RailsもGemを組み合わせて出来たGemのようです!
RailsのGem関連の知識
Gemfileとは
▶︎Gemの「名前」と「バージョン」の情報を記載し、管理するRailsに付属するファイルです。Gemは他のGemの機能を使って成り立っている複雑な関係性があります。一つのGemだけをインストールしても動かない場合がありますが、bundlerというGemにより関係を管理して必要なGemやバージョンを合わせてインストールしてくれます。
Gemfile.lockとは
▶︎インストール済みとなったGemの情報を記録されるファイルです。一つのGemのためにどのGemをどのバージョンで合わせてインストールしたか確認することができる。
RailsにGemを入れてみる
Gemfileを以下のように編集します。
# Use mysql as the database for Active Record gem 'mysql2', '0.5.3'
mysql2のバージョンを0.5.3に編集する。
今回はすでにインストール済みのバージョンを変えるため以下のコマンドをターミナルで実行します。
# Gemfileを元にGemをインストールし、Gemfile.lockを更新する
% bundle update
もしインストールをする場合は以下を実行します
% bundle install
MySQL2について調べてみた
上記でバージョンを指定したMySQL2って何者なのか調べてみました。
mysql2公式!
MySQL2の成り立ち
▶︎MySQLを強化した物らしい
▶︎MySQLより評価が良かったのか、Ruby on Railsでの標準装備もMySQLからMySQL2に変わったらしい。(MySQLが戦力外通告された...。)
MySQL2を知るには、どう強化されたのかMySQLを調べる必要がありそうです。
MySQLとは
▶︎データベース管理システムの一つ。大容量のデータにも高速で動作してくれる強み。
▶︎Webサイトの急増に伴うCMS(Webサイトを作るときのテンプレートを事前に保存、管理することができる)の発展に伴い需要が高まる。
▶︎オープンソースで基本的に無料
▶︎Linux、Windows、Macなど複数のOSで利用可能
▶︎巨大なWebサイトでも耐えられる頑丈さがある
おそらくここが強化された
▶︎扱いやすさ
▶︎通信の速度
まとめ
調べていてびっくりしてしまいました。MySQLとMySQL2の戦いは熱いのかなと予想していましたが、MySQLのバージョン更新は2013年で止まってしまっているようです。これについて、「MySQLの問題が解決されないようなので、MySQL2に乗り換える」という方もいました。
どう強化されたのかまだ説明できるほど理解できませんでしたが、いつか理解できるようになるのでしょうか...。
調べていくうちにDBランキングなる物を見つけましたが、私が習ったDBとはどんな違いがあるのか調べてみるのも楽しそうでした
前回 database.ymlの編集とデータベース作成 - whale_86’s blog
参考にさせていただいたサイト
▶︎File: README — Documentation for mysql2 (0.5.3)
database.ymlの編集とデータベース作成
前回の振り返り
前回は、アプリケーションを保存するファイルとアプリケーションの立ち上げまで行いました。
ターミナル▶︎rails _6.0.0_ new pictweet -d mysql
立ち上げたアプリケーションを開く
立ち上げたアプリケーションをテキストエディタで開き、database.ymlを編集します。
テキストエディタはVSCordを使用しています。
VSCordについては以下をご覧ください。
database.ymlの編集
database.yml▶︎
default: &default
#encoding:utf8mb4を以下に編集
encoding:utf
database.ymlとは
Railsアプリケーションのデータベースの設定ファイルで、運用環境ごとに変更するのが望ましいです。
今回なぜ編集するか
Ruby on Railsの最新バージョンでは、データの保存形式が絵文字等に対応したものの、自動生成されるマイグレーションでは絵文字対応を想定しておらず、互換性がないためです。
詳しくは以下をご覧ください。
編集したらターミナルで以下のコマンドを行います
ターミナル▶︎
% rails db:create
rails db:createとは
新しくデータベースを作成するrailsコマンドの一種です。
データベースが作成されたら以下のコマンドを行います
ターミナル▶︎
% rails s
rails sとは
ローカルサーバーを立ち上げることができます。
実行後以下のリンクからサーバーが立ち上がっているか確認しましょう。
Yay!You're on Rails!と画像が出れば成功です。
まとめ
ここまでで、database.ymlの編集とローカルサーバーの立ち上げまで行いました。
アプリケーション作成〜何を作るか〜
何を作るか
課題で教わった物をまとめて復習する。
以下に何を作るかをまとめました。想像はしにくいですが目を通していたでけたらと思います。
アプリケーション概要
アプリケーション内容:写真付きの投稿を主にしたSNS(例:Instagram)
機能:投稿
投稿一覧が見れる
投稿の削除・編集
投稿へのコメント
ユーザー機能(登録とログイン)
使用したPC:MacBook Pro
使用したツール:ターミナル、Ruby、Ruby on Rails
下手くそですが、まとめてみました。
アプリケーションを立ち上げまで
アプリケーションを作成の前にアプリケーションを保存するファイルを作っておきます。今回は、「Project_pictweet」にしました。
ターミナルでの入力:cd Project_pictweet #保存するファイルへ移動
rails _6.0.0_ new pictweet -d mysql #アプリケーション立ち上げ
ここまででアプリケーションの立ち上げが完了しました。
今回はrailsのバージョン6.0.0を使用。pictweetとアプリケーション名を命名。データベースの管理システムとしてインストールしたMySQLをオプションで指定しました。
アウトプットの仕方を変える。
アウトプット
今までのアウトプットを見て、このままじゃ意味がない。時間かけるならもう少し実用的な見返せるアウトプットをしたいと思いました。
そのために以下ものを目指します。
- 見た人が何をしているか初めから読めば分かるものを作る
- なぜその処理をするのか明確にする
- 自分の言葉に変える
- 最後に次の更新までに達成したいことを具体的に明言する
まとまり次第出します。
二回目のアウトプット
今日のアウトプット(10/1)
10月に入ったそうです。いくら残暑でも、もう長野県は肌寒くて嫌になる季節。
部屋の中にいても長袖が欲しくなってきました。(季節に対応しきれず若干の風邪気味😷)
PicTweet続き(昨日のふりかえり)
昨日はツイートを表示するトップページまで作りました。
①モデル作成[モデル名:tweet]
②テーブル(名前[t.string :name]、ツイート内容[t.string :text]、画像用[t.text :image])
③ルーティングの設定(🆕resourcesメソッドと🆕onlyメソッドを使いました。)
④コントローラー作成と定義
⑤ビューの作成(index.html.erb)
→レイアウトの整形(🆕レイアウトテンプレート:application.html.erb、🆕yieldメソッド、🆕stylesheet_link_tagメソッド
ここから今日やったアウトプット↓
ツイートを投稿・保存する
ツイートを投稿する
①newアクションのルーティングを設定[:new]
②newアクションをコントローラーに定義[@tweet = Tweet.new]
🆕newアクション:インスタンス変数[@tweet]を生成する
③ビューを作成する(ツイート投稿ページ)
📝名前と画像、ツイート本文、送信ボタン
🆕form_with
ツイートを保存する
④form_fithに対応するcreateアクションのルーティングを設定[:create]
⑤createアクションとストロングパラメーターをコントローラーに定義
🆕ストロングパラメーター:指定したキーを持つパラメーターのみを受け取るようにする
🆕requireメソッドとpermitメソッド
📝createアクション:プライベートメソッド[:tweet_params]を呼び出し
📝ストロングパラメーター:[:tweet_params]にpermitメソッドで特定のキーを受け取るように制限する
⑥ビューを作成する(投稿完了ページ)
📝投稿完了を知らせる表示とトップページに戻るボタンを設置
⑦空のツイートを投稿できないようにバリデーションする
🆕バリデーション:データの登録に一定の制約をかける
🆕validatesメソッド:バリデーションを設定する
📝validates :text,presence:true
presence:true→空ではないか確かめる。
終わり
今日は以上です。
自分の書くのが遅く、できるアウトプットの量が少なくて残念😌
本当はもう少し細かくやりたい。。また明日。