R6.2.14トレーニング日誌

【本日のトレーニングメニュー】

・ジョグ

・1kmインターバル✖️5本(R=300m)

・200mダッシュ✖️6本(レペティション)

 

【感想】

インターバルトレーニングでは、設定ペース4:10〜4:15を目標に走った。

しかし、途中ペースがキロ4:00になってしまったセットがあり、ランニングフォームやペースがコントロールできなかった。

ランニングではいかにフォームやペースの乱れをなくし一定ペースで走れるかが課題でとなっている。

 

ペースやフォームが一定ではない原因として、ピッチの乱れが考えられる。

ピッチが乱れることで、スピードもフォームも当然変わってしまう。

 

改善策として、メロノーム機能を活用してピッチを190設定で走るようにしたい。

 

200mダッシュにおいては、最後50mで毎回失速してしまっていた。

現在の能力に対してペースが速すぎたのかもしれない。

 

ラスト50mでは、臀部のあたりに乳酸が溜まる感覚を覚えてた。

おそらく、速筋繊維のミトコンドリア不足により酸素が十分にエネルギーに変換されていないのだと考える。

200mダッシュの目的は、乳酸をだし速筋繊維のミトコンドリアを増やすことである。

 

次回はペースは同じく全力で行い、最後まで走り切るようにしたい。

 

【明日のメニュー】

・ストレッチ

・勉強

 

today's diary

今日は、22時から自宅でタイタニックを見ました。

車に荷物を取りに行き、部屋に戻ると嫁さんと子供がTVを見ていました。

何を見ているの画面を覗き込むと「タイタニック」でした。

ちょうどタイタニック一番の見どころであるクライマックスシーン。

船首が沈み、船尾が空高く浮き上がり、ジャックとローズが船の手すりに必死に掴まっている。

他の乗客は、力つきどんどん水面に落下していく。

そんな中、ジャックはローズを励まし続ける。

本来なら自分の身を守るだけで精一杯の状況に対して、大切なパートナーの安否を常に考えるジャックの強い気持ちに頭が下がる思いである。

 

その後、残念ながらタイタニックは海へと沈んでしまった。

船とともに水中へ吸い込まれた二人であったが、お互いに着ていた救命胴衣を掴み離れないようにしていたが、激しい渦に二人はバラバラに離されてしまう。

やっとの思いで、ローズはジャックを見つけ出す。

ジャックは、ローズを木の板に乗せ、自身は板が沈まないように水中に浮かんでいる。

気温は0度、水温は低く、凍てつく寒さ。

体温はどんどん奪われていく。

終いにジャックは意識が遠のき、息を引き取る。

最後までジャックは自分の命を引き換えにローズを守り抜いた。

同じ男として、敬意を表する行為である。

 

一人の人を命をかけて守るその気持ちの強さを見習いたいと思いました。

エラー解決‼️ ActiveModel::UnknownAttributeError

今回の記事は、自分でWebアプリケーションを作成していて、本番環境でエラーが発生しました。
その解決、解決までの仮定を備忘録として書かせていただきます。

エラー発生時の状況

開発言語:Ruby
DB:My SQL
サーバー:Heroku

作成したWebアプリケーションの入力フォームに必要事項を入力し、内容を保存する為に画面上の「設定」ボタンをクリック。
画面が遷移したら、下記のエラー表示画面が発生。

Image from Gyazo

ターミナルからログを確認すると、

ActiveModel::UnknownAttributeError (unknown attribute 'comment' for Training.):

→Trainingモデルには、commentカラムはないよ

解決までの過程

原因の仮説

本番環境でのデータベースにcommentカラムがないため、保存ができず、エラーが発生してしまったのではないか?
アプリを作成している段階で、マイグレーションファイルのカラム名を変更をしているため、それが反映されていなかったと考えられる。

対応の仮説

最新のローカル環境でのデータベースの内容を本番環境でも反映させることにより、エラーが解決するのではないかと考えました。

実施内容

①Heroku上のデータベースの内容確認。
これは、以前の記事にも書いたの割愛させていただきます。

②ローカルのデータベースの内容をHerokuのデータベースにも反映させる。
〜手順〜 1:heroku上のマイグレーションファイルの状態を確認する。

Heroku run rails db:migrate:status

2:修正したいheroku上のマイグレーションファイルを”down”状態にする。

Heroku run rails db:migrate:rollback STEP=2

*今回は、2つマイグレーションファイルを修正したかったので、2つ前までのマイグレーションファイルをdown状態にするために"STEP=2"とさせていただきました。

3:マイグレーションファイルを修正し、Git Hubデスクトップでリモート側へプッシュする。 *今回の場合、ローカル環境では、修正済みであり、本番環境への反映だけがされていなかったので、割愛させていただきます。

4:herokuでマイグレーションを実行する。

Heroku run rails db:migrate:status

これにより、本番環境のマイグレーションファイルも更新されます。

5:マイグレーションファイルが"up"状態となっていることを確認する。 1:同様に下記のコマンドで確認する。

Heroku run rails db:migrate:status

6:Herokuをリセットする。

Heroku  reset

このコマンドを実行することにより、Heroku上のデータが一度リセットされ、マイグレーションファイルも反映され、無事エラー解決することができました!

まとめ

・ログからエラー内容を確認する。
・Heroku上のデータベースの内容確認。
・修正したいheroku上のマイグレーションファイルを”down”状態にする。
マイグレーションファイルを修正し、Git Hubデスクトップでリモート側へプッシュする。
・herokuでマイグレーションを実行する。
・Herokuをリセットする。

Herokuでデプロイ後のデータベースの内容確認のやり方について

今回は、Herokuでデプロイ後に本番環境でエラーが発生したため、ログで原因を確認すると、「そのようなカラムはないよ」というようなエラー内容となっていました。

そこで、Herokuでデプロイ後のどのようにすれば、データベースの内容について確認することができるかについて記事を書いていきたいと思います。

よろしくお願いします。

確認までの一連の流れ

確認する為には、ターミナルでコマンド操作をしていきます。

①Heroku CLI(コマンドラインツール)のインストール

②Herokuにログイン

③コンソールを開く

④DBとの接続情報の確認

⑤DB内容について確認

①Heroku CLI(コマンドラインツール)のインストール

ターミナルのホームディレクトリにて、下記のコマンドを実行して、Heroku CLIをインストールします。

brew install heroku/brew/heroku

 ②Herokuにログイン

下記のコマンドを実行して、herokuへのログインする。

アカウント作成時のメールアドレス、パスワードを入力してログインする。  

heroku login --interactive

③コンソールを開く

コンソールを開きます。

heroku run rails console

④DBとの接続情報の確認

まず、DBとの接続情報について確認します。

ActiveRecord::Base.connection_config

上記のコマンドを実行すると、このような表示がされます。

[1] pry(main)> ActiveRecord::Base.connection_config
=> {:adapter=>"mysql2",
 :encoding=>"utf8",
 :pool=>5,
 :username=>"b5××××××××××",
 :password=>"24×××××××",
 :socket=>"/tmp/mysql.××××",
 :database=>"heroku_6d×××××××××",
 :reconnect=>"true",
 :host=>"us-cdbr-××××-××××××××××"}

次に、テーブルの状況について確認していきます。

ActiveRecord::Base.connection.tables

上記のコマンドを実行すると、このような表示がされます。

[2] pry(main)> ActiveRecord::Base.connection.tables
D, [2021-05-21T12:45:32.719529 #4] DEBUG -- :    (2.3ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 21××××××
=> ["ar_internal_metadata", "schema_migrations", "targets", "trainings", "users"]

テーブルは、「targets", "trainings", "users」ということがわかりました。

最後に、カラム情報について確認していきます。

Training.inspect

上記のコマンドを実行すると、このような表示がされます。

[3] pry(main)> Training.inspect
=> "Training(id: integer, date: date, category_id: integer, training_menu: text, point: text, evaluation: text, user_id: integer, created_at: datetime, updated_at: datetime)"

これで、カラム内容について確認することができました。

このような手順でHerokuでデプロイ後のデータベースの内容の確認を確認することができました。

*参考記事

teratail.com

Ruby 条件分岐

問題

数値numが1以上かつ10以下の範囲であればTrueを出力します。 または、outside_modeがTrueの場合は数値numが0以下、11以上であってもTrueを出力します。
それ以外はFalseを出力する条件を論理演算子&&と||を用いて作りましょう。

回答

def in1to10(num, outside_mode)
  if (num >= 0 && num <= 10) ||  outside_mode
    puts "True"
  else
    puts "False"
  end
end
in1to10(5,false) →True
in1to10(11,false) →False
in1to10(11,true) →True

解説

1)値numが1以上かつ10以下の範囲であればTrueを出力
  → (num >= 1 && num <=10)
2)または、outside_modeがTrueの場合は数値numが0以下、11以上であってもTrueを出力
  → outside_mode
 *outsideの真偽判定について
 変数での真偽判断(true/false)の場合は変数を記述するだけでその値が真か偽か評価してくれます。
 わざわざ === trueといったような記述を行う必要はありません。

これらを回答のように条件分岐をすることで、回答の結果が出力されます。

本日もありがとうございました。

繰り返し処理について

Rubyにおける繰り返し処理について、学習したので、備忘録として記事を描かせていただきます。

繰り返し処理とは

同じ処理を何度も繰り返す処理の記述のことを言います。 1つの処理の記述することで、繰り返し処理を行ってくれます。 ループ処理とも言われます。 繰り返し処理には、メソッドを使用してコードを記述していきます。

メソッドについて

timesメソッド

→指定した回数分、do~end内の処理を繰り返し行います。

〜記述方法〜

数値.times do |ブロック変数|
  # 繰り返す処理(0から始まるブロック変数が使える)
end

eachメソッド

→配列やハッシュの要素1つ1つに対してdo~end内の処理を繰り返し行いきます。

~記述方法~

[配列 or ハッシュ].each do | [変数] |
  # 処理
end

ブロック変数

メソッド内だけで使用できる変数をブロック変数と言います。 ブロック変数は、| |で変数を挟む形で記述します。 timesメソッドのブロック変数には、繰り返し処理が1回実行されるごとに、0から1ずつ増加する数値が代入されます。 eachメソッドのブロック変数には、配列、またはハッシュの要素が1つづつブロック変数に代入されていきます。

具体的な使い方

eachメソッド

・配列の場合

fruits = ['りんご', 'オレンジ', 'バナナ', 'パイナップル']
fruits.each do |item|
  puts item
end

fruitsの配列の中の要素が、一つづつブロック変数:「item」に代入され、次の処理:「puts」で順番に出力される。 実行結果は、下記の通りとなります。

実行結果
=> りんご
=> オレンジ
=> バナナ
=> パイナップル 

・ハッシュの場合

fruits = {`りんご`=> 150, 'オレンジ' => 200, 'バナナ' => 300}
fruits.each do |key, value|
  puts "#{key}:#{value}"
end

friutsのハッシュ内のキーとバリューをそれぞれ取り出す為に、ブロック変数に|key, value|を設定します。 このとき、配列と違い、ハッシュの場合は、キーとバリューを指定する必要がある為、2つブロック変数を指定します。

そうすることにより、ハッシュ内の要素(キーとバシュー)を取得することができます。 実行結果は、以下の通りとなります。

 実行結果
=> りんご : 150
=> オレンジ : 200
=> バナナ : 100
=> パイナップル : 300

以上、繰り返し処理(timesメソッド、eachメソッド)についてでした。 ありがとうございました。

繰り返し処理について

Rubyにおける繰り返し処理について、学習したので、備忘録として記事を描かせていただきます。

繰り返し処理とは

同じ処理を何度も繰り返す処理の記述のことを言います。 1つの処理の記述することで、繰り返し処理を行ってくれます。 ループ処理とも言われます。 繰り返し処理には、メソッドを使用してコードを記述していきます。

メソッドについて

timesメソッド

→指定した回数分、do~end内の処理を繰り返し行います。

〜記述方法〜

数値.times do |ブロック変数|
  # 繰り返す処理(0から始まるブロック変数が使える)
end

eachメソッド

→配列やハッシュの要素1つ1つに対してdo~end内の処理を繰り返し行いきます。

~記述方法~

[配列 or ハッシュ].each do | [変数] |
  # 処理
end

ブロック変数

メソッド内だけで使用できる変数をブロック変数と言います。 ブロック変数は、| |で変数を挟む形で記述します。 timesメソッドのブロック変数には、繰り返し処理が1回実行されるごとに、0から1ずつ増加する数値が代入されます。 eachメソッドのブロック変数には、配列、またはハッシュの要素が1つづつブロック変数に代入されていきます。

具体的な使い方

eachメソッド

・配列の場合

fruits = ['りんご', 'オレンジ', 'バナナ', 'パイナップル']
fruits.each do |item|
  puts item
end

fruitsの配列の中の要素が、一つづつブロック変数:「item」に代入され、次の処理:「puts」で順番に出力される。 実行結果は、下記の通りとなります。

実行結果
=> りんご
=> オレンジ
=> バナナ
=> パイナップル 

・ハッシュの場合

fruits = {`りんご`=> 150, 'オレンジ' => 200, 'バナナ' => 300}
fruits.each do |key, value|
  puts "#{key}:#{value}"
end

friutsのハッシュ内のキーとバリューをそれぞれ取り出す為に、ブロック変数に|key, value|を設定します。 このとき、配列と違い、ハッシュの場合は、キーとバリューを指定する必要がある為、2つブロック変数を指定します。

そうすることにより、ハッシュ内の要素(キーとバシュー)を取得することができます。 実行結果は、以下の通りとなります。

 実行結果
=> りんご : 150
=> オレンジ : 200
=> バナナ : 100
=> パイナップル : 300

以上、繰り返し処理(timesメソッド、eachメソッド)についてでした。 ありがとうございました。