Railsチュートリアルメモ
Railsを通してWebアプリ知識を広げたい。
Railsである理由
・日本語の情報が多い
・日本ではかなりメジャーなフレームワーク
学びたいこと
・SpringDataJPAやEntitiyFramework以外のORマッパーを使ってみたい
・Railsの認証はどういう作りになっているのか知りたい
・Railsの文化?のようなものに触れてみたい
目標
・Rubyの基礎文法をサラッと勉強
・Railsチュートリアルをサラッと通す
・Railsの認証について学ぶ
・RailsのORマッパーについて学ぶ
・簡単な認証付きCRUDアプリを作る
・学んだことを記事にまとめる
Rubyの基礎文法はサラッと一通り勉強した。
private,protectedあたりが分かりにくいなと感じた。
ミックスインは便利そうだと思った。
ビルドが不要なのは地味に便利かも。
■今の状況
Windows10にUbuntuを入れて、UbuntuにRubyをインストール済み。
Ubuntuからgithubにアクセスできるようにしている。
Ubuntuから「code .」でvscodeを開けるようにしている。
■次にすること
「第1章ゼロからデプロイまで」を進める。
ls -a ~ | grep gem
と打っても何もヒットしない。
.gemrcは通常、ホームディレクトリ配下にあるらしい。
sudo apt-get install ruby-dev
sudo apt-get install build-essential
sudo gem install rails -v 7.0.4.3
よく分からんけど、railsインストールするときにruby-devとbuild-essentialが必要だった。
Railsをインストールできた!
Bundlerのインストール
Bundlerはgemのパッケージマネージャみたいなものらしい。
sudo gem install bundler -v 2.5.6
sudo rails _7.0.4.3_ new rails_hello
を実行したらエラーが出た。
Installing psych 5.1.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /var/lib/gems/3.0.0/gems/psych-5.1.2/ext/psych
/usr/bin/ruby3.0 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20240603-7163-sojfkb.rb extconf.rb
checking for yaml.h... no
yaml.h not found
sudo apt-get install libyaml-dev
を実行した後だと
sudo rails _7.0.4.3_ new rails_hello
に成功したっぽい。。
Rubyにlibyamlが同梱されなくなって、Railsがそれに対応してないっぽい?
code .
でrailsプロジェクトのフォルダを開いてGemfileを編集しようとしたらパーミッションエラーになった。
Failed to save 'Gemfile': Unable to write file 'vscode-remote://wsl+ubuntu-22.04/home/mine/rails-practice/rails_hello/Gemfile' (NoPermissions (FileSystemError): Error: EACCES: permission denied, open '/home/mine/rails-practice/rails_hello/Gemfile')
sudo code .
だとcommand not foundになった。
mine@mine-t:~/rails-practice/rails_hello$ sudo code .
sudo: code: command not found
mine@mine-t:~/rails-practice/rails_hello$ which code
/mnt/c/Users/tomon/AppData/Local/Programs/Microsoft VS Code/bin/code
ふむ。。
sudo chown -R mine:mine /home/mine/rails-practice/rails_hello
これで解決した。
sudo: スーパーユーザー(root)の権限でコマンドを実行するためのコマンドです。これにより、通常のユーザーでは実行できない操作が可能になります。
chown: "change owner" の略で、ファイルやディレクトリの所有者とグループを変更するためのコマンドです。
-R: "recursive" の略で、指定したディレクトリとそのすべてのサブディレクトリおよびファイルに対して操作を再帰的に適用します。
mine:mine: 新しい所有者とグループを指定します。前半の mine は所有者、後半の mine はグループを意味します。
Gemfileを編集して bundle install
mine@mine-t:~/rails-practice/rails_hello$ bundle install
Your Ruby version is 3.0.2, but your Gemfile specified 3.2.3
Oh...
上記の記事の方法でruby envをインストールできた。
手順が多い。。
わー
rbenv install 3.2.3
rbenv global 3.2.3
source ~/.bashrc
ruby --version
rails_helloプロジェクト作成時のRubyのバージョンが3.0.2だったのでrails_helloプロジェクトを削除
なんか消えてたのでrailsをインストールしなおした。
gem install rails -v 7.0.4.3
Gemfileを編集してbundle install成功。。
rails server
ブラウザでhttp://127.0.0.1:3000/
にアクセスしてrailsアプリが動いていることを確認できた!
次はここから
2章の途中まで進めた。
3章の途中
3章の途中
3章終わって次4章
4章の途中
4章の途中
4章終わった
5章の途中
5章の途中
WSL2上のvoscodeにインストールした拡張や、WindowsにインストールしたDB Browser(SQLite)では、WSL2上のsqliteファイルにアクセスできなかった。
WSL2にDB Browserをインストールしてみるかなー。
参考
#sqlitebrowserをWSL2にインストール
sudo apt install sqlitebrowser -y
#sqlitebrowserを起動
sqlitebrowser
WSL2から起動したsqlitebrowserだとWSL2上のsqliteファイルにアクセスできた!
6章の途中
一般に今後TDDを行う場合は、エディタを2つのペインに分けて、テストコードを左のペイン、アプリケーションのコードを右のペインに表示しておくと何かと便利です。
ほとんどのデータベースでは文字列の上限を255としている
通常、メールアドレスでは大文字小文字が区別されません。すなわち、foo@bar.comはFOO@BAR.COMやFoO@BAr.coMと書いても扱いは同じです。したがって、メールアドレスの検証ではこのような場合も考慮する必要があります
PostgreSQLはデフォルトでは大文字と小文字を区別しないらしいので、そこは大丈夫。
区別するデータベースを使う場合はActive Recordのコールバック(callback)メソッドで、登録時に小文字に変換する処理を行うらしい。
メソッドの調べ方
ri String#downcase!
結果
= String#downcase!
(from ruby core)
------------------------------------------------------------------------
downcase!(*options) -> self or nil
------------------------------------------------------------------------
Downcases the characters in self; returns self if any changes were made,
nil otherwise:
s = 'Hello World!' # => "Hello World!"
s.downcase! # => "hello world!"
s # => "hello world!"
s.downcase! # => nil
The casing may be affected by the given options; see {Case
Mapping}[rdoc-ref:case_mapping.rdoc].
Related: String#downcase, String#upcase, String#upcase!.
RailsはRailsというオブジェクトを持っている。
デフォルトではdevelopment、test、productionの3つの環境がある。
irb(main):001> Rails.env
=> "development"
環境を指定してRailsサーバーを実行することができる。
rails server --environment production
$ rails console
>> user = User.first
ブルートフォース攻撃・・・総当たり攻撃
マスアサインメント
ストロングパラメータ
vscodeでのerbの背景色がおかしい。配色テーマをDark+に変更すればよいらしい。
vscodeの配色テーマ変更方法
ファイル→ユーザ設定→テーマ→配色テーマ→→→ダメだった。。
erbという拡張を入れたらerbの配色がきれいになった。
$ rails console
User.find_by(email: "example@railstutorial.org")
Rubyではnilとfalse以外のすべてのオブジェクトは、真偽値ではtrueになる
Rubyの慣習では、真偽値を返すメソッドには末尾に?を付けるのが一般的です。しかし、authenticateメソッドは特別です。このメソッドは、与えられたパスワードがユーザーのパスワードと一致するかを確認するためのものであり、その設計上、trueまたはfalseではなく、ユーザーオブジェクトまたはfalseを返します。
セッションハイジャック攻撃とは、攻撃者があるユーザーのセッションidのコピーを手に入れて、そのユーザーとしてログインするという攻撃方法です
<meta name="viewport" content="width=device-width, initial-scale=1">
width=device-widthを指定することで、画面の幅をデバイスの幅に設定してくれる。
このmetaタグを設定しない場合、デスクトップブラウザではデバイスの幅に合わせて画面の幅を調整してくれるが、モバイル端末のブラウザでは980pxくらいの幅になってしまう。
そのため、このmetaタグを設定して、画面の幅をデバイスの幅に一致させる必要がある。
クッキーの有効期限がSessionとなっている。
これは、ブラウザが閉じられるまでがクッキーの有効期限ということらしい。
vscodeの複数行コメントアウト・・・ctrl+/