あしあと

明日の自分への情報発信

railsの学習(1日目)とRubyの学習(2日目)とLinuxの学習(7日目)とプロになるためのweb技術入門(5日目)

今日は会社を有給で休んだが勉強にも時間を割きたい

 

さてまずはRubyの勉強するぞ!と言いたいがなぜかprogateのレッスン選択を間違えてrailsの勉強をやってしまった。。。

まぁいずれ通る道なのでよし。Rubyも少しやった

 

 

データベースとは

 

データベースとはデータを保存しておく場所のこと。このデータベースを参照し呼び出すことでwebアプリケーションに組み込めるということだろうか。

f:id:keropp1234:20200109084104p:plain

 

 

投稿一覧ページを作成しよう

Posts コントローラを用いて投稿に関するページを作成する。

f:id:keropp1234:20200109084250p:plain

 

一覧ページを作成する時は、index(索引)というアクション名を使用することが一般的なので、indexアクションを用意する。また、「rails generate controller」は「rails g controller」と省略することができる。

 

f:id:keropp1234:20200109084527p:plain

 

変数を使っての表示

HTMLのままではデータベースに接続できないため、投稿内容をRubyの変数に代入することで接続させる。

f:id:keropp1234:20200109085530p:plain

 

index.html.erbのようなerbという形式のファイルでは、<%%>で囲うことでHTMLファイルの中にRubyコードを埋め込むことができる。「erb」とは「Embedded Ruby(埋め込みRuby」の略であり、Rubyを組み込まれたHTMLですよ、という意味になる。

f:id:keropp1234:20200109085633p:plain

 

埋め込みRubyの表示

埋め込みRubyを表示するには<%= %>で囲うことで可能になる。つまり、<%%>で囲うときは表示されないため、変数の定義などで用いられる。そして<%=%>はコードの中身が表示されるので、変数の値などをブラウザに表示したいときに用いる。

f:id:keropp1234:20200109085850p:plain

 

each文での表示

変数ごとにいちいちHTMLと変数を記入していたらキリがないため、1.それぞれの変数を一つの配列にまとめて、2.each文を用いて一つずつ取り出す、という処理を行う。

 

画像のように変数postsと用意し、配列を作っていく。このとき、[]のなかは配列のため、文字列ごとに,(カンマ)で区切ることを忘れないように。

f:id:keropp1234:20200109091809p:plain


each文

 

下の画像では配列postsから要素を1つずつ取り出して変数postに代入し、表示している。こうすることで、postsの要素の数だけeach文の中身が実行されるので、投稿の数だけHTMLを書く必要がなくなる。<% end %>も忘れないように。

f:id:keropp1234:20200109092018p:plain

 

アクションでの変数の定義

 

これまではviewファイル内で変数を定義してきたが、Rubyではアクションファイル内で変数を定義するのが一般的(上の方でやった rails generate controller post indexで作ったposts_controller.rbがアクションファイル)。「def index」と「end」の間で変数を定義することで、その変数をindex.html.erb内で使用することができる。

f:id:keropp1234:20200109093913p:plain

 

@変数

通常、アクションファイル内で定義した変数をビューファールで表示することはできないが、@postとすることで呼び出しが可能になる。

f:id:keropp1234:20200109094016p:plain

 

データベースの用意

データベースにはテーブルという概念があり、その中にカラム(列)がある、横の行にテーブルがある。

f:id:keropp1234:20200109104942p:plain

 

データベースにデータを保存するためにはまずテーブルを作成する必要がある。データベースに変更を加えるには、1.データベースに変更を指示するファイルを作成する。

2.データベース変更の指示を与える。という手順がある。

 

テーブルの作成

そのためにマイグレーション【migration】(移動、乗り換えという意味)と呼ばれるデータベース変更のためのファイルを作る。マイグレーションファイルは「rails g model Post content:text」というコマンドで作成することができる。Postという単数形にすること。このテキストにはデータ型に分類され長文が入る。ちなみにモデルとはマイグレーションファイルファイル内に作られるApplicationRecordを継承したクラスのことである。コードでは以下の文になる。class Post < ApplicationRecord

f:id:keropp1234:20200109105457p:plain

 

先ほどのコマンドを実行すると、下の図のようにdb/migrateフォルダの下にマイグレーションファイルが作成される。

f:id:keropp1234:20200109105631p:plain

要は変更指示用のマイグレーションファイルを作る必要があり、それがrails g model Post content:textで作れるということである。

そしてこのマイグレーションファイルを実行するために「rails db:migrate」をターミナルで実行することでテーブルが作成される。

 

 

テーブルへのデータ保存

rails console

これをターミナルで打ち込むことでrubyのコードを簡単に実行できる環境が作られる。

 

データベースを保存するにはまずPostモデル(設計図、クラス)の.newインスタンスを作って、それを保存する必要がある。コードとしては「post = Post.new(content: "文字列")」となる。この.newの部分がインスタンスとなり、()内でその内容を定める。

f:id:keropp1234:20200109152606p:plain


そしてそれをpost(変数名).saveでデータベース上に保存できる。これはpostがApplicationRecordを継承したPostモデルを元に作られたインスタンスだからである。

f:id:keropp1234:20200109152645p:plain

 

データベースからの取り出し

rails consoleを起動し、「変数 = モデル.first」(下の画像ではpost = Post.first)でデータベースの一つ目のデータを取り出すことができる。

f:id:keropp1234:20200109153212p:plain

 

また変数postが定義されている状態で「post.content」と打ち込むことでデータベースの最初の投稿内容が表示されるので、データベースから投稿内容が取得できていることがわかる。

 

f:id:keropp1234:20200109153223p:plain

 

全てのデータを取り出す

 

全てのデータを取り出す場合はposts = Post.allで可能になる。これはfirstがallに変わっただけなのでわかりやすい。

f:id:keropp1234:20200109154940p:plain

 

テーブルの中から任意のデータだけを取得する場合はposts = Post.all(id)で取り出すことができる。

f:id:keropp1234:20200109155037p:plain

 

配列のデータから投稿内容を取り出す。

posts = Post.all(0)で取り出したデータはposts = Post.all(0).contentでcontent(投稿内容)の0番目のデータを取り出せる。

f:id:keropp1234:20200109155228p:plain

 

データベースの表示

これまでデータベースの作成と保存、呼び出しについて学んだが、次はそれを実際に表示できるようにする。

 

まずはindexアクション内の@postsに取得したデータを代入し、ビュー内ではeach文で繰り返し処理する部分に代入し、繰り返し実行する。表示部分はpost.contentになっている。

f:id:keropp1234:20200109160356p:plain

 

Ruby

each文(繰り返し処理)

配列.each do |変数名|と書き、endまでの間に実行したい処理を書く。

f:id:keropp1234:20200109212838p:plain

 

 

each文は変数の中にインデックス0から順番に繰り返し処理されていく。変数名に決まりはないが、単数名にするのが普通。

f:id:keropp1234:20200109213201g:plain

 

もちろんeach文の中に変数を使わないputsu処理も繰り返し処理できる。下の画像では------も繰り返し処理されている。

f:id:keropp1234:20200109213601p:plain

 

ハッシュ

ハッシュとは配列と同じで複数の値を管理するものだが、値に対してキーという名前をつけて管理する。もちろん配列と同じように変数に代入し、出力もできる。JavaScriptのオブジェクト(値とプロパティ)に近いかも?

f:id:keropp1234:20200109214203p:plain

 

ハッシュの更新は変数の定義の下に変数名["キー"] = 代入したい値として新たな値を代入するだけ。

f:id:keropp1234:20200109215138p:plain

 

ハッシュの追加は変数名["キー"] = 更新したいキーとなる。

f:id:keropp1234:20200109215331p:plain

 

 

web

情報はパケットという単位に分割されて送受信されている

パケっその送受信はTCP/IPが責任を持って行っている(TCP/IPとは郵便配達における郵便局のようなもの。IPアドレスを元に任意のホストに情報を届ける)。

 

IPアドレスによって通信相手のコンピュータは特定できるが、URLにはそんな数字はない。つまりURLのドメイン名からIPアドレスに変換する仕組みがあるということであり、それがDNS(Domain name System)と呼ばれるものである。このDNSサーバーをインターネット上に配置し、それにドメイン名を問い合わせればIPアドレスが判明するというわけである。

 

Linux

 

シェルでは最初にコマンドを打ち込まなければいけない。ファイルを最初に打ち込むとシェルがそれをコマンドだと思って探してしまい、エラーが出てしまう

 

入力リダイレクトを使うことで複数回同じ処理を行い際にもミスがなく楽にこなせる

また出力先がファイルになることで端末画面に映らななくらいのデータも記録して残してあとで眺めるということもできる

しかもUnixはデバイスもファイルとして認識するのでプリンタや記憶装置にもコマンドの出力を直接渡すことができる。

 

パイプとはコマンド相手に直接入出力できる機能で、記号「|」は名前の通りパイプの形をしている。入出力リダイレクトで作る中間ファイルがいらないので容量を食わないし処理が高速になる。

 

このパイプやリダイレクトで切り替えられる入出力のことを標準リダイレクトと言い、入力部分を標準入力、出力の部分を標準出力と呼ぶ。

 

パーミッション=許可 ファイルごとに読み取りや書き取りが可能かどうかが設定されている。rやw、xが読み込みや書き込み、実行のパーミッションで、コマンドで付与したり消したりできる。これはchmod (change mode)のコマンドで操作可能

 

このパーミッションファイルを操ることで誰にも、そして自分にも操れなくすることでミスを防ぐ使い方もある

 

他にもあるディレクトリの中の特定のファイルだけコピーしたくない、というときも、読み込みの権利を剥奪すれば、それ以外のコピーも可能になる。

 

Root = 管理者 /のルートディレクトリとは別の概念。どちらの意味かは文脈で判断するしかない

 

管理者と一般ユーザーは操作している人物が同じでもユーザーとしては別物として扱う。常に管理者としてコンピュータを操作すると何らかのミスで重要なファイルを破壊してしまうこともあるからである。

このような人はミスするものだという前提に立ったシステムもLinuxの文化と言える

 

Rootでないと操作できないコマンドは、sudo(switch user and do ユーザーを切り替えて実行)を行えばできるようになる

 

アップデートは本でいうところの誤植などの修正版、バージョンアップは内容の大きな書き換えを行ったもの

 

コマンドや設定も正しいのに動かない理解不能なエラーやトラブルは、所有者・所有グループ・パーミッションを疑え