りゅうじの学習blog

学習したことをアウトプットしていきます。

2021年8月30日 パーフェクト Ruby on Rails 次回1-4scaffoldを使ってRailsでの開発を体験しよう

1-4-1

% ls -1FA db/migrate

lsコマンド : ファイルやディレクトリの情報を表示することができます。 ls -1FA db/migrateの分解 ・・・ 1 = ハードリンクの数(ハードリンクはファイルのあだ名のことです。) ・・・  F = 名前の後ろにファイル識別子を付ける ・・・ A = カレントディレクトリ(.)と親ディレクトリ(..)以外のピリオド始まりのファイルやフォルダも表示されるようになります。                aをつけるとカレントディレクトリ(.)と親ディレクトリ(..)も表示されます。

--skip-action-cable?🤔

フロントのWebSocketとバックエンドのRails周りをシームレスに統合する、フルスタックなフレームワーク。つまり?…
ユーザーが任意のタイミングで通信を開始した時にフロントとバック(Rails部分)の繋ぎ目をなくす役割。それが無いと何の影響が出るのかわからない。

Action Cableとは

Action Cableとは双方向通信を低コストで行うために、WebSocketsとRailsをつなぎ目がないくらい、自然な感じで統合するためのフレームワークという認識でOKです。

Action Cableを利用することで、たとえばリアルタイムで更新されるチャット機能を実装することができます。

3ウェイハンドシェイク(web技術の基本P61)での1つ目のコネクションの確立を行ったら、そのまま繋いだままにしておく事ができます。なのでリアルタイムのやり取りにおけるチャット機能で用いると良さそうです。

WebSocketってそもそもなに??

WebSocketはXMLHttpRequest(WebサーバーとHTTP通信を行うためのAPI)の欠点を解決する技術として開発された。

TCP/IPプロトコル通信とは

ネットワークインターフェイス層(1層)、インターネット層(2層)、トランスポート層(3層)、アプリケーション層(4層)で構成され、機器やOSが異なっても共通のプロトコルを用いて通信を成立させることができるものです。

各層の役割

ネットワークインターフェイス層(Layer1)

  • 同一のネットワーク内でデータを転送すること。有線のイーサネット無線LANWi-Fiを組み合わせることでローカルネットワークを構築を可能にする。
  • 端的にいうと「データを共有する始まりの場所

    インターネット層(Layer2)

  • 多数のネットワーク同士をルータを用いることでネットワーク間でデータを転送を行います。これをルーティングと呼びます。
  • 端的にいうと「データを色々な所に送る場所

    トランスポート層(Layer3)

  • パソコンやスマートフォンでネットワークを介した複数のアプリケーションを普段使う中で、適切なアプリケーションに流れているデータを送る役割をはたします。
  • 端的にいうと「データの目的地、住所を示す場所

    アプリケーション層(Layer4)

  • アプリケーションで扱うデータのフォーマットや手順を決める役割を果たします。
  • 端的にいうと「データを人間が見てわかるように変換してくれる所

イーサネットとは

イーサネットというのは、パソコンなどの機器を有線接続する際の通信規格の一つです。 「規格」なので、有線接続のルールともいえます。 ... 「イーサネット対応機器」というのは一般的に、LANケーブルを差せるということです。 そのため、イーサネットとLANケーブルはほぼ同義と考えても問題ありません

1-4-2

rails dbconsoleコマンドライン上からデータベースの中身の確認や編集をすることができるコマンドです。(MySQLPostgreSQLSQLite、SQLite3といったデータベースでも利用可能) - .table : テーブル一覧の表示 - .schema テーブル名 : 指定したテーブル構成の確認

$ rails dbconsole
SQLite version 3.32.3 2020-06-18 14:16:19
Enter ".help" for usage hints.
# 作成したテーブル一覧を表示
sqlite> .table
ar_internal_metadata  bookmarks             schema_migrations   
boards                comments              users 
# usersテーブルの内容
sqlite> .schema users
CREATE TABLE IF NOT EXISTS "users" ("id" integer NOT NULL PRIMARY KEY, "email" varchar NOT NULL, 
"crypted_password" varchar DEFAULT NULL, "salt" varchar DEFAULT NULL, "created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL, "last_name" varchar NOT NULL, "first_name" varchar NOT NULL,
"avatar_image" varchar DEFAULT NULL, "reset_password_token" varchar DEFAULT NULL, 
"reset_password_token_expires_at" datetime DEFAULT NULL, "reset_password_email_sent_at" datetime DEFAULT NULL, 
"access_count_to_reset_password_page" integer DEFAULT 0, "role" integer DEFAULT 0 NOT NULL);
CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email");

rails db:migrate を実行すると、まず初めにschema_migrationテーブルを読みに行きます。実行されていないmigrationファイルを実行し、新たなmigration IDを付与します。migrate IDは日時(UTC)が入ります。

**20200514151200**_create_tasks.rb

参照

lsコマンドとオプションについて

https://qiita.com/chihiro/items/6e1404c41e1236a9efe1

WebSocketとAjaxの違いについて

https://teratail.com/questions/1037

TCP/IPとは

https://www.itmanage.co.jp/column/tcp-ip-protocol/

rails dbconsole(rails db)で利用できるコマンド

https://qiita.com/k-o-u/items/a9b5e5472ba8415dd1aa

2021年8月27日パーフェクト Ruby on Rails  1−3 Railsを始めよう!!

  • rails newしたときに使うrailsのバージョンをgem install rails -v 6.0.3でインストールできます。

bin とは

binstub

  • binディレクトリに用意されているファイルのことをbinstubと呼びます。それはbundle execをつけなくても実行できるファイルです。

  • ラッパースクリプトを動かすためのファイル。
    アプリケーションごとに、ファイルやコマンドを管理するために用います。

binディレクトリはサランラップ!!!!!!
rails newで作成したアプリケーションはbinディレクトリに包まれてるんやで!!!!

preloader(プリローダー)

(pre + load = 前もってロードしておくこと)bin/rails や bin/rake コマンドの2回目以降の起動時間が短縮されます。

CPU

 中央演算処理装置
 コンピュータにおける中心的な処理装置(プロセッサ)。コンピュータの頭脳に例え   られることが多い。

Springとは

 ギアの重い自転車を漕ぐ初動を軽くする為に、前もって漕いでくれている装置という   イメージと考えられます。
 binディレクトリ配下のコマンドを常に起動できる状態にしておくイメージです。
 二回目以降のbin/railsやbin/rakeコマンドの起動時間が短縮されます。

config ディレクト

 アプリケーションの設定ファイルや、アプリケーション起動時に必要な情報などを定   義する定義するディレクトリです。

rails runner

 Rakeタスクと同じようなものです。rails runnerはrakeタスクのようにnamespaceや   descなどをきちんと定義しないといけないといったお作法がないのである意味では書 きやすいです。rakeタスクは書き方や呼び出し方がRSpecに似ています。

 例えば、

  • 1日に一回実行する処理などはRakeタスクを使う方が最適です。(定期的)
  • データベースの準備段階など、画像などをスクレイピングして最初の1回のみ取得したい場合はrails runnerの方が最適です。(1回のみ)

【用語解説】
 バッチ・・・「一回分の処理」を表す英語batch。
 バッチ処理・・・大量の反復なデータジョブを実行する方法です。 コンピューティン グリソースが利用可能なときにデータを処理でき、ユーザー操作をほとんど/まったく伴いません。 バッチ処理では、ユーザーはデータを収集して保存し、「バッチウィンドウ」と呼ばれるイベント中にデータを処理します。

参考

 RailsでSpringを導入して開発する
 https://easyramble.com/install-spring-into-rails.html

 rails new するとできる bin ディレクトリまとめ
 https://qiita.com/ayasuda/items/7edcef9f9508d35cb3dd#そもそも論の-binstub

 binstubを理解する
 https://techracho.bpsinc.jp/hachi8833/2016_08_24/25037

 Railsでバッチを書く時によく使うrails runnerとrake taskの違い
 https://qiita.com/rllllho/items/672e336a03335cba6b34

8月23日 パーフェクトRails 1章(その1)

1-1-1

  • プロジェクトを新規登録する際、git init で作業を記録する場を構築します。
  • Ruby2.7とRails6.0の組み合わせは警告が発生する場合があります。

1-1-2

Rubygemsとは

RubyGemsは、Ruby言語用のパッケージ管理システムであり、ライブラリの配布用標準フォーマットを提供しています。gemを容易に管理できます。 $ rails _バージョン名_ -vと入力するとインストールしているバージョンの中から任意のバージョンを指定できます。

1-1-3

rakeタスク

実行したい内容をあらかじめ定義するもの。実行方法は時間指定でも手動でも関係ないです。(例:顔を洗う,歯を磨く,などがあります。) Linuxはmake == rubyはrake

rakeタスクの生成についての基本構文

desc 'rails, muzukashi'
task 'rails' do
    puts 'rails muzukashi'
end

desc・・・タスクの説明 task・・・タスク名称と実行内容

cronとwhenever

事前に定義したrakeタスクを時間という概念をもとに実行する機能のことです。 (例: 毎朝7:00に顔を洗う, 7:30に朝ご飯を食べるなどがあります。)

rakeコマンド

rakeタスクを実行するためのコマンド

1-1-4

bundleコマンドとは

gemパッケージの仕組みを利用してどのgemパッケージを使用してどのバージョンを使用しているのかを明示する仕組みです。

$ bundle execをつけるとGemfile.lockに書かれているバージョンのgemが動きます。ディレクトリで定義しているバージョンがつかわれます。$ bin$ bundle execは同じです。($ bundle exec$ bin の中に含まれるものというイメージです。)

bundlerでよく利用するサブコマンド

$ bundle install
 -> bundle iまたはbundleでも可
$ bundle update [ライブラリ名] -> バージョン更新
$ bundle list -> インストール済みのgemパッケージの一覧表示
$ bundle init -> Gemfileを生成。
$ bundle exec [コマンド名] -> Bundlerでインストール

$ bundle install--path vendor/bundleつける??付けなくともいいと思います。→ bundlerを使っているから!!!(書くことで家のドアに何重にも鍵をかけるイメージを持つとわかりやすいです。)

1-2 Railsの思想

CoC(Convention over Configuration)

設定より規約という意味です。 規約に従うことで関心ごとがシンプルになり、本来注力すべきビジネスロジックへ集中できるようになります。

DRY(Don't Repeat Yourself)

同じ事を繰り返さないという思想です。情報の重複をなくし、一つのことは一箇所だけに記述します。 DRY原則を守る事によって変更が生じた際に何箇所もコードを修正する事がなくなり、メンテナンス性が高まります。

REST(Representational State Transfer)

URL web上の住所 URN web上の名前 URI web上の住所 + web上の名前

自動テスト

デフォルトはMinitest。基本はRSpecを使用します。

アーキテクチャ

アーキテクチャ(木造建築)>フレームワーク(家の建て方)>ライブラリ(工具箱)>コンポーネント(材料、道具、部品)

参考

bundle install --path vendor/bundleについて

https://qiita.com/jnchito/items/99b1dbea1767a5095d85

フレームワークアーキテクチャの違い - Yahoo!知恵袋

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14158287509

技術負債の内容について - Qiita

https://qiita.com/erukiti/items/9cc7850250268582dde7

URIについて

https://ferret-plus.com/4637

bundle execについて

https://qiita.com/d0ne1s/items/fa2dafcee02e963fe997

Rakeタスクについて

https://pleiades.io/help/ruby/rake.html

肉さんNotion

https://www.notion.so/rake-cron-9f0512dd664d45238780512a8c304979#f9e3c558cd2343408eec8ffb0551bf85

個人開発サービスSurfTyping(サーフタイピング)リリース致しました。

surf-typing.herokuapp.com

 

腰椎椎間板ヘルニアで立てなくなり、休職したのが1年前でした。

病院内を車椅子で移動していた頃は絶望しかなかった。

端的に言えば、この事が原因で職もパートナーも失いました。

失った、、違いますね。自分から手放しました。

どちらの務めも全うできる自分ではないと感じたからです。

それから今の自分にできる事だけを考え、積み重ねてここまできました。

スクールに入学した頃は、治った!!と強がっていましたが実際は痛みがなくなったのは4月であり、

Progate・Railsチュートリアル・基礎編をやっていた頃は、腰の痛みと戦いながら勉強をしておりました。

毎日、リバビリと勉強の日々でした。

あれから1年後の今。

今回のリリースは自分にとってすごく意味があります。

このアプリは大好きなサーフィンとギター

そして、これまで自分が大切にしてきた考えや言葉を問題にしています。

具体的なものから抽象的なものまで様々ですが、どの言葉も自分にとって大切なものです。

それら全てを使っていただいた方に感じていただけるとは思っていません。

10人いらっしゃったら、誰か1人に刺さってもらえたらいい。

そんな気持ちで作りました。

このアプリを作れたのはたくさんの人に力を頂き、支えてもらったお陰です。

心から感謝しています。ありがとう。

 

よろしければ、使っていただき、SNS等でシェアをして頂けたら嬉しいです。

よろしくお願い致します。

helper_methodについて

コントローラで認可の設定での authorize(current_site)

ビューで

if current_site.main_images.present?

このように使っていたcurrent_sitehelper_method として宣言しているからビューでも使えるようになっています。

定義の仕方

def current_site
  @current_site ||= Site.first
end
helper_method :current_site

||演算子は、左から順に評価し、一番最初に真になったものを返す。

つまり

||= は左辺が存在しない(偽)の場合、右辺の値が代入される。

@current_site が存在しない場合 Site.first にが代入されるという事ですね。

これをhelper_method にすることで使い回せているわけです。

最後に

読んでいただいた方、ありがとうございました。

認可と認証の違い

学習中に出てくる認証認可。

ぼんやりわかっているだけで説明できないと感じたので今回調べました。

認証

通信の相手が誰(なに)であるかを確認すること。

純粋な認証はそれが完了したからといって、何かが許される話とは関係がない。

例えば、身分証明書。

身分証明書を提示した場合、そこに『りゅうじ』と書いてあったとしたら、目の前にいる人は『りゅうじさん』である事を認めると思います。この状態を認証という。

ログインで言えばEメールやパスワードで認証を行いますよね。ただこちらは純粋な認証ではなく認可に紐づいているものです。(基本そうです)

では認可とは何でしょう。

認可

とある特定の条件に対して、リソースアクセスの権限を与えること。

純粋な認可は、それがあるからといって身元が明らかになる話とは関係がない。

例えば、切符。

電車に乗る事を許されるが、自分が誰かは関係ない。

もし切符を誰かにもらったとしても、電車に乗る事ができる。委譲されても権限に問題はない。

これは認証に基づかない認可の事例です。

認証をせずに認可だけを受けられると事はこのようにあるわけです。逆はどうでしょう。

認証したのに認可しない場合はあるか

先ほど、基本そうですと言いましたが、認可を求めて認証するわけですから、基本紐づいているものです。

Eメールやパスワードで本人確認しておいて(ここまでが認証)、ログインの権限(認可)を与えないなんてありえないですよね。

ただ、基本そうだと言いましたが細かく言うとありえます。

例えば、身分証明書でTSUTAYAのカードを作りました。身分証明書だけではレンタルできませんよね?これは認証だけされています。

TSUTAYAカードは身分証明書に基づいて認可されているのでこちらを持っていないとレンタルできません。

この状況を身分証明書の発行機関は感知していないわけです。状況を説明すると当たり前な話ですが、認証だけしていて認可はされていない状態であると言えます。

最後に

読んでいただいた方、ありがとうございました。

【jQuery】 $(document).ready

 

$(document).ready(function()

HTMLの読み込みが終わったら function()の後の処理を実行するコード

$(document).ready(function(){
  処理
});

JSはHTMLが完全に読み込まれなていない状態で処理を実行すると正しく動作しないため、readyを使う必要がある。

最後に

読んでいただいた方、ありがとうございました。