タナカのプログラミング

プログラミングについて

DB設計手間取った件について

f:id:tanagram18:20190413020047j:plain

何事もなかったように更新してみます

TECH::EXPERT最終課題(4人でアジャイル開発)のタスクでDB設計をやったので

自分がやったことをつらつら書いてみる

 

 

そもそもDB設計って何やるんだっけ?

モデル、制約、アソシエーション、README、ER図作成、、、

 

モデル

モデルってどう考えればいいんだ、、ってなるんですけど

まず実装するアプリケーションの機能を考えて全て書き出す

 

 

 例:LINE → ログイン、チャット、グループ作成、いいね機能、スタンプ購入とか

そしてその機能で必要そうな値を書く 

 例:ログインはユーザーの名前とパスワード

   グループ作成はグループ名と参加してる人の名前とかとか

 

 

最初、DB設計は時間がかかってしまうのですが全然良いと思います!⇦必死

最終課題でメルカリのコピーサイトのDB設計を実際にやったのですが設計に4日

かけてしまい、チームの人には迷惑をかけました、、

実際、TECH::EXPERTのメンターさんもDB設計は慣れといっていましたし笑

 

どのテーブルになんのカラムを持たせるべきなのか非常に迷いました

 

なのでプログラミング学習を始めて間もない時は自分の感覚の話になってしまいますが機能ごとにモデルを作成するって考えた方がわかりやすいと思います。

 

ただ、ツリー構造(カテゴリー同士が繋がってる)のタグを検索するような複雑な機能はカラムの組み方もアソシエーションも難しめなので簡単なアプリ限定で考えた方が良いです。

 

あと注意点としてはモデル、カラム名予約語を使うとエラーが起こるので使わないようにしましょう

予約語とは、MYSQL側で使用されるためテーブル名やカラム名に設定することができないよう決められている単語のことです

dev.mysql.com

 

アソシエーション

アソシエーションは1対1とか、1対多とか、多対多とか自分が説明できることがないのでアソシエーションについての記事を貼るだけ貼って

qiita.com

railsguides.jp

 

モデルで自分が起こしたエラーを書こうと思います

テキストエディタ自体、自分はATOMを使用しています

まずモデルを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図作成!!

f:id:tanagram18:20190413011607p:plain

こんなんです

ちなみに自分が使ったアプリはMySQLWorkbench.appというアプリです

http://mysqlworkbench.org/

使い方をわかりきっていない自分でも上記のような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はマイグレーションの記録的なもの

実際何に使うのかはこれで

qiita.com

 

なのでカラムや制約をちょこっと変更したい時は

rails db:migrate:reset

をするとDBもschemaファイルも更新できる

 

ただこのコマンドを打つとDBの中身が消えてしまうので消えても良い内容であるか

確認することともしくはseedファイルありきで実現可

 

ただやはり正当法は上記のマイグレーションファイルの追加して書く方らしいので

会社ではなく個人アプリ程度なら使えるコマンドです

是非試してみてください(150)

 

やれやれ、やっとrailsのアプリができたぜ、、

f:id:tanagram18:20190125095156j:plain

 

こんちは!

はすっかり冬空ですね!!

初めて、いちからrailsのアプリが実装できたので出します

 

なぜrailsアプリ?

TECH::EXPERTの基礎カリキュラムを終えた後に復習を込めて

いちからノーヒントでrailsアプリを作って最終的に発表しなければなりません

 

いちからと言っても

基礎カリキュラムでは2〜3個 railsのアプリをお手本を見ながら作成するので

比較的基礎の内容を見ながら作れば簡単です(の筈です、、)

 

ただやっぱりrails作成にあたっての流れと書き方がイマイチ理解できておらず

最初は苦戦しました

 

アプリの

件は、、、

 

Userの機能

①新規登録ができる ②ログインができる ③ログアウトができる

 

ブログの機能

・Userがブログを投稿できる。

・Userが自分のブログを編集できる。

・Userが自分のブログを削除できる。

・ログインしていなくても全てのブログを見れる

です

知の助!!

 

で作ったのがこれ

 

f:id:tanagram18:20190201205240p:plain

 

目がチカチカする色でまとめました

 

最低限の条件は満たして

 

『kaminari』gemでページネーションを追加したのと

headerはmaterializecssでよくある風の見出しにしました

あとは投稿されたテキストのボーダーを形変えたり、影つけたりしました

 

ちなみにボーダーはこのサイトで決めました

とても使いやすかったのでぜひ

www.bad-company.jp

 

 

それとなく見た目ができたので自分的には満足してるんですが

 

欲を言うともうちょい現実的なアプリが作りたかったです

 

 

Twitterみたいに👍ボタンもないし

 

文字、フォントの大きさ、ツイートBOXのバランスとか

もっと上手く調整できるようになりたいし

 

Userの登録画面に自分の好きなトップ画を登録できたり

今のところカバの写真が付いてますが誰がツイートしてもカバがつきます笑

 

画像とかも投稿できないし、、

 

 

そう考えるといちから作ったのもあって

TweeterとかFacebookの凄さがわかります

 

作った奴考えた奴すげえって改めて思いました

 

んでもって結構予想以上に楽しかったです

でも無駄に凝りすぎるとどこまでも凝って終わりません笑

 

まだまだこんなですがもっと完成度が高いものができたら

あげていきたいと思います!!

報期待しててください

 

ではおやすみ

Ruby問題2

f:id:tanagram18:20190124215646j:plain

こんちは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

uxmilk.jp

www.sejuku.net

これが模範解答

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週間が経ちました

f:id:tanagram18:20190128120136p:plain

こんちわ!久しぶりの投稿です!

今回は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&CSSRubyRailsを学習します

自分はHTML&CSSRubyまでは理解できたんですがRailsでつまづきました

 

カリキュラムにも達成目標時間が定められており、

それで自分の進捗が早いか遅いかを判断できます

 

そこで感じたのが、どの言語に重きを置いているかです

 

実際のカリキュラムを割合で見ると

HTML&CSS : Ruby : Rails = (1:2:7)くらいです

 

HTML&CSSに関しては1日でカリキュラムを終えなければならないので

事前にProgateやらをやっとかないと頭に入りづらいと思います

 

実際、調べたらすぐ出てくるし、最初はそんな詳しく書いていかないと思うので

大丈夫だとは思いますが、いつかつまづきそうで怖いです

 

 

テストは早めに受けた方が良い

これはこれから始まる人に伝えたいことですが、

TECH::EXPERTでは中間テスト、期末テストがあります

テストと言っても何回も受けられるので受かるまで出来ます!!

 

最初の中間がキックオフから1週間後にあって

その1週間後に期末があります

 

先程もお伝えしたように重きはRailsです

テストの問題もHTML&CSSRubyが1問ずつに対して

Railsが6、7問 出てきます

 

なので、テスト対策だけ考えたらRailsの問題をたくさん解いておいた方が良いです

 

 ただテストという意識よりかはインプットを重視してやることお勧めします

 

今の段階わからないことの方が多いので、一番は多くの問題に触れることが

理解度を向上させる近道だと思います

 

なので、テストだからといって期日を守る必要はなく、

中間は1週間後に受けるとして

基礎カリキュラムを終えキックオフから10日くらい学習したら

期末テストを受けて良いと思います

 

 

Railsが重点的に学べる

やはりカリキュラムでも言えますが、Railsの問題をたくさん解くことが出来ます

特に基礎カリキュラム後半で学習するのがエラー文のデバックです

 

基礎カリキュラムではそこが一番難しく感じました

英語を読み解く力と仮説と検証を考える力が強化されるんですが

これが、また難しい、、、

 

ここのエラーは一体どこからきてるのだろうか?

なぜこんなエラー文が出てるのだろうか?

エラー文はわかったけど、どうやって書き直せば良いのか?

 

とかとか

最初は訳がわかりません

つか完全に自分も理解してません笑

 

まずは、ルート、コントローラ、ビューの動きを理解するべき!!

 

最初は、この機能を動作させるときの動きはここだ

ってのがわかっていれば良いと思います

あとは反復、復習です

 

受講生の方は

受講生の方に配布される要点チェックシートに詳しく書いてあるので

是非参考に!!

 

 

感想は以上です

もっと書きたいのですが、長くなってしまうのでこの辺で、、

結果、記事を書いてる時間が長え笑

学習に戻ります!!!!笑(100分)

Rubyの問題考える

f:id:tanagram18:20190115003053j:plain
こんちは!タナカです

今日、勉強した事まとめます

 

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>は閉じタグいる

 

Ruby

クラスメソッドの前には@@、インスタンスは@

initializeメソッドはクラスが生成された瞬間すぐに処理される

(→一番最初に処理したい事をかく)

 

Rails

ルーティング、コントローラ、ビューの流れ

マイグレーションファイルはテーブルの設計図

マイグレーションファイルを実行するのが rake db:migrate

 

以上です

Railsの簡単なツイートアプリに色々機能をつけてるとこ何ですが、

だんだん何が何だかわからなくなってきました、、、、

 

ルーティング、コントローラ、ビューの流れを理解した上でもう一度

作れたら作りたいです、、、

 

時間ないけど、、、

つまづいたっていいじゃないか、、、人間だもの

 

 

上記クイズ答え

A1、\n

A2、

A3、 exit

A4、pencil_case = " メモ帳 "

A5、dog

         空白

  => nil

最初はXがputs " dog "と定義してるので、dogとでる

二番目の空白はputs nilとなっているので空白が出力される

うまく説明できないけど、puts puts " dog "みたいな感じ

最後はputsの返り値が nil なので nil と出力される(35分)

TECH::EXPERT キックオフ!!

f:id:tanagram18:20190113025438j:plain

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でつまずく、、、

f:id:tanagram18:20190108212805j:plain

こんちは!今日も勉強したこと

過剰書きで乱雑にまとめて行きます!

 

今日やったこと

 

HTML&CSSマークアップ復習

書かれてるコード見ないでマークアップ

シングルページレイアウト4分の1完

 

* {〜} *は全ての要素

 

box-sizing: border-box

要素の幅にpadding、borderが含まれるようになる

marginは含まない → borderまでがMaxの枠(勝手なイメージ)

 

height: 〜vh

viewport ブラウザの表示領域 100vh だったらMax

 

 

Ruby

レビュー管理アプリケーションの作成、作ったレビューを貯めたり、表示したり

引数、返り値、returnの理解、、、、が、理解しきれず途中挫折

each メソッド(配列の数だけ処理が行われる)

演算子の優先順位みる

returnはあまり現実的じゃない(あまり使われない)

Rubyの分を見るときのポイント

1、式の返り値

2、式の評価優先順位

3、メソッドの返り値

4、上から下に順次読む

 

以上がパパッと思いついたことです

 

 

反省点

Rubyの勉強を始めてから

メソッドの意味や使い方を理解しようとすると、手が止まってしまう、、

 

なかなか頭で理解できない、、

3割くらい理解してまた復習すればいい!!

とわかっているのに理解したくなってしまう

考えていることと行動が伴わない

タナカは考えるのをやめた 

 

 

焦らず反復して復習を重ねて

より深く理解していこうと思います!! 

 頑張ろう