goo blog サービス終了のお知らせ 

不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『Rails入門1-1: Ruby on Railsを理解しよう (全7回)』を受講してみた

2021-03-20 22:34:37 | paiza

『Rails入門1-1: Ruby on Railsを理解しよう (全7回)』


ようやくRuby on Railsまでたどり着いたな。
Webアプリ開発入門 Rails編 (全7レッスン)』って結構レッスン数も多いな😓 

この後、Javaまでやったらようやくpaizaでの学習は一通り終わりでいいかな。

とりあえず、Ruby on Railsが使えるように、以下のコマンドでライブラリをインストールしとこう。

sudo gem install rails

なんかRailsってあっさりインストールできるんだな。😲 
もっとあれやこれや開発環境を整えるの難しいのかと思ってた!

って思ってたら、rails newを実行したとき、なんかうまく行かなかった。
ずっと「Installing sassc 2.4.0 with native extensions」で止まってる。

ググってみたところ、以下のサイト
を参考に、以下のコマンドを実行。

gem install sassc -v '2.4.0' --source 'https://rubygems.org/'

これも結構な時間が掛かった。
どうやら単にsassc 2.4.0のインストールに時間が掛かっていただけなのか?

で、もう一度rails newを実行したら、最後に
Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/
って出た!?

う〜む、なんだかよくわからなくなってきた。
たぶんなんか↓この辺に正解が書かれてる気がする
ちょっと日を改めて試してみるか😩

結論

結論として、以下のサイトを参考に、railsをインストールし直したら、とりあえずサーバーを起動して、RailsのWebページにアクセスすることができた。
今回は、rails newを実行しても、ちゃんと最後まで実行され、
Webpacker successfully installed 🎉 🍰
って出るようになった。
ただ、いくつかwarningは出ているようだけど・・・😓 

やったことは大体こんな感じ
  • rbenvというRubyのバージョン管理ツールをインストール
  • rbenvを使ってRuby2.7.1をインストール
  • Railsのバージョンを6.0.0に指定してインストール
あと、Node.jsがインストールされていないって言ってたから、試行錯誤しているとき、別のサイトで書かれていた以下もやっといた。
これにより、自分の環境で使っているRubyとRailsのバージョンは以下のように変更された。
  • Ruby:2.7.0 → 2.7.1
  • Rails:6.1.3 → 6.0.0
結局、何が原因だかはよくわからないけど、とりあえずこれでよしとしよう。

paizaのRailsは5系で、自分の環境にインストールしたのは6系だから、色々変わってしまっているっぽい。
まぁ、そもそもpaizaではRailsの環境構築方法は示されていないんだけど。

メモ

#01:Ruby on Railsとは

#02:Railsを使う準備をしよう

  • Railsコマンドの例
    • Railsのバージョンを確認する。
      $ rails -v
    • bbsプロジェクトを作成する。
      $ rails new bbs
    • Rails用のWebサーバーを起動する
      $ rails server -b 0.0.0.0
  • RailsのWebページにアクセスするには
    • ブラウザで「http://localhost:3000」にアクセスする
※ ちなみに、Rails5系を使って作成されたpaizaのプロジェクトをダウンロードして、Webサーバーを起動したところ、ちゃんと動作した。
※ 試行錯誤の末、Rails6系でも、なんとか動作するようになった。

#03:3分で掲示板を作ってみよう

  • 掲示板を自動生成する
    $ rails generate scaffold article content:string
    $ rails db:migrate
  • ブラウザで「http://localhost:3000/articles」にアクセスする

#04:Railsで、Webページを追加しよう

  • Welcomeページを作成する
    $ rails generate controller welcome index
  • サーバーを起動する(ショートカット)
    $ rails s -b 0.0.0.0
  • 作成したWebページを表示する
    http://localhost:3000/welcome/index
  • Welcomeページをトップページに設定する
    config/routes.rbに記述する

#05:RailsのWebページを修正してみよう

  • Webページの修正方法
    RailsのWebページの表示は、「app/views」のerbファイルに記述する。
    • ウェルカムページのindex.html
      app/views/welcome/index.html.erb
      • erbはembedded rubyの略
  • <%= ... %>
    テンプレート中でRubyコードを実行

#06:Rails掲示板の構成を調べよう

  • MVCアーキテクチャ
    • - Model:アプリで扱うデータを保持し、操作する。
    • - View:受け取ったデータを表示する。
    • - Controller:ユーザーからのリクエストを処理し、モデル・ビューを呼び出して結果を返す。
  • 参考になるWebページ

#07:Rails掲示板を改良しよう

  • カラムの追加方法
    • データベースのarticlesテーブルに、nameカラムを追加する
      $ rails generate migration AddNameToArticle name:string
      $ rails db:migrate
  • viewファイルを変更する
    • app/views/articles/index.html.erb
    • app/views/articles/show.html.erb
    • app/views/articles/_form.html.erb
  • コントローラーを修正する
    • app/controllers/article_controller.rb

認定証

やはり環境構築に時間が掛かってしまった。
何はともあれ、Rails入門編レッスン1の認定証を取得。


学習ステータス




paizaラーニング『Webアプリ開発入門 Sinatra編5:ActiveRecordでメモ帳アプリを作ろう (全8回)』を受講してみた

2021-03-19 23:03:00 | paiza

『Webアプリ開発入門 Sinatra編5:ActiveRecordでメモ帳アプリを作ろう (全8回)』


RubyでMarkdownを扱うには、redcarpetというライブラリを使うらしい。
ということで、以下のコマンドでライブラリをインストール。
sudo gem install redcarpet

メモ

#01:SinatraとActiveRecordで作るmarkdownメモアプリ

  • メモ帳アプリのデータベースを用意する
    • データベース:mymemo
    • テーブル:posts
    • カラム:
      • id (INT)
      • title (VARCHAR 255)
      • content (TEXT)
※ レッスンではデータベース名がmemoであるが、これまでの講座で既にmemoは使用済みだからmymemoに変更。

#02:データベースを用意する

  • phpMyAdminを使って、データベースを作成し、サンプルデータを登録する。
  • SQLを使ってメモ帳アプリのデータベースを作成する

#03:Sinatraでデータベースに接続する

  • メモ帳一覧を表示するコードを作成する:memo.rb
  • メモ帳一覧を表示するテンプレートを作成する:index.erb

#04:メモを表示しよう

  • メモの詳細画面を表示するコード:memo.rbの編集
    • get '/show/:id' do
  • /views/show.erbの作成

#05:Markdownで表示しよう

  • RubyでMarkdownを扱うには「redcarpet」(レッドカーペット)を使用する。
  • Markdown対応にするコードをmemo.rbに追記
    • Markdownオブジェクトを作成する
      @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
※ このコードを実行するには、redcarpetをインストールしておく必要がある。

#06:メモを編集しよう

  • メモの編集画面を表示するコード(保存機能なし):memo.rbの編集
    • get '/edit/:id' do
  • 編集画面のテンプレートの作成:/views/show.erb

#07:メモの保存と削除 

  • メモを保存するコード
    post '/update/:id' do
  • メモを削除するコード
    get '/destroy/:id' do

#08:新規メモを作ろう 

  • 新規メモを作成するコード
    get '/new' do
  • 新規作成画面のテンプレートを作成
    /views/new.erb

認定証

ふぅ〜😙 ようやくSinatraのレッスンを全て修了した!
なんだか、最初のレッスン始めてから時間が掛かってしまった😅 
次はいよいよRailsだな。
Railsってよく聞くからようやくどんなものかが分かるな。


学習ステータス



それにしても、Rubyってなんで僧侶なんだ?😔 

paizaラーニング『Webアプリ開発入門 Sinatra編4:ActiveRecordでデータベースを操作しよう (全8回)』を受講してみた

2021-03-17 23:05:48 | paiza

『Webアプリ開発入門 Sinatra編4:ActiveRecordでデータベースを操作しよう (全8回)』


このレッスンではActiveRecordというライブラリを使うらしい。
ということで、ActiveRecordをインストール。

$ sudo gem install activerecord

メモ

#01:ActiveRecordの役割と効果

#02:ActiveRecordでMySQLに接続する

  • SQL文を使ってMySQLに接続する場合
    • Mysql2::Client.new()メソッドを使う
  • ActiveRecordでMySQLに接続する場合
    • ActiveRecord::Base.establish_connection()メソッドを使う
    • テーブルを表すクラスを定義する
      • 複数形のテーブル名は単数形のクラス名とする。
      • クラス名の先頭は大文字。

#03:SinatraとActiveRecordでデータを表示しよう 

  • SinatraでActiveRecordを利用するコード
    • player.rbの修正
    • index.erbの作成

#04:ActiveRecordでデータベースを使ってみよう1

  • 様々なデータの取り出し方
    • すべてのデータを取り出す
      @players = Player.all
    • 最初の3件を取り出す
      @players = Player.limit(3)
    • 条件を指定して取り出す=
      @players = Player.where("level >= ?", 5)
  • 指定したidのデータを取り出す:player.rb
    • get '/show/:id' do

#05:ActiveRecordでデータベースを使ってみよう2

  • ルーティング
    • /new/ → データを追加
    • /update/{id}  → データを更新
    • /destroy/{id} → データを削除
  • ActiveRecordとSinatraでの記述方法
    • データを追加する
      Player.create(:id => 11, :name => "霧島1号", :level => 1, :job_id => 4)
      ↑idも指定しておく必要がある?
    • ActiveRecordとSinatraで、データを更新する
      player.save
    • ActiveRecordとSinatraで、データを削除する
      player.destroy

#06:ActiveRecordでテーブルを連結してデータを取り出す

  • テーブル間の関係
    • 一方のテーブルの複数の項目に対して、もう片方のテーブルの1つの項目が対応していることを「多対1」の関係という。
    • 多対1の関係でテーブルを結合する場合、クラスの定義に以下を記述する。
      belongs_to :{table_name}
※ このチャプターのコードを書いて実行するとエラーが出てしまった。
→ これはどうやらjob_idに値がないレコードがあるためで、そこに値を設定してやれば問題なく実行できた。

#07:具体例:職業一覧を表示する

  • 1対多の関係でテーブルを結合する場合、クラスの定義に以下を記述する。
    has_many :players
  • 職業一覧を呼び出すルート
    get '/jobs' do
  • 職業一覧のテンプレートを作成
    views/job_index.erb

#08:具体例:特定の職業のプレイヤー一覧を表示する

  • 職業別のプレイヤーインデックスを表示するコードを作成
    • job_index.rb
    • views/job_index.erb

認定証

最終的に出来上がるプログラムってなんか中途半端だな?😟 
次のレッスンで完成させるのかな?
まぁとりあえず認定証を取得。


学習ステータス



ダメだ〜!?眠い〜😴 
今日はちょっと早いけど寝よう。

paizaラーニング『Webアプリ開発入門 Sinatra編3:Rubyでデータベースの基本を理解しよう (全8回)』を受講してみた

2021-03-15 23:34:35 | paiza

『Webアプリ開発入門 Sinatra編3:Rubyでデータベースの基本を理解しよう (全8回)』


どうやらこのレッスンを自分の環境で試すには、
RubyでMySQLにアクセスするためのライブラリmysql2をインストールする必要があるっぽい。
$sudo gem install mysql2

さらに自分の環境の場合、Mysql2::Client.new()関数の引数に:passwordも渡す必要があった。

メモ

#01:Rubyでデータベースに接続しよう

  • 以前作成したmydbを使用(phpMyAdminで確認)
  • RubyでSQL文を実行するコード (sql.rb)
    • require 'mysql2'
      client = Mysql2::Client.new(:host => "localhost", :username => "root",  :password => "XXXX", :database => "mydb")
※ 上記のmysql2ライブラリのインストールとデータベースのパスワードを引数に与える必要がある。

#02:Sinatraで、データベースからデータを表示しよう

  • Sinatraでデータベースに接続する(sql.rb)
  • テンプレートファイル(views/index.erb)の作成
※あぁ〜、駄目だ〜😵 眠い〜😴 今日のところはここまでとしよう😓 

#03:Rubyでデータベースを使ってみよう1

  • SQL文の例
    • # 全てのデータを取り出す
      SELECT * FROM players;
    • # 一部のカラムだけ取得する
      SELECT name, level FROM players;
    • # 一部の行だけ取得する
      SELECT * FROM players WHERE level >= 7;
    • # 複数の条件を組み合わせる
      SELECT * FROM players WHERE level >= 7 AND job_id <> 6;
    • #条件指定とカラム選択を組み合わせる
      SELECT name, level FROM players WHERE level >= 7;
  • 変数で条件を指定する
    • SQL文中で、変数で条件を指定したいところに?を記述
    • *.execute(値あるいは変数):引数で値あるいは変数を指定する

#04:Rubyでデータベースを使ってみよう2

  • SQL文の例
    • # データを追加する
      INSERT INTO players(id, name,level,job_id) VALUES(11, '霧島1号', 1, 1)
    • # データを更新する
      UPDATE players SET level = 10 WHERE id = 11
    • # データを更新する。1増加
      UPDATE players SET level = level + 1 WHERE id = 12
    • # データを削除する
      DELETE FROM players WHERE id = 13
    • # 複数のデータを削除する
      DELETE FROM players WHERE id >= 11
※ 上記のINSERT文の場合、idも同時に設定してやらないと、デフォルトのid値はないって怒られるから、ちゃんと設定する必要がある。

#05:Rubyでテーブルを連結してデータを取り出す

  • SQL文の例
    • # テーブルを結合して表示する(左結合)
      SELECT * FROM players LEFT JOIN jobs ON jobs.id = players.job_id
    • # テーブルを結合して表示する(右結合)
      SELECT * FROM players RIGHT JOIN jobs ON jobs.id = players.job_id

#06:データをtableタグで表示する

  • テーブルを連結して、テーブルタグで表示する
    • sql.rbのSQL文の修正
    • views/index.erbにtableタグを追加

#07:特定のプレイヤーを表示する

  • sql.rbをplayers_index.rbに改名して編集
    • get '/show/:id' do

#08:特定のプレイヤーの詳細画面を作る

  • players_index.rbを編集
  • views/profile.erb テンプレートの作成

認定証

他の言語のWebフレームワークでもそうだったけど、
やっぱりSQL文を記述するのではなく、
直接その言語でデータベースを操作する方法を次のレッスンでは学ぶようだ。


学習ステータス




paizaラーニング『Webアプリ開発入門 Sinatra編2:Rubyでフォーム処理の基本を身に付けよう (全7回)』を受講してみた

2021-03-12 00:14:24 | paiza

『Webアプリ開発入門 Sinatra編2:Rubyでフォーム処理の基本を身に付けよう (全7回)』


新たなレッスンを始めるには、遅い時間になっちゃった😔 

というのも、買って五ヶ月くらいのFire HD 10の電源が入らなくなったから、
色々ググって試してみたものの解決せず、
最終的にはAmazonのチャットで返品対応をしてもらうことになって、
結構時間が掛かってしまったからな😖 

まぁそれは日記として別に記録しておこう。

どうやらこのレッスンは、前回のレッスンで作成したプロジェクトフォルダをベースに、追記していくみたいだから、
git cloneでクローニングしとこう。

lesson02としてbranchも作っとくかな?
でも結局gitで管理するなら、そもそもクローニングの必要もないのかな?
今はレッスンごとにフォルダを分けてプログラミングしてっけど。
ブランチで分けるなら、フォルダで分ける必要もないかな?
そもそもブランチで分ける必要もないのか?

どう管理していくのがいいんだろう?
もっとなんか効率的な管理方法ないものか?

メモ

#01:フォーム処理の基本を理解しよう

  • 概要の説明

#02:投稿フォームを作ろう

  • GETとPOSTの話
  • form.rbとviews/form.erbの作成

#03:投稿したデータを表示しよう

  • Sinatraで、GETメソッドとPOSTメソッドを処理する
    • get '/' do
       # GETメソッドの処理
       erb :form
      end
    • post '/' do
       # POSTメソッドの処理
       erb :form
      end
  • postメソッドの追加
    mywork/form.rb
    • post '/' do
  • views/form.erbの修正
    • <p><%= @article %> <%= @name %></p>

#04:Sinatraで前処理を行おう

  • データの共有
    • beforeメソッドを使って、メソッド間でデータと処理を共有する。

#05:具体例:フォームで、RPGの戦闘シーンの作ろう

  • battle.rbの作成
  • views/battle.erbの作成

#06:具体例:1行掲示板を作ろう - 投稿したデータを表示する

  • bbs.rbの作成
    • File.open("articles.txt", "r") do |f|
       @articles = f.read.split("\n")
      end
  • views/bbs.erbの作成

#07:具体例:1行掲示板を作ろう - 投稿をファイルに保存する

  • ファイルの追加書き込み:bbs.rb
    • openメソッドの第2引数を「"a"」とすると、テキストファイルの最後に追加書き込みする。
  • views/result.erbの作成

認定証

あ〜全然進まない(ってまた書いてる気がする😅
結局、受講し始めてから4日たってる。
まぁ色々他のことをしてたからしょうが無いんだけど、
時間がないなんて、単なる言い訳だよな〜😩 


学習ステータス