20210331_アウトプット(mysqlエラー→解決できた😍)
今日やったこと
- mysqlのエラーと格闘 →解決🎉(4時間)
1%の成長
- エラーと向き合えた
- mysqlの理解ちょっと進んだ
- バージョンアップって学ぶこといっぱいある(上手くいったと思っていても、後で地雷を踏んで爆発することがある💣)
新しい発見
ログの確認
この記事を見て、ログも合わせて確認しようと思った。
ログから読み取ったこととしては、「REDOログはMySQL5.7.9以前に作成されたもの。Data Dictionaryの初期化に失敗したよ」
% tail -f /usr/local/var/mysql/noMacBook-Air.local.err 2021-03-30T22:00:27.181813Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive 2021-03-30T22:00:27.195807Z 1 [System] [MY-011012] [Server] Starting upgrade of data directory. 2021-03-30T22:00:27.195917Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2021-03-30T22:00:27.284951Z 1 [ERROR] [MY-013090] [InnoDB] Unsupported redo log format (0). The redo log was created before MySQL 5.7.9 👈👀❗️ 2021-03-30T22:00:27.285128Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error. 2021-03-30T22:00:27.286229Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine. 2021-03-30T22:00:27.286786Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 👈👀❗️ 2021-03-30T22:00:27.287122Z 0 [ERROR] [MY-010119] [Server] Aborting 2021-03-30T22:00:27.287726Z 0 [System] [MY-010910] [Server] /usr/local/opt/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.23) Homebrew. 2021-03-30T22:00:27.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/efuERIKAnoMacBook-Air.local.pid ended 2021-03-30T22:00:37.6NZ mysqld_safe Logging to '/usr/local/var/mysql/efuERIKAnoMacBook-Air.local.err'. 2021-03-30T22:00:37.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql 2021-03-30T22:00:37.824064Z 0 [System] [MY-010116] [Server] /usr/local/opt/mysql/bin/mysqld (mysqld 8.0.23) starting as process 7372
REDOログって何?
- 更新履歴のファイルだよ(データベースへの変更があるたびに記録)。ただし上限があるのでいっぱいになると上書きし始める。
- 上書きすると、そこからログを使って復旧できなくなるため、REDOログが、いっぱいになる前にアーカイブ ログが作成される。
- アーカイブ ログは、勝手に消えることはないので定期的に削除しないと容量がいっぱいになってしまう。アーカイブ ログについて通常は自動で削除する設定をする。
調べたところから立てた仮説
昨日調べたことも含めて、今回エラーが発生した経緯は、以下の通りでは?と仮説を立て始めた。
(1)macをBigSurにし、RubyやRailsをアップデートした時、mysqlは5.6をインストールしてサーバー起動。
(2)brew upgrade
により、てHomebrewでインスールしたパッケージたちが全てバージョンアップ(mysqlも5.6から8.0へ)
(3)macの電源を切った。
(4)ターミナルを再起動した際、mysql8.0が起動。今まで作ったアプリたちはmysql5.6だったので「mysql5.6のログ残っているよ、8.0でこのまま立ち上げできないよ」とエラーに陥った。
と考えた。
当初は「/tmp/mysql.sock
がない」ことが原因だと思っていたが、ディレクトリはmysql8.0において存在している。
そのことから、「意図せずmysql8.0の起動になっている部分」を「mysql5.6で起動」すれば上手くいくのではないか?と思った。
↓↓この記事が参考になった。
直った!!!!!
覚書
- バージョン指定して起動したら直った。😻❗️💗
noMacBook-Air ~ % /usr/local/opt/mysql@5.6/bin/mysql.server start Starting MySQL .. SUCCESS! noMacBook-Air action_app % mysql -v Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.6.51 Homebrew Copyright (c) 2000, 2021, Oracle and/or its affiliates. (省略)
- ちなみに、もう一度落として、スタートしたら同じエラーでた(エラーを再現できた!!!)原因はこれだったのか💡嬉しかった〜!!!
- よく理解しないまま、Qiitaの記事を見て、mysql5.6のファイル等を削除しなくて良かったと感じた😭✨🙏笑
noMacBook-Air ~ % /usr/local/opt/mysql@5.6/bin/mysql.server stop Shutting down MySQL . SUCCESS! noMacBook-Air ~ % sudo mysql.server start Password: Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/efuERIKAnoMacBook-Air.local.pid).
感想
- 時間はかかったけれど、解決できて嬉しかった〜!
- この感覚は、オリアプを作っていた頃の気持ちを思い出した(笑)
- プログラミングって「背景や意図など新しい知識を知れた時の面白さ」「エラーに苦しむけど調べまくってブラウザに反映した時(形にできた時)の嬉しさ」2種類あると最近感じている。
- 最初は「Railsなどの続きやりたいし、変なところでエラー出ないでー!!」と内心思ったが、結果として面白かったから良かった。
- dumpコマンドで、バックアップを取ることを知った。結果として、mysql5.6のままなので、時間ある時に5.7から8.0にチャレンジしてみよう😊!!
20210330_アウトプット(mysqlエラーと格闘)
今日やったこと
- mysqlのエラーと格闘(3時間45分) →未解決
新しい発見
上記エラーについて調べたり、感じたこと
mysql5.6使っていたが、mysql5.7のあとは、8.0と一気にメジャーアップデートされていたことを知る。
mysql8.0はシークエルプロ使えないみたい。ただし、それに変わるアプリもあることを知る。
brew update
したことにより、Mysqlのバージョンも最新版へ意図せずアップグレードしていたことが原因の様子。解決法を探すとバージョン5.6や5.7にダウングレードする方法が出てくる。
はじめはそれを試みていたが、ふとそれは「エラーを解消」だけが目的であり、そもそも「最新版の8.0」によるメリットは何か?(どんな影響があるのか)、もしそちらの方がよければ8.0を使う方法を模索した方がいいのではないかとも思い始めた。そういえば一次情報ちゃんと調べてなかったと思い始めた。
mysql8.0のメリット
SQLを勉強していた時に、それを扱うリレーショナルベース管理システムごとの癖が結構違うと感じていたが、mysql8.0では、それらのメソッドが便利になったり記述が簡略化されるようになったと理解。
全てを理解は出来なかったが、ハードディスクの大容量化などによりログの出力する方がデフォルトに変わったり、クエリキャッシュと呼ばれるデータを抽出した時に一時的に残さないモードにしておかないと新しいバージョンでは起動しなくなったり、ユーザー認証に変更があることを知った。
一次情報見てみよう
バージョンアップする前に確認すること(今回の場合、意図せずバージョンアップしちゃったけど互換性を確認するため)
Rubyの時に学んだようにちびちびバージョンアップした方がいい。
- バックアップを取る必要もある。
- mysqlのアップグレードに伴う予備チェックをするコマンド
mysqlcheck -u root -p --all-databases --check-upgrade =>mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38) when trying to connect
- そもそもなぜ、
/tmp/mysql.sock
に接続しようとしているの?
掘り下げ1:cofig>database.yml
において指定していた。
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: socket: /tmp/mysql.sock 👈👀❗️
掘り下げ2: リファレンスにもこの場所がデフォルトですって書いてあった。(知らなかった。)
サーバーがローカルクライアントと通信するために使用する UNIX ソケットファイルのデフォルトの場所は、/tmp/mysql.sock です
- mysqlのWebページ見づらい・・と思っていたが、右上のタブでバージョン切り替えてリファレンス読めることがここら辺でだんだん分かってきた。
バージョンを確認するコマンド(エラー内容がより詳しく出た)
起動しているか存在しているか確認して!
noMacBook-Air ~ % mysqladmin version mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)' Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
この2つの記事が解決の糸口になりそう😣
ソケットファイルの指定方法
MySQL :: MySQL 8.0 Reference Manual :: B.3.3.6 How to Protect or Change the MySQL Unix Socket File
今回のエラー原因では?
MySQL :: MySQL 8.0 Reference Manual :: B.3.2.2 Can't connect to [local] MySQL server
感想
- エラー解決に必死になっていたけれど「1次情報そういえばちゃんとみてない」と視点を持てたのはよかった。
- なぜならばRubyやRailsなども、サポートされなくなるからバージョンアップするのに、必死になって「グレードダウン」する方法を調べているのでは?と思えてきたため。
- 上手くいくかわからないけれど、会社で失敗するより個人で失敗する方がいいので、ターミナルのちょっと不安なコマンドも、意味を調べながら、チャレンジしてみようと思っている💦(エラー解決しますように・・・)
- 調べたり、「どういう意味?」で今日の勉強終わってしまったが、向き合えたからよしとしよう。
- バージョン8.0で、あとデフォルトのコネクト先を設定すればいける気がするんだけど違うのかな?そもそも設定どうするんだ?
- しっかり寝てまた明日向き合ってみよう。
- 自分の大事に思っている考えと技術力が高い方の思考が似ているととても嬉しい。少しでも近づけるように技術力アップ頑張ろうと励みになる。
20210329_アウトプット(Ruby)
1%の成長
- ゼロからわかるRuby超入門(3時間半)
新しい発見
sizeメソッドとlengthメソッドはエイリアスメソッド(別名メソッド)
私🤔:配列の要素数ってどうやって数えるの?
先生🥸:sizeメソッド
やlengthメソッド
で数えることができるよ。
私🤔:異なるメソッド名でも、同じ実装になるんだね。
先生🥸:うん、それらをエイリアスメソッド(別名メソッド)といい、文脈や好みで使い分けるよ。 同じ実装でも速度が違う場合があるので、速さを一つの基準にしてもいいかもしれないね。
puts [2, 4, 6].size #=>3 puts [2, 4, 6].length #=>3
require 'benchmark' Benchmark.bm 10 do |r| r.report "size" do end r.report "length" do end end # 結果 user system total real size 0.000011 0.000010 0.000021 ( 0.000007) length 0.000003 0.000001 0.000004 ( 0.000003)
配列の全要素の合計を得るにはsumメソッド/平均を出すにはそれをsizeメソッドかlengthメソッドで割る
- 注意としては、合計値を使って平均を出すときに、デフォルトは整数になっているので
to_f
(小数)に変換するメソッドを使わないと正しい値がでない場合があること。
a = [1, 2, 2] puts a.sum / a.size #=> 1 puts a.sum.to_f / a.size #=> 1.6666666666666667
uniqとuniq!の違いは何?/新しい配列を作り出すか・配列そのものを変更(破壊的)するか
- 末尾に!がつく/つかないメソッドがある。
- !がつくと、オブジェクトを破壊的に変更し、!がつかないと新しい配列を作って返すものが多い。
ブロックを渡せるメソッド
p [1, 3, 2, "2", "3"].uniq # => [1, 3, 2, "2", "3"] p [1, 3, 2, "2", "3"].uniq { |n| n.to_s } # => [1, 3, 2]
- 2つめはブロックで一つずつ、配列の中身を全て文字列にしてから重複を取り除いている(これを
to_i
にして全て整数にしてから重複を取り除くでも結果は同じ)
配列をランダムに操作
メソッド | 内容 |
---|---|
sample | 配列の中からランダムで一つ選ぶ |
shuffle | 配列の中身をランダムに並び替える |
配列の並びかえ
私🤔:そのまま、reverseメソッドを使う時と、sortメソッド+reverseメソッドの違いは何?
先生🥸:配列の中身を「そのまま逆」にするか、中身が大きい順/小さい順、アルファベット順(かつ大文字優先)など並び替えたものをリバースするかの違いだよ。
ary1 = [ "d", "a", "e", "c", "A" ].sort.reverse #=> ["e", "d", "c", "a", "A"] ary2 = [1, 2, 4, 5, 6, 4, 0].sort.reverse #=> [6, 5, 4, 4, 2, 1, 0]
- 注意点としては、「文字列」の数字をソートした時は、正しく大きい順/小さい順にならないので、uniqメソッドで学んだ時のようなブロックにして(全てto_iメソッドで変換して)並び替えるよ。また大小の比較をしながら並び替えるため、ブロック引数として2つ渡す必要があるよ。
p ary2.sort{|a, b| a.to_i <=> b.to_i } #=> ["7", "8", "9", "10", "11"] (ブロックを使って数字としてソート)
配列の「中身」をくっつけるjoinメソッド
- 配列の中身をくっつける
- くっつける時に、要素間に指定の文字を入れて欲しい
というような場合は
joinメソッド
が便利!
puts ["りんご", "みかん", "いちご"].join("と") #=>りんごとみかんといちご puts ["りんご"].join("と") #=>りんご
- とても便利だと感じたのは、要素が一つの時には「連結していない」と判断してつかないようになること。
文字列を分割して、配列にするsplitメソッド
- 文字列と文字列の間は「半角スペース」分空いている、「”と”」で繋がっているなど、法則性があるときにその文字列で区切って配列にしてくれるメソッド。
puts "りんご みかん バナナ".split(" ") りんご みかん バナナ
puts "りんごとみかんとバナナ".split("と") りんご みかん バナナ
配列の中身に対して、同じように〇〇したい時に使えるmapメソッド
- 配列の各要素に対して同じ処理をして、変換後の要素を「新しい要素」として作り出すメソッド。
私🤔:eachメソッド
と何が違うの?
先生🥸:eachメソッド
は、各要素に対してブロックで処理を行うことが目的で、mapメソッド
は各要素を変換した新しい配列を作ることは目的になるよ。
puts ["赤", "白", "黒"].map do |x| "{x}色" end #=> 赤色 白色 黒色
- リファクタリングとして、
do ~ end
を{ ~ }
にできる。
result = ["abc", "123"].map { |text| text.reverse } p result #=> ["cba", "321"]
result = ["abc", "123"].map(&:reverse) p result #=> ["cba", "321"]
- また各要素に対する処理で、あるメソッドで呼び出す(処理を施す)場合については、シンボルである
&:メソッド名
で表現できる。 - ただし、これが使えるのが①ブロック引数が一つだけ②引数がないこと③メソッドを1回呼び出したら終わり、という条件が揃った時。
🤔私:&:メソッド名
ってどういう状態?
🥸先生:&
と、:メソッド名
の組み合わせ。&
はprocオブジェクト(ブロックをオブジェクト化するクラス)の一つでブロック処理を一つのカタマリにしている。:メソッド名
はシンボル(オブジェクトの種類の一つ。)にしている状態だよ。
感想
- split、mapについて、ネットでふわっとした概念で理解していたので、役割がきちんと理解できて嬉しかった。
- 今日はSPI勉強できなかったけれどRubyについて、引き出しが増えたのでよしとしよう。
- どうしても眠いので今日はもう寝る。
20210328_アウトプット(Ruby)
1%の成長(昨日の自分の知識より1%成長する)
Wantedlyの「将来やってみたいこと」「やったこと」を追記・投稿(1時間)
ゼロから分かるRuby入門(チャプター1から4まで)(4時間)
paizaのスキルチェック(1時間)
SPI(1時間30分)
新しい発見
ゼロからわかるRuby入門
簡単なプログラムをかく
- pメソッドはデバッグの道具として使う。(プログラムの機能として意図して表示するときはputs)
🤔(どうして?)
pメソッドが唯一、戻り値が「引数のオブジェクト」になるからだよ。(putsメソッドは改行ありでnil、printメソッドは改行なしでnilとなる。nilじゃどこが間違えているのか分からない。)
- エラーメッセージの時に、コロン(:)で区切られた数字は、プログラムの何行目でエラーが起きたのかを教えてくれる。
条件分岐
慣習的に末尾に
?
がつくメソッドはtrue
かfalse
で返すことが多い。even?
(偶数か?)、odd?
(奇数か?)後置ifのときはend不要。
elsif
は複数書けるが、書きすぎると読みづらくなる。そんなときは、&&
・||
・case
を検討しよう。
内容 | 選択肢がこんな時に使う |
---|---|
if | 二択 |
case | 三択以上 |
「一つ選ぶ」は
case 変数
と定義。caseを書かないときは、whenの後に条件をかく。case文のとき、複数に合致するものがない時の選択肢としてelse。
繰り返し
慣習的に、ブロックを複数行で書くときは、
do ~ end
、一行で書くときは、{ ~ }
。「条件付き繰り返し」が
`while
case 変数 when 候補1 変数の値が候補1の時と等しい時の処理(複数行書くことも可能) when 候補2 変数の値が候補2の時と等しい時の処理(複数行書くことも可能) end
変数を書かずに、「候補1」や「候補2」に条件を書くことも可能。(wallet >= 500)
while 条件 条件を満たしている間、繰り返し実行する処理 end
ブロックの時のように
do
は不要。「繰り返し実行する処理」の戻り値を元に「条件」を判定する。なので条件が「変数 < 2」だった時、1週目の時の戻り値は「1」なので、「2」まで実行されることがスッキリ。
配列
- 配列の中身のオブジェクトクラスはバラバラでも可能(例 文字列、整数、小数点が入った配列)
- 変数を使わずにメソッドを呼び出すことも可能
p ["牛乳", "お茶"].first #=> "牛乳"
要素の追加 | メソッド |
---|---|
末尾に追加① | push |
末尾に追加② | << |
先頭に追加 | unshift |
要素の削除 | メソッド |
---|---|
末尾の要素を1つ削除 | pop |
先頭の要素を1つ削除 | shift |
popメソッドとshiftメソッドは、削除した要素を返す。
|
はパイプと読む。
感想・振り返り
- 「全部頑張らないと」のように、変に自分を追い詰める癖を改善したいので、1%の成長項目を追加してみた。「1%進めよう」という気持ちでやってみたら、「変な焦り」に囚われることなく、一つずつ出来て良かった。
- 昨日、ルビィのぼうけんを読んでいて、最後の鳥井さんのコメントにあった「よく観察すること」「その中からパターンを見つけること」「小さいことから始めて大きくしていくこと」に励まされた。あとビットの世界の絵がとても可愛い。素敵だ。
- Rubyを書くことがまだまだ下手な自分を受け入れよう。Ruby入門の本から始めてみて着実に成長しよう。
- 今思うとここ一週間を振り返って「自分はエンジニアに向いていないのかもしれない」「なんでこんなにコード書けないんだろう」と「自分ができる感覚が持てない」ことが一番辛かった。
- 「出来る気が持てない」と、やる気やモチベーションが大きく低下することを実感した。
- 「出来る実感」を持つにはどうしたらいいか。今何が出来る?小さく成長するにはどうしたらいい?
- なぜ書けないのか?①何より自信がない。②問題を細かく「順序進行」「繰り返し」「条件分岐」に分ける力が弱いのでは。③型がふわっとした理解。特に、メソッドへの引数の渡し方・クラス・ブロック引数・モジュールあたりの知識の理解がまだまだ。
- 嬉しかったのは、基礎を4までだけど、行なってからpaizaを解いてみたら解けるようになったこと。楽しくなってきた。ちょっとずつ自信つけていこう。
20210327_アウトプット(HTML・Rails)
やったこと
学んだこと
HTML5の基本を理解する
HTMLを書くときに必ず必要な要素たち
<!DOCTYPE html> 🌟1・・DOCTYPE宣言 <html lang="ja"> 🌟2・・属性で日本語指定 <head> <meta charset="UTF8"> 🌟3・・属性で文字コードを設定 <title>HTMLを勉強したよ</title> 🌟4・・タイトルを入れる </head> <body> 🌟5・・ボディ内に本文記載 ピヨ </body> </html>
疑問1:なぜ、一番最初に< !DOCTYPE >って書くの?🤔
結論:「HTML5で記述します」という意味になるため。
- 宣言しないと、どの仕様書にそって書かれたHTMLか判断できないことから、「標準準拠モード」ではなく「互換モード」になってしまい、レイアウトが崩れてしまうことがある。
- HTML5より前は、使用可能な要素や属性、要素の配置ルールを定めている仕様書を、厳格さによって指定しないとHTMLを使えなかった。
- その仕様書をDTD(Document Type Definition)という。
プチ知識:HTMLの最近の歴史
年 | 内容 | 補足 |
---|---|---|
1999 | HTML4.01 | HTMLは文書構造のみ、デザインはCSSに移行 |
2000 | XHTML1.0 | XMLの文法で再定義されたHTML(HXLの書き方も使えるhtmlのこと) |
2014 | HTML5 | よりコンピュータにも理解しやすいHTML |
疑問2:属性ってなんだっけ?🤔
結論:その要素が持つ性質(細かい設定)のこと。半角スペースで繋げていくつも指定できる。
<html lang="ja"> htmlの、言語は、日本語です。
<要素名 属性名="属性値"> 要素内容 </要素名>
疑問3:なぜUTF-8って書くの?文字コードを指定しないとどうなる?🤔
結論:テキストエディターと、ブラウザの文字コードを一致させるため。一致しないと文字化けする。
- 一般的にはタイトル要素の上に書く。(titileの文字コードにも関わってくるため)
- UTF-8とは、世界的にも最もポピュラーな文字コード。
- ちなみに、HTML5になって、文字コードの指定はスッキリしたけれど、HTML5より以前の文字コードの指定は異なるので注意。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
疑問4:(終了タグの先頭ではなく)たまに要素の最後にスラッシュがついているのは何?🤔
結論:XHTMLの空要素の書き方ルール。
- そもそも、要素には終了タグが必要なものと、必要のないものがある。
- 必要なものは、「ここからここまではこの要素をあてるよ」(範囲の指定)が必要な場面で使う。
- 必要のないものは、部分的な要素の指定で使う。
- 終了タグが必要ない要素を「空要素」 という。
- XHTMLの空要素の時だけ、
半角スペース
と/(スラッシュ)
が必要というルールがある。(つまり、HTML5のときには特段書かなくても大丈夫)
<空要素 />
<meta charset="utf-8" />
HTML5の文章の階層構造
- マークアップは「装飾」のためではなく、「意味づけ」のために行う。 (🐶「意味づけ」をかっこよく英語で言うと「セマンティクス」と言う。)
- 「意味づけ」の役割を果たすために、大切な概念が「アウトライン」である。
- 「アウトライン」とは「文章の階層構造」である。
アウトラインってどうやって作るの?🤔
【大きく2つ】
hタグ
のhレベル
で作る方法。article(主要なコンテンツ)
・section(章)
・aside(余談・補足)
などのブロックを使い、作る方法。
【ポイント】
- 一つの
section
(section
に限らず、article
、aside
などの場合も同様)の中に、同じhレベルであるh1
は一つまで! - ブロックで区切った場合、見出しは、全てh1でも可能。
- 暗黙的アウトラインといい、
section
は見出しを必要とする。 - 入れ子構造にしたときに、階層レベルがごちゃごちゃにならないようにする。(例えば、「孫」の中に「子」を入れるはだめ!)
その他、勉強になったこと
timeタグ
日付と時間はtimeタグ
で表現すること👀!
<time datetime="2090/12/21T19:00">2090年12月21日 19:00</time> 〜 <time datetime="2090/12/21T23:00">23:00</time>
マークダウンを使ってHTMLを書く
- 表において、下記機能があるのを知らなかった👀! (フィヨルドブートキャンプの日報では結合出来なかったの方言でできるのと出来ないのがあるのかな?)
- また、他にも結合の方法は方言があるようだと思ったので、使うときにその都度調べようと思った。
https://b1tblog.com/2019/10/08/vscode-markdown2/
adiaryマニュアルより↓
> : 右に結合 < : 左に結合 ~ : 上に結合 _ : 下に結合
Railsについて
- macのバージョンアップ後、新規でアプリ作成したところ、
local3000
でエラー。 - 調べたらMySQLについてバージョンを5.6から8.0にしたことによりエラーになってしまった様子。
- 1時間くらい詰まっていたが解決せず。明日に持ち越し。
感想
20210325_アウトプット(Ruby)
学んだこと
- キノコードさんの動画をみながら、Rubyに関する差分の知識や、改めて概念について学んだ。
プログラムの基本構造
(1)順次進行(上から順に実行)
(2)条件分岐(条件に応じて処理)
(3)繰り返し(決まった条件や処理を満たすまで繰り返す)
オブジェクト
- 全ての値がオブジェクト
- メソッドを使い操作できる
- なんらかのクラスに所属する
数値オブジェクト(代表的なもの)
- 整数の
Integer
クラス
puts 10.dev(5) # 割り算 => 2 puts 10.remainder(3) #余りを出す => 1
- 小数の
Float
クラス
文字列オブジェクト
- 文字列の
String
クラス
puts "Good mornig".index("d") #dは何番目にあるか探す => 3 puts "Good Morning".length #文字数(半角空白含む)をカウント => 12
オブジェクト
True
クラス
p (10>1) => true p (10>1).class => TrueClass
False
クラス
p (10<1) => false p (10<1).class => FalseClass
配列
- 複数のデータを入れることが出来るロッカー
- 1列は1次元配列といい、複数は多次元配列という
- 一つ一つを要素といい、要素には0から始まるインデックス番号(添字)と呼ばれる住所が割り当てられている
一次元配列の作り方
Array.new()
or[]
変数 = Array.new(要素数)
の場合 🐱アレイ
a = Array.new(3) a[0] = "sato" a[1] = "suzuki" a[2] = "takahashi" p a[0] => "sato" p a[1] => "suzuki" p a[4] => nil
変数 = [データ1,データ2,...]
の場合 🐱角かっこ
a = ["sato", "suzuki","takahashi"] p a[0] => "sato" p a[1] => "suzuki" p a[4] => nil
配列の中身を変更するには
a[1] = "tanaka"
- 添字で要素数を指定し、値を代入する
多次元配列の作り方
- 配列の中に配列を入れる
ary = [["sato", "suzuki"],["takahashi"]] p ary[0][0] #1つめの1番目 => "sato" p ary[0][1] => "suzuki" ary[1][0] #2つめの1番目 => "takahashi" p ary[1][1] => nil
演算子
算出演算子(四則演算や余剰などの計算を行うこと)
+
・%
関係演算子(大小の関係正しいか、正しくないか判断すること、等価)
<
・>=
・!=
論理演算子(複数の条件を判断すること)
&&
・||
複合代入演算子(足し算や引き算などと組み合わせて代入すること)
x += 10
はx = X + 10
と同じ意味。
x = 8 y = 12 z = 20 p x += 10 => 18 p z += y => 32
条件分岐
if 条件 then 条件を満たした時の処理 end # thenは省略できる
age = 40 if age >=10 && age < 20 puts "10代" elsif age >=20 && age < 30 puts "20代" elsif age >=30 && age < 40 puts "30代" else puts "それ以外" end => ”それ以外”
繰り返し
for文
for カウンタ変数 in 範囲(スタート値..終わらせる値)または配列名 do 繰り返し中に実行する処理 end # doは省略できる
- カウンタ変数は、
index
やinteger
の頭文字からi
とすることが多い - 範囲とは、「
スタート値..終わらせる値
」をかく。(例 4になったら終わり →0 .. 4
)
break文
ある条件になった時に、繰り返しを終了させること。
# 3になったら終了 for i in 0 .. 4 if i == 3 break end puts i end => 0,1,2
next文
ある条件になった時に、その処理をスキップさせること。
for i in 0 .. 4 if i == 3 next end p i end => 0,1,2,4
ネスト
- 外側の
0回目
から始まり、内側の0回目
から2回目
の繰り返しが終わった後、外側の1回目
となる。
for i in 0 .. 2 for j in 0 .. 2 p i.to_s + "+" + j.to_s end end => "0+0" "0+1" "0+2" "1+0" "1+1" "1+2" "2+0" "2+1" "2+2"
配列
- 配列の中を順番に繰り返すことができる
ary = [2,4,6,8,10] for i in ary puts i end => 2 4 6 8 10
ary = [2,4,6,8,10] sum = 0 for i in ary sum += i end puts sum => 30
- 1から10まで繰り返し、3の時はスキップし、7で終了するよう表示させよ。
for i in 1 .. 10 do if i == 3 next elsif i == 7 break end puts i end => 1 2 4 5 6
メソッド
def sayHello(greeting) p greeting end sayHello("GoodMorning") => "GoodMorning"
def add(num1, num2) p num1 + num2 end add(6,2) => 8
感想
20210324_アウトプット(Rails Slim)
学んだこと
railsでビューを作るとき、テンプレートエンジンと呼ばれる
ERB
を使用する。今までは
ERB
を使っていたけれど、Slim
というテンプレートエンジンもあることを初めて知った。開始と終了のタグめんどくさいと思っていたため、楽だ😂😂
今更ながら「テンプレートエンジンではRubyスクリプトを埋めることが出来る」という意味について、この間、terminalにおいてスクリプト(台本)を作るレッスンをやったことにより「(例)インスタンス変数を記述=その裏側で台本が実行されている」イメージがつながり「そういう意味だったのか」としっくりきた。
% bundle exec erb2slim app/views/layouts/ --delete
上記のコマンドを見た時に、「え、作ったもの消してしまうの!?」と思ったが、下記記事をみて「
slim
ファイルに変換した後、erb
ファイルを削除する」の「削除する」意味だったのかと理解。html
をslim
に変換するためのhtml2slim
コマンドerb
をslim
に変換するためのerb2slim
コマンド
感想
- やりたいことが沢山あってリズムが掴めない😖💦ブログによるアウトプットもまちまちになってしまっている💦
- ①志望動機を書きたい、②行きたい企業に関する本や動画を見たい、③RubyやRailsもっと知りたい、④背景なども含めて深く知りたい理由から入ったフィヨルドブートキャンプも最初はHTML・CSSからでRubyまで全然到達しない💦(しかも、HTMLも知らなかったことが沢山あって楽しい、急いでRubyにいくのではなく、知らなかったHTMLの部分も知りたい・・)⑤試験対策しなくちゃ・・など、いろんな「やりたいこと」が溢れかえっては、優先順位に悩み、結果としてマルチタスク・・というような一週間になってしまった。
- 就活に向けた準備と、プログラミング学習の大きく2つについて、バランス取りながら頑張ろう。
- アウトプットするかしないかで後々理解度につながるので、スモールステップを恥ずかしがらずに発信してみよう。
- あとちゃんと寝よう。