アウトプットを頑張る

初めてのプログラミング学習期間中の記録と、日頃読んでいる本をメモのアウトプットをがんばります。

【プログラミング学習】Ruby on Rails ユーザーログイン時の表示切り替え

■プログラミング学習

f:id:yuma6128:20210725072827j:plain

◎user_signed_in? メソッド

deviseのメソッドで、ユーザーがログインしているか否かを判断できる。
if文と論理演算子を用いて、現在ログインしているユーザーかどうかで表示を変える。
``` 例

<% if user_signed_in? $$ current_user.id == tweet.user_id %>
〜省略〜
<% end %> 

```
と記述した場合、現在ログインしているユーザーとツイートを投稿しているユーザーが同じかどうか判断する。

◎論理演算子 &&

if文中に複数の条件を定義するときに使用をする。
条件A && 条件Bとなっていた場合は、条件Aと条件Bがともに真の場合のみtrueを返し、その後の処理が実行される。
条件Aと条件Bのどちらか、または双方が偽であった場合、falseが返される。

 

■読書

f:id:yuma6128:20210710180648j:plain

知的戦闘力を高める 独学の技法 著山口 周 氏をまだ読書中です。
メモの大事さ、そして結果としては「問い」を作るために独学しているという言葉が納得しました。
自分の感情の動き似た敷いて特に怒りというネガティブな感情を感じたときに、なぜそう思ったのかをメモし、気付きを得る。
これは反面的に、怒りを感じたということは自分の大切にしていることが蔑ろにされたこと、そしてそこから大切にしている価値観を改めて言語化していくというふうに思いました。
常識を疑うことの大切さ、本書の例で金利の話が出ていました。
当たり前に感じているものであっても、場所や時代が違えばまったく違うものであるというのは、今当たり前に使えているこのインターネットなども10年後には、また違うルールになっているのかもしれないなど、すべてを疑っても仕方がないので、その疑うべき対象も絞るトレーニングをしながら本書を読むことを進めていきます。


【プログラミング学習】Ruby on Rails マイページ機能

 

■プログラミング学習f:id:yuma6128:20210829071916j:plain

current_userメソッド

Gemのdeviseを導入していると使用できるメソッドで、現在ログインしているユーザーの情報を取得ができます。


mergeメソッド

ハッシュを統合させるときに使用するRubyのメソッドです。
たとえば、tweetの情報を持つハッシュと、user_idを持つハッシュを結合、保存する場合は下記のような記述する。
```
tweet = {name: "たなか" ,text:"こんにちは"}
uid = {user_id:"1"}
tweet.merge(uid)
=> {:name=>"たなか",:text=>"こんにちは",:user_id=>1}
```

アソシエーション

複数のモデルから情報を必要とする場合は、テーブル同士を関連付けし、イップのモデルから、もう一方のモデルにアクセス出来るようにすることをアソシエーションという。
アソシエーションはモデルに定義をし、メソッドは下記になります。
has_many メソッド
Userモデル視点で考えたときに、あるユーザーが作成した投稿は複数個ある状態で、つまり一人のユーザーは複数の投稿を持っている。
このような場合は、has_manyメソッドを使用する。
```
has_many :tweets
```

belongs_toメソッド

一つの投稿に対しては、一人のユーザーが投稿したものになり、一人のユーザーに所属する。
このような場合は、belongs toメソッドを使用する。
```
belongs_to :user
```
※ アソシエーションでbelongs_toを指定した場合、相手のモデルでバリデーションが設定されているため、presence:trueのバリデーションを設ける必要はない。

 

N +1 問題

N+1問題とは、アソシエーションを利用した場合に限り、データーベースへのアクセス回数が多くなってしまう問題です。
Tweet.allなどでデータを取得する場合は、1度のアクセスで完了します。
しかし、ツイートが複数存在し、それぞれにユーザー名を表示するケースを考えると
tweetsに関連するusersの情報の取得に、ツイート数と同じ回数のアクセスが必要になります。1億ツイートあると、1億回以上アクセスすることに。
これを解消するために、includesメソッドを使用します。

includesメソッド

includesメソッドは、引数に指定された関連モデルを1度のアクセスでまとめて取得できます。
includes(:紐づくモデル)

 

■読書

f:id:yuma6128:20210811073847j:plain

知的戦闘力を高める 独学の技法 著山口 周 氏を、読んでいます。
色々な本を読んでいても、なかなか自分の思ったようなアウトプットが出来ていないと感じており、本書を手にしました。
まだ途中のため、また次回読み終えたときにも同じようなことを書くと思います。

個人的に、覚えることはあまり重要ではなく(外にためておく、ノートやデジタルに)それよりも、受け取った情報をいかに具体⇔抽象し、抽象化した上で、今解決したいことに使えないかを結びつけるといった方法で学んでいくというのが自分には足りていないと感じました。
本を読んで、それを受け入れて使うではなく、自分なりの解釈として受け取り、差し出すようなことを続けていきたいと思います。

(いろんなところにメモとっているので、それもどこかでまとめていく必要があるのかも)

【プログラミング学習】Ruby on Rails ログイン機能

■プログラミング学習

f:id:yuma6128:20210825201906j:plain

◎ログイン機能

Railsのログイン機能では"devise"というGemを使用します。
ユーザー管理機能を簡単に実装が出来るGemになっていて、多くのRailsアプリケーションサービスでも使用されています。
使用方法 Gemfileの一番下に下記を追記する
``` 
gem 'devise'

```
追記後、ディレクトリを確認の上、
bundle installを実行する。

deviseを使用するために、Gemのインストール後に、devise専用のコマンドで設定ファイルを作成する。

rails g devise:install コマンド

deviseの「設定関連に使用するファイル」を生成するコマンド。
bundle install後に実行をする。

 

Userモデルの作成
```

rails g devise user
```

こちらのコマンド実行後、
routesファイルに下記記述があることの確認
```

devise_for :users

```

とmigrateファイルにて、記述を確認し、

マイグレーションを実行する。

 

ビューファイルの作成

devise用のビューを生成する。

```

rails g devise:views

```

 

スネークケースとキャメルケース

ファイル名やクラス名などに使われている大文字や小文字の使用のルールを整理します。
キャメルケース :先頭が小文字で、単語の区切りを大文字で表す。
(例:adminUserCommentCreator)
アッパーキャメルケース:キャメルケースの一つ、先頭から単語の区切りを大文字で表す。
(例:AdminUserCommentCreator)

スネークケース:単語の区切りをアンダースコアで表す
(例:admin_user_comment_creator)

 

クラス名:アッパーキャメルケース

メソッド名:スネークケース

変数名:スネークケース

 

バイス パラメーター サニタイザーメソッド

通常のリクエスの場合、コントローラーにストロングパラメーターを記述し、受け取れるパラメーターを制限している。devise側でも同様の処理をしているが、Gem内に記述がされており、編集することが出来ない。
そのため、deviseのストロングパラメーターを取得するために、
バイス パラメーター サニタイザーメソッド」を使用する。
# メソッド名は慣習のためため自由につけてもよい
```
private
def configure_permitted_parameters 
 devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
```
第1引数 処理名
:sign_in  :サインインの処理を行う時
:sign_up :サインアップの処理を行う時
:account_update : アカウント情報更新の処理を行う時
こちらのコードを記述するのは、application_controller.rbファイルに記述する。

記述例
```

class ApplicationController < ActionController::Base
   before_action :configure_permitted_parameters, if: :devise_controller?

 private
 def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
 end
end
```
if文でもしdeviseに関するコントローラーの処理であれば、という形でメソッドを実行するように設定をします。

■読書

f:id:yuma6128:20210710180648j:plain

◎妄想する頭 思考する手 暦本純一 氏(著)を先日、読み終えました。
とても読みやすく全体的としてはアイディアをどう生み出していくか、
1行で書ききるところから、スタートし、まず試すという姿勢の大切さを本書から受け取りました。
またジャンルは、妄想のもとではない「ディープラーニング」を研究したいなどではなく、よく具体的にその研究をしていった結果に、出てくるなにかおもしろいものということを突き詰めていくことの大切さ。
事例で面白いなと思ったのが、IBMの音声タイプライターの試作機の話で、先にテクノロジーで創るではなく、被験者には「音声で入力出来るタイプライターです」と説明し、ただ実際はマイクに向かってしゃべっている内容を別室で人が打っていくといったもので、実際そういった機能があったら人はどう使うのか、いい間違えたときの削除の仕方や、あーえーとなどのケバ取りなどを実際どう音声で指示するかなどの実験が出来たという内容で、たしかにアイディアがあって、そのなにかサービスを作る前にこういった実験は出来た方が楽しいなと感じた1冊でした。

【プログラミング学習】Ruby on Rails resourcesメソッド

■プログラミング学習

f:id:yuma6128:20210821202045j:plain

データベース
RDB(リレーショナル・データベース)
 表形式でデータを管理するデータベースです。
 行(レコード)と列(カラムを持っている。

RDBMS(リレーショナル・データベース・マネジメント・システム)
 RDBを使用する際に、管理するシステムを言う。

MySQL (マイエスキューエル)
 上記、RDBMSの1つ、多くの企業で使われている。
 「拡張機能が多い」「小規模から大規模のデータも取り扱いが可能」「柔軟性が高い」

 

RubyGems

Rubyのライブラリを管理するシステム。
Rubyのライブラリのほとんどは、RubyGemsに集められている。

rubygems.org


◎Gem

ライブラリのそれぞれをGem(ジェム)とよび、世界中のプログラマによって形成されるRubyコミュニティで管理されている。

CRUD(クラッド)
アプリケーションのデータの取り扱いの基本処理をまとめてCRUD(クラッド)と呼ぶ。
Create (生成)
Read(読み取り)
Update(更新)
Delete(削除)

 

7つのアクション

CRUDを実現するためには、それぞれの処理を記述する必要がある。
Ruby on Railsには、アクションの設定が慣習的に決められており、下記のアクションが存在する。

index (一覧表示)

show (詳細表示)

new (生成)

create (編集)

update (更新)

destory (削除)

これらの7つのアクションのルーティングは、resourcesメソッドを使用すると一度に設定が可能。

例:resourcesの引数に「:tweets」というシンボルを指定すると「/tweets」のパスに対応するルーティングが生成される。
```
Rails.application/routes/draw do
 resoureces :tweets

end

```
onlyオプション
オプションとして、onlyを加えると、指定したアクションのみのルーティングを自動生成することが出来る。
オプション: :追加したいアクション

``` indexアクションのみ設定した場合
Rails.application/routes/draw do
 resoureces :tweets , only: :index

end

```

 ◎レイアウトテンプレート

アプリケーションのビューファイルの共通部分をまとめることができます。
headの情報やヘッダー、フッターなどすべてのビューで共通となる部分を記述しておくことで、各テンプレートファイルは個別の見た目を記述するだけになる。
Railsの場合は、application.html.erbというファイルがレイアウトテンプレートになる。

yieldメソッド

レイアウトテンプレートに、各テンプレートファイルを展開するためのメソッドです。
yieldを記述することで、indexアクションの場合はindex.html.erbの内容がyield記述部分に展開される。


``` #例 application.html.erb
ヘッダー
<%= yield %> ←ここの各ページのビューが入る
フッター
```
CSSファイル適用

RailsにおけるCSSファイルの読み込み方法は、「stylesheet_link_tag」メソッドを使用する。

app/assets/stylesheets/ ディレクトリに配置して、application.html.erb 内の記述で読み込みをする。
``` 例 application.cssファイルを読み込む場合
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

```

application.cssファイル

Railsにはじめから用意されている、CSSファイルをまとめるためのファイルです。
マニフェストファイルとも呼ばれます。
アプリケーション全体に適用するCSSを指定することが出来る。
*= のような特殊な記法に続けて、他のCSSファイルを指定すると、複数のCSSファイルをまとめて読み込むことが出来る。

require_tree

application.css の記述の中で *= require_tree .という記述があり、この部分で
ディレクトリ以下のCSSファイルをアルファベット順にすべて読み込むという機能を持っている。
require_tree. の.(ドット)部分はカレントディレクトリを表すもので、app/assets/stylesheets/ ディレクトリにあるCSSファイルは、すべてapplication.cssに読み込まれていく。

■読書

f:id:yuma6128:20210710180648j:plain

モチベーション革命 稼ぐために働きたくない世代の解体書  尾原和啓 (著)
アクティブ・ブック・ダイアローグという方法で初めて読みました。
ABDに関しましては、下記公式サイトに詳しい說明が書いています。
ざっくりいうと、複数人で1冊の本の読む場所を分け、自分の読んだパートを說明・プレゼンするといった読み方でして、他の方の部分と合わせて最終的に1冊読んだ内容とアウトプットを意識し、実践して読むことで通常の読書よりも良い体験が得られるものです。

www.abd-abd.com


感想としては、モチベーションの捉え方で世代によって大きく分かれている。
30代前後で、物がなかった時代の人たちは「物を満たしたい」などを原動力に働いていくことが出来たが、物が満たされている時代に生まれて仕事をしている世代の人は「なんのために頑張るか」といったことを軸で働いており、「乾けない世代」として捉えています。
また、本書の中ではテクノロジーの発展、特に人工知能の発展によって「知識」「頭脳」が中心の産業から、「嗜好」、個人の好きが価値になっていく時代に変わっていくとも書かれていて、その嗜好を突き詰めるのは「乾けない世代」が得意分野の部分であると說明されています。
「好き」を突き詰めていき、「生きがい」にまで育てていくことが重要である。

 



 

 

【プログラミング学習】 Ruby on Rails フォームの実装~データ送信

■プログラミング学習

f:id:yuma6128:20210818071318j:plain

フォームの実装[:contents]

投稿機能実装の考えかたとして下記の段階で整理して考える
<新規投稿ページへ遷移 newアクション
リクエスト → 新規投稿ページ

<新規投稿ページ投稿作業 createアクション
入力したものを投稿 → サーバーに情報を登録 

新規投稿ページへの遷移 newアクション
・routes.rbにnewアクションで、新規投稿ページへのルーティングを設定

・コントローラーにnewのアクション定義

・ビューを作成する

ヘルパーメソッド
Railsアプリケーションは、HTMLタグを出現させたり、テキストを加工するためにヘルパーメソッドを使用する。
【はじめから用意されているメソッド例】

form_with 投稿ページなどにおけるフォームの実装

link_to    リンクの実装

ヘルパーメソッドを使用する理由としては、下記の2点の理由から使用をする。

  1. パスの指定やRubyno埋め込みなどの記述がシンプルになるため
  2. セキュリティ上の問題を解消するため

form_withの記述方法

```
<%= form_with url:"/posts",method: :post,local:true do |form| %>
〜〜フォームの記述〜〜
end
```
オプション名
url:"/posts"  フォームの情報を送るリクエストのパスを指定
method: :post フォームの尾情報を送るリクエストのHTTPメソッドを指定。オプションの初期値は:postなので、ポストメソッドを指定する場合は省略可能
local:true リモート送信を無効にするかどうかを指定。trueにすると無効になる。

フォームの記述例

<%= form.text_field :content %>
<%= form.submit '投稿する'%>

 

link_toメソッド

リンクを作成するためのヘルパーメソッドです。
・リンク先をURLで指定する場合

<%= link_to 'リンクに表示する文字', 'リンク先のURL' %>

・リンク先をパスで指定する場合

<%= link_to 'リンクに表示する文字', 'パス' , method: :HTTPメソッド %>

 

 ◎新規投稿ページ投稿作業 createアクション

データが投稿されて、テーブルに登録する際の実装。
HTTPメソッドはPOST

・routes.rbにcreateアクション

・コントローラーにcreateのアクション定義

・投稿完了のビューを作成

 

データの流れ

ブラウザからユーザーがフォームを送信したとき、サーバーに情報を渡すためリクエストにはパラメーターを含める事ができる。

 

パラメーター

リクエストに含まれてサーバーの外部から渡されるデータのことです。
URLに含めるパラメーターやフォームから送信されるパラメーターがある。
Railsのコントローラーにたどり着くパラメーターは
paramsに格納されて、送信される。

 

params (パラムス)

送られてきたパラメーターを箱に中に格納したようなもの。
フォームで送信されたデータもparamsの中に格納されてコントローラーで受け取られる。

text_fieldの後に記載されたキーでparamsに格納されている。
フォームで入力された情報の値は、params[:キー名]として取り出すことが出来る。

ex.

  • 「content」というキーで「こんにちは」とデータをフォームで送信。
  • paramsには{content:こんにちは}といったハッシュのような構造で格納される。
  • コントローラーでparams[:content]と記述すると「こんにちは」というデータを取り出せる。

createメソッド

モデルが使用できるActiveRecordメソッドの一つです。
```

モデル.create(カラム名:値)

```

 

ex.postテーブルのcontentというカラム名params[:content]の情報を保存
```
Post.create(content:params[:content]

 ```

フォームからデータ実装のところまでの学習部分について
今振り返ってみる一つひとつ見ていくと、なるほどと思いながら
new → createという流れが個人的にはわかってきたと感じた。
これはもう少しWebアプリケーションに触れていけば、身につくところと思う。

読書 

f:id:yuma6128:20210710180648j:plain

 

佐宗 邦威氏の「ひとりの妄想で未来は変わる VISION DRIVEN INNOVATION」を読みました。
イノベーションの実装のために必要な流れや事例もなどもあり、読み応えがありました。
冒頭の「すべてはモヤモヤから始まった」という一文も今の自分にはとても刺さり、
読み進めているうちに、このモヤモヤが晴れていくのではと期待していました。
結論すべては晴れ渡るわけではないですが、進むべき道標にはなったような気がします。
イノベーションは”構想”から”実装”の時代になっており、自分ごと化していないひとにとってはイノベーションを起こす必要は無いと思われている。
ビジョンドリブンを実践するためにも、社内にとどまらず外にも接点を持ち、ネットワークを広げていくこと、そしてそれをまた社内に持ってくるなど面に波及することの必要性が自分の中ではなるほどと改めて感じました。
理想を決め、現状とのギャップを考え、それを埋めていく。
もしかしたら当たり前のことなのかもしれないが、改めて理想を考え仲間を探し
一緒にそのギャップを埋めることに取り組んでいきたいと思う1冊でした。

【プログラミング学習】Ruby on Rails データ保存~データの表示

■プログラミング学習

f:id:yuma6128:20210815071710j:plain


rails cコマンド

コンソールを使ったデータの保存方法について說明していきます。
ターミナルから下記コマンドを実行します。
```
rails c
```

irbが起動して、Rubyコマンドが実行できるようになります。
ここでRailsアプリの変数やクラスの使用が可能です。

```
irb(main):001:0> ここに変数やクラス記述で使用可能
```

saveメソッド

モデルが使用できるインスタンスメソッドで、そのモデルが対応するテーブルにレコードを保存できます。
```
モデルのインタンス.save
```

ActiveRecordメソッド

モデルがテーブル操作に関して使用できるメソッドをまとめたものです。
下記、1例になります。

  1. all | テーブルのすべてのデータを取得する
  2. find | テーブルのレコードの内、ある一つのデータを取得する
  3. new | クラスのインスタンス(レコード)を生成する
  4. save | クラスのインスタンス(レコード)を保存する

◎allメソッド

モデルが使用できるActiveRecordメソッドの一つ。
すべてのデータを取得することができる。
.カラム名とつなげてしまうと、全体の中のどのカラムを参照していいか
わからずエラーになるため。
each を使用し、一つひとつ表示する処理を実行する。

例. Postモデルのすべてのデータを取得する
```

Post.all
```

 

◎findメソッド

モデルが使用できるActiveRecordメソッドの一つ。
メソッドの引数にモデルが対応するテーブルのレコードが持つidを記述して実行することで該当するidレコードを一つ取得します。
.カラム名をつなげると、特定のカラムも取り出しが可能。

例.Postモデルのid 1のレコードを取得
```

Post.find(1) 

```

データの取得から表示のところで、過去学んでいたときは混乱をしていました。
ただ、今こうして見返すとなるほどと思ったのと、あと実践のコードを書いていく
うちにロジックが整理できたため、この部分も理解が深まりました。
 

■読書

f:id:yuma6128:20210710180648j:plain

人間の土地 (新潮文庫サン=テグジュペリ (著), 堀口 大学 (翻訳)を読みました。
宮崎駿監督のコメントもあり、読書コミュニティの方からおすすめがあり、
読みました。
冒頭読んでいるとき難しいと感じていましたが、読み進めるうちに世界観というか
文章に惹きつけられ、そして砂漠での壮絶な体験はこちらも苦しくなるような切迫するように感じました。
とても熱い思いを受け取りました。

 

【プログラミング学習】Ruby on Rail データベースとテーブル

■プログラミング学習

f:id:yuma6128:20210811072008j:plain

MVCの中のモデル部分について、Webアプリケーションではデータが保存されていないと成り立たない。
データの管理役として、モデルが必要になる。
データベースにはデータの種類ごとの保存場所となるテーブルを用意し、
表形式のテーブルにおいて、行はレコード、列はカラムと表現をする。
情報はこのテーブルごとに整理がされており、それぞれモデルに対応をしている。

◎モデルの作成コマンド
```
rails g model モデル名
```
命名規則としては、単数形を使用すること。

マイグレーション
モデルをコマンドを実行するとdb/migrateディレクトリに、モデル名のついたファイルが生成されている。
その生成されたファイルを編集してそのモデルの中のテーブルを決める。
カラムの型を指定し、どんなデータが入るのかを設定する。

  1. integer  | 数値  金額、回数など
  2. string       | 文字(短文)  ユーザー名、メールアドレスなど
  3. text     |   文字(長文) 投稿文、説明文など
  4. boolean     | 真か偽か  はい・いいえの選択、合格、不合格のフラグなど
  5. datetime    | 日付と時刻 作成日時、更新日時など

テーブルに必要なカラムを入力し、データベースの変更のために
マイグレーションを実行するコマンド
```
rails db:migrate
```

マイグレーションの修正をしたい場合は、一度ロールバックコマンドの実行が必要。
個人的には一度migateを実行してしまうとロックがかかり、それを解除するのがロールバックのようなImageで考えていた。
ロールバックマイグレーションファイルの修正 →db:migrate で固める。
ロールバックを実行するコマンド
```
rails db:migrate:rollback
```

また現状のマイグレーションが実行済みかどうかを調べるコマンドもあり、
ステータスがup /downの状態を確認する。
upの状態では、そのファイルは実行されているため、修正や削除ができないため注意が必要。
up状態で削除すると、戻すのが大変だった記憶があります。
マイグレーションの状況を確認するコマンド
```
rails db:migrate:status
```

マイグレーションのところは、学習を進めていくとmigrateエラーが私の場合はよく起きていたため、よくmigrate:statusを実行して確認をし、4つ中上から2つ目のマイグレーションがdownしているなど、ステータスを確認しても「??」といことがあった。
ただ一つひとつロールバックしていく、downにしてからいらないマイグレーションファイルを削除するなどしていき、エラーとの戦いをしていきました。


■読書

f:id:yuma6128:20210811073847j:plain

「飲茶の「最強!」のニーチェ」を日曜日に読みました。
本書自体の說明でいうと、哲学者ニーチェについて、対話形式で說明をしていくという構成になっており、集中して読むと通勤の往復などで読める本になっています。
内容はニーチェの考えを順番に受け取っていくことができ、アウトラインを知るのにはとてもためになる本でした。
・価値観を与えられている、刷り込まれている自分がいる
・大いなる正午という言葉
今を大事に、そして子供心を忘れず楽しむ、それ自体が芸術のように感じられるそんな毎日を過ごしていきたいと思いました。