DB設計手間取った件について
何事もなかったように更新してみます
TECH::EXPERT最終課題(4人でアジャイル開発)のタスクでDB設計をやったので
自分がやったことをつらつら書いてみる
そもそもDB設計って何やるんだっけ?
モデル、制約、アソシエーション、README、ER図作成、、、
モデル
モデルってどう考えればいいんだ、、ってなるんですけど
まず実装するアプリケーションの機能を考えて全て書き出す
例:LINE → ログイン、チャット、グループ作成、いいね機能、スタンプ購入とか
そしてその機能で必要そうな値を書く
例:ログインはユーザーの名前とパスワード
グループ作成はグループ名と参加してる人の名前とかとか
最初、DB設計は時間がかかってしまうのですが全然良いと思います!⇦必死
最終課題でメルカリのコピーサイトのDB設計を実際にやったのですが設計に4日
かけてしまい、チームの人には迷惑をかけました、、
実際、TECH::EXPERTのメンターさんもDB設計は慣れといっていましたし笑
どのテーブルになんのカラムを持たせるべきなのか非常に迷いました
なのでプログラミング学習を始めて間もない時は自分の感覚の話になってしまいますが機能ごとにモデルを作成するって考えた方がわかりやすいと思います。
ただ、ツリー構造(カテゴリー同士が繋がってる)のタグを検索するような複雑な機能はカラムの組み方もアソシエーションも難しめなので簡単なアプリ限定で考えた方が良いです。
あと注意点としてはモデル、カラム名に予約語を使うとエラーが起こるので使わないようにしましょう
予約語とは、MYSQL側で使用されるためテーブル名やカラム名に設定することができないよう決められている単語のことです
アソシエーション
アソシエーションは1対1とか、1対多とか、多対多とか自分が説明できることがないのでアソシエーションについての記事を貼るだけ貼って
モデルで自分が起こしたエラーを書こうと思います
まずモデルをrails g model モデル名で作成します
修正する為にモデル削除コマンドのrails d model モデル名を入力しました
するとファイルの中ではモデルとマイグレーションファイルが消えているのに
先ほどページを開いていたせいか未保存の状態で画面には残っていました
そこで未保存状態のままrake db:migrateのコマンドを打つと先ほど削除したはずのマイグレーションファイルが未保存のはずなのに反映されてしまいます、、、
これはもしかしたらATOM特有かもしれないです
なのでもし、モデルを削除した際は一度ファイルと画面上の2つを確認してから
rake db:migrateを押すといいかもしれません
--------------------------------------------------
reference先のテーブルがないとエラーが起きます
これは当たり前かもしれませんが、userテーブルを作成する前にuser_idを必要とする
テーブルを作成してしまうとマイグレーションのエラーが起きます
これは追加機能をどのようにするかも重要になり、もし追加したい機能のテーブルの
idを他のテーブルにもたせたい場合最悪一度マイグレーションファイルを作り直さなきゃいけなくなる可能性があります。
なので追加機能があらかじめわかっているのであれば変更しそうなテーブルは後の方に
作成した方がいい
最悪の最悪
rake db:migrateはマイグレーションファイルを上から読んでいく
ので!マイグレーションファイル名の数字を変えればファイルの位置が変わって読み込む順番も操作できる!!!
制約
モデルにかける制約ですが、一番良いのが正直よくわかりません、、
最初に100%の制約をかけるのか、追加機能を作成するときに一緒に考えるのか
一番困ったのは、チーム4人で機能もバラバラに担当していたので最初どれくらいの制約をかけるのがベストなのかわかりませんでした。
なので結論、かけ過ぎず、かけな過ぎず、、笑
とにかく最低限の値はこれかな、、みたいな、、
ここは正直、個人で開発する時とチームで開発する時とで変わると思うので上手く
コミュニケーションをとってチームに合った制約の掛け方を見つけるべきだと思います
自分は何回もチームメイトに担当する機能のことを聞きまくってなるべく早く作ることを意識しました(結果、4日かかったけども、、)
ER図
そしていざER図作成!!
こんなんです
ちなみに自分が使ったアプリはMySQLWorkbench.appというアプリです
使い方をわかりきっていない自分でも上記のようなER図を作成できるしイメージがしやすかったのよかったです!
READMEに関してはコードレビューをしてもらう際、必ず目に付く箇所だし
マークダウンの練習にもなるので見やすさ重視で書きましょう(余裕あったら)
だいたいDB設計は以上です
あとは便利なコマンドをちょい説明して終わろうと思います
DB設計の時、モデルのカラムを編集したい、制約を変えたいって時があると思うのですがその場合追加するためのマイグレーションファイルを作成するのが正当法です
rails g migration Addカラム名To追加先テーブル名 追加するカラム名:型
で失敗したらrake db:rollbackしてやり直して、、、
前半のカリキュラムでこの壁にぶち当たり自分これでDBが嫌いになりました
そこで調べてるうちにrails db:migrate:resetというコマンドに出会い、
前までのDBへの苦手意識がなくなりました
このコマンドは一度全てのDBを削除してマイグレーションファイルを元に作成し直す
似たコマンドでrails db:resetというコマンドがあるが同様に全てのDBを削除してschema.rbのファイルを元に作成し直す
schema.rbはマイグレーションの記録的なもの
実際何に使うのかはこれで
なのでカラムや制約をちょこっと変更したい時は
rails db:migrate:reset
をするとDBもschemaファイルも更新できる
ただこのコマンドを打つとDBの中身が消えてしまうので消えても良い内容であるか
確認することともしくはseedファイルありきで実現可
ただやはり正当法は上記のマイグレーションファイルの追加して書く方らしいので
会社ではなく個人アプリ程度なら使えるコマンドです
是非試してみてください(150)
やれやれ、やっとrailsのアプリができたぜ、、
こんちは!
空はすっかり冬空ですね!!
初めて、いちからrailsのアプリが実装できたので出します
なぜrailsアプリ?
TECH::EXPERTの基礎カリキュラムを終えた後に復習を込めて
いちからノーヒントでrailsアプリを作って最終的に発表しなければなりません
いちからと言っても
基礎カリキュラムでは2〜3個 railsのアプリをお手本を見ながら作成するので
比較的基礎の内容を見ながら作れば簡単です(の筈です、、)
ただやっぱりrails作成にあたっての流れと書き方がイマイチ理解できておらず
最初は苦戦しました
アプリの
条件は、、、
Userの機能
①新規登録ができる ②ログインができる ③ログアウトができる
ブログの機能
・Userがブログを投稿できる。
・Userが自分のブログを編集できる。
・Userが自分のブログを削除できる。
・ログインしていなくても全てのブログを見れる
です
承知の助!!
で作ったのがこれ
目がチカチカする色でまとめました
最低限の条件は満たして
『kaminari』gemでページネーションを追加したのと
headerはmaterializecssでよくある風の見出しにしました
あとは投稿されたテキストのボーダーを形変えたり、影つけたりしました
ちなみにボーダーはこのサイトで決めました
とても使いやすかったのでぜひ
それとなく見た目ができたので自分的には満足してるんですが
欲を言うともうちょい現実的なアプリが作りたかったです
Twitterみたいに👍ボタンもないし
太文字、フォントの大きさ、ツイートBOXのバランスとか
もっと上手く調整できるようになりたいし
Userの登録画面に自分の好きなトップ画を登録できたり
今のところカバの写真が付いてますが誰がツイートしてもカバがつきます笑
画像とかも投稿できないし、、
そう考えるといちから作ったのもあって
TweeterとかFacebookの凄さがわかります
作った奴考えた奴すげえって改めて思いました
んでもって結構予想以上に楽しかったです
でも無駄に凝りすぎるとどこまでも凝って終わりません笑
まだまだこんなですがもっと完成度が高いものができたら
あげていきたいと思います!!
朗報期待しててください
ではおやすみ
Ruby問題2
こんちはRubyの問題で悩んだので書きます
ドリルの問題で
対話型のインターフェイスで二桁の整数を入力すると、十の位と一の位の数字に対して、足す、掛けるを行い、最後にそれぞれの結果を足し合わせて出力するプログラムをrubyで作成してください。
っていう問題が出たのですが、
自分は変換するメソッドがあるんだなと思い、
p "二桁の整数を入力してください" num = gets.chars.map(&:to_i) p num p "-------------" p num.inject(:+) p num.inject(:*)
出力結果
"二桁の整数を入力してください" 35 [3, 5, 0] "-------------" 8 0
charsメソッド、、1文字ずつ分割してくれる
オブジェクト . map(& : メソッド名)、、指定したメソッドが繰り返し実行される
オブジェクト . inject(:+)、、全ての要素を足す
出力結果から見てもわかるように
足し算はできてるけど、掛け算が0も入ってしまっているので結果が0になってしまっています
でも
p "二桁の整数を入力してください" num = "35".chars.map(&:to_i) p num
の結果が
"二桁の整数を入力してください" [3, 5]
になるということは整数で受け取ってなんとかして文字列に置き換えられればいけるのでは、、
と思ったのですが、時間ぎれで結局わかりませんでした
誰かわかる人いたら教えてください笑
因みにメソッドの参考ページです
simanman.hatenablog.com
これが模範解答
def mul(a, b) a * b end def sum(a, b) a + b end def slice(num) tens = (num / 10) % 10 ones = (num / 1) %10 return tens, ones end p "二桁の整数を入力してください" num = gets.to_i A, B = slice(num) sum_result = sum(A, B) mul_result = mul(A, B) p "足し算と掛け算結果の合計値は#{sum_result + mul_result}です"
因みに初めてはてなブログでコードを埋め込んでみました
参考までに
hatenadiary.g.hatena.ne.jp
(45分)
TECH::EXPERTに入塾して2週間が経ちました
こんちわ!久しぶりの投稿です!
今回はTECH::EXPERTに入って2週間経っての感想をスラスラ書いていこうと思います
・受講生がかなり増えて席がいっぱい
・マジで休みなし?笑
・2週間じゃ基礎カリキュラム完全習得厳し
・テストは早めに受けた方が良い
・Railsが重点的に学べる
こんな感じで気になったこと書いていきます
受講生がかなり増えて席がいっぱい
TECH::EXPERT渋谷校自体の席が130席くらいなんですが
自分が入塾した時はせいぜい5、60人くらいしか居ませんでした
現在お昼ごろになると、8、90人くらいは席に座ってます
自分は転職コースの短期集中なので、基本毎日いるんですが、
土日になると週末集中コースの方々が来て席がだいたい埋まります
聞くところによると、2週間ごとに新しい期の方々が入塾されるそうです
自分は45期で4、50人くらいいます
ちょうど最近、46期の方々が入塾されたので、さらに席が一杯笑
一体どこまで増えるのか、、、
TECH::EXPERTではカリキュラムをサイト上でやる為、ほぼオートマ
わからないことがあればメンターを呼ぶ形です
不安要素は受講生が増えすぎて、メンターの対応が疎かになることです
マジで休みなし?笑
結論言うと、いつでも休めるし、予定は合わせやすいです
ただ、自分次第なとこあるんでこれから書いていきます
事前学習を含めると3週間経ちますが、全然休めない
つか、休む暇がない(覚えが悪い)笑
基礎カリキュラムを2週間で進めるんですが、理解仕切れず次にいく
プログラミング自体が何回も反復して理解度を高めていくものだと思うのですが
それでもやはり、ふと問題、テストをやると、、
『あ、俺これ分かってねえや』って何回もなる
カリキュラムを進めるにあたって自分の進捗を入力するフォームがあるのですが
自分の進捗を確認できるのと他の同期の進捗も確認することができます
正確には全然休んで良いんです!!
でも、他の同期の進捗とか見るとかなり差をつけられてたりして
『休みたいけど、〜さんメッチャ進んでるし、、やるか、、』ってなる笑
こんな感じにさせてるから運営側は凄い笑
カリキュラムはサイト上でできるのでぶっちゃけ家でも進められる
これは自分の問題なんですが自分、家で勉強できないタイプなんです、、
どうしても家だと色々甘えてしまう
TECH::EXPERTにくると人数は多いものの静かだし、集中できる
正直、TECH::EXPERTに来てると1日の吸収率が半端ないです
なので、自分はなるべくここに来て学習してます
でも流石に毎日、学習進めてると飽きてくるので息抜きは絶対必要です!!
2週間じゃ基礎カリキュラム完全習得厳し
基礎カリキュラム自体が2週間で終えその後に応用カリキュラムを進めていく形ですが
正直、事前学習の2週間に進めて置かないと厳しいと思いました
基礎カリキュラムはHTML&CSS、Ruby、Railsを学習します
自分はHTML&CSS、Rubyまでは理解できたんですがRailsでつまづきました
カリキュラムにも達成目標時間が定められており、
それで自分の進捗が早いか遅いかを判断できます
そこで感じたのが、どの言語に重きを置いているかです
実際のカリキュラムを割合で見ると
HTML&CSS : Ruby : Rails = (1:2:7)くらいです
HTML&CSSに関しては1日でカリキュラムを終えなければならないので
事前にProgateやらをやっとかないと頭に入りづらいと思います
実際、調べたらすぐ出てくるし、最初はそんな詳しく書いていかないと思うので
大丈夫だとは思いますが、いつかつまづきそうで怖いです
テストは早めに受けた方が良い
これはこれから始まる人に伝えたいことですが、
TECH::EXPERTでは中間テスト、期末テストがあります
テストと言っても何回も受けられるので受かるまで出来ます!!
最初の中間がキックオフから1週間後にあって
その1週間後に期末があります
先程もお伝えしたように重きはRailsです
他Railsが6、7問 出てきます
なので、テスト対策だけ考えたらRailsの問題をたくさん解いておいた方が良いです
ただテストという意識よりかはインプットを重視してやることお勧めします
今の段階わからないことの方が多いので、一番は多くの問題に触れることが
理解度を向上させる近道だと思います
なので、テストだからといって期日を守る必要はなく、
中間は1週間後に受けるとして
基礎カリキュラムを終えキックオフから10日くらい学習したら
期末テストを受けて良いと思います
Railsが重点的に学べる
やはりカリキュラムでも言えますが、Railsの問題をたくさん解くことが出来ます
特に基礎カリキュラム後半で学習するのがエラー文のデバックです
基礎カリキュラムではそこが一番難しく感じました
英語を読み解く力と仮説と検証を考える力が強化されるんですが
これが、また難しい、、、
ここのエラーは一体どこからきてるのだろうか?
なぜこんなエラー文が出てるのだろうか?
エラー文はわかったけど、どうやって書き直せば良いのか?
とかとか
最初は訳がわかりません
つか完全に自分も理解してません笑
まずは、ルート、コントローラ、ビューの動きを理解するべき!!
最初は、この機能を動作させるときの動きはここだ
ってのがわかっていれば良いと思います
あとは反復、復習です
受講生の方は
受講生の方に配布される要点チェックシートに詳しく書いてあるので
是非参考に!!
感想は以上です
もっと書きたいのですが、長くなってしまうのでこの辺で、、
結果、記事を書いてる時間が長え笑
学習に戻ります!!!!笑(100分)
Rubyの問題考える
こんちは!タナカです
今日、勉強した事まとめます
12:00ー13:30
学習効率についてのワークショップ
内容
・なぜ学習効率を考えなければならないのか
・Webアプリ作成に必要なものマインドマップ化
・自身の理解度向上の為、問題を出題する
(これが出す側も答える側も面白い)
↓ 因みに自分が考えた問題(Ruby)
Q1、改行するには?
Q2、puts 5 - 3 / 3 - 1 の結果は?
Q3、プログラムを強制的に終了させるメソッドは?
Q4、pencil_case = [ "ペン" ]
に文字列 "メモ帳" を追加するメソッドと書き方?
Q5、 def x
puts "dog"
end
puts x
の出力結果は?
13:30〜自己学習
HTML
<input type = "text">、、、テキスト入力欄
<input type = "cheackbox>、、、チェックボックス
<input type = "submit">、、、送信ボタン
<textarea>、、、複数行のテキスト入力欄
<input>は閉じタグいらない、<textarea>は閉じタグいる
クラスメソッドの前には@@、インスタンスは@
initializeメソッドはクラスが生成された瞬間すぐに処理される
(→一番最初に処理したい事をかく)
ルーティング、コントローラ、ビューの流れ
マイグレーションファイルはテーブルの設計図
マイグレーションファイルを実行するのが rake db:migrate
以上です
Railsの簡単なツイートアプリに色々機能をつけてるとこ何ですが、
だんだん何が何だかわからなくなってきました、、、、
ルーティング、コントローラ、ビューの流れを理解した上でもう一度
作れたら作りたいです、、、
時間ないけど、、、
つまづいたっていいじゃないか、、、人間だもの
上記クイズ答え
A1、\n
A2、3
A3、 exit
A4、pencil_case = " メモ帳 "
A5、dog
空白
=> nil
最初はXがputs " dog "と定義してるので、dogとでる
二番目の空白はputs nilとなっているので空白が出力される
うまく説明できないけど、puts puts " dog "みたいな感じ
TECH::EXPERT キックオフ!!
TECH::EXPERTのキックオフに参加してきました!!
まあつまり、事前学習期間が終わって本格的に学習が始まったので
簡単にやったことを自分の見解を入れつつ、まとめてみようと思います
まず45期の全体的な人数は転職、フリー、夜間合わせて
50名ほどいるそうです
これはかなり例年に比べ人数が多いそうです
土曜日ということもあり、席がほとんど埋まっていてビビりました
男女比は9:1くらい
10:00〜 キックオフstart!
スライドでの説明会
・エンジニアとって一番大事なこと
・学習の進め方、理解度
・メタ認知
エンジニアにとって一番大事なことは、、、
新しい技術を学び続けること
今使ってる言語が10年後は使われていないかもしれない
なので常に勉強をし続けることとプログラミングを
楽しいと思えるようにすること(←自分の目標混じってる)
学習の進め方としては、、、
基礎カリキュラムはわからない事があったら5分考える
応用カリキュラムは15分考える
それ以上時間がかかりそうであればメンターを呼ぶ
最初の方の考える時間は無駄!無駄!無駄!
自分でコードを打てるようになるまでの全体的な理解度としては7割でOK!
人に教えられるようになったら9割理解してる!!
ただ、英語ばかりのエラー文にもどこが間違ってるかのヒントが隠されてる
嫌がらず、なるべく目を通すようにする
理解度を高めるには、、
インプットよりもアウトプットを重視する
学習中のメモ書きもアウトプットする為に書く
メタ認知、、、
メタ認知(Metacognition)もう一人の自分、客観的自己
自分自身をどれだけ分析できるか
なぜあの時自分はこんな行動をとったのだろう?
↓
悪い傾向になってないか自分を振り返る
↓
感情もコントロールして改善に向けて行動を変える
↓
最終的な動機付けの意識が高まる
11:00〜 ワークショップ
自分の目標、学びたいこと現状のスキルをペアを組んでお互い1分間発表を4setくらい
年齢層が20代前半から30代前半まで幅広いです
いろんな業種からきてる人がいて話が盛り上がりました
11:30〜 環境設定
Slackやリモート操作のアプリインストール等を行いました
その時、いくつかチームも別れました
12:30〜 交流会
お昼ご飯を食べながら楽しくお喋り
するとなんとびっくり、地元が全く一緒で高校もまさかの一緒の人がいました
つまり自分の後輩にあたります、、、
女性だったら結婚していました、、、、くっ、、
そのあとはほとんど地元、高校トークで交流会は終わりました笑
そのあとは自主的に学習を進めて今日は終わりました
まとめはだいたい以上です
初めて同期に会っての感想はみんな明るく接してくれてシンプルに楽しかったです!
やはり持つべきものは友ですね
いやあでも何より一番今日盛り上がったのは
高校の後輩が同期にいたことです!!笑
先輩風吹かせて、いじめてやろうと思います↑↑笑
勉強面はrailsに入ったので、アプリケーションを何回か作成して
コツを掴んでいこうと思います
ではまた
Rubyでつまずく、、、
こんちは!今日も勉強したこと
過剰書きで乱雑にまとめて行きます!
今日やったこと
書かれてるコード見ないでマークアップ
シングルページレイアウト4分の1完
* {〜} *は全ての要素
box-sizing: border-box
要素の幅にpadding、borderが含まれるようになる
marginは含まない → borderまでがMaxの枠(勝手なイメージ)
height: 〜vh
viewport ブラウザの表示領域 100vh だったらMax
レビュー管理アプリケーションの作成、作ったレビューを貯めたり、表示したり
引数、返り値、returnの理解、、、、が、理解しきれず途中挫折
each メソッド(配列の数だけ処理が行われる)
演算子の優先順位みる
returnはあまり現実的じゃない(あまり使われない)
Rubyの分を見るときのポイント
1、式の返り値
2、式の評価優先順位
3、メソッドの返り値
4、上から下に順次読む
以上がパパッと思いついたことです
反省点
Rubyの勉強を始めてから
メソッドの意味や使い方を理解しようとすると、手が止まってしまう、、
なかなか頭で理解できない、、
3割くらい理解してまた復習すればいい!!
とわかっているのに理解したくなってしまう
考えていることと行動が伴わない
タナカは考えるのをやめた
焦らず反復して復習を重ねて
より深く理解していこうと思います!!
頑張ろう