ChatSpace 画面実装 完成
LGTMもらいました!!
フォーム作成に一番手こずった^^;
chat-space 進捗3
今の所、順調にLGTMもらってます。
明日には完成しそう!頑張るぞ
chat-space 進捗2
作業が進まないせいか、気合が足りないのか、全然更新できてない。すいません。
1日分の作業が全部飛んだせいで進むどころか全く進んでない。やばいよ!
学んだことまとめ
link_toメソッドはリンクを一度クリックするとテキストの色が紫色になっちゃう。それと、アンダーラインが引かれちゃう。それらを解消する方法
a{ text-decoration: none; color: #ffffff; }
color: #指定した色; でテキストの色をかえられる。
text-decoration: 値; で値に応じたテキスト装飾をしてくれる。
- none : 何も装飾しない
- underline : アンダーラインを装飾
- overline : オーバーラインを装飾
- line-through :
こんな感じ - underline dotted red: 赤破線のアンダーラインを装飾
それと、BEMの命名規則は守ることでscssのコーディングがすごい楽になる。
覚えておく。
chat-space進捗 1
今こんな感じ。サイドバーのコーディング中。 まだまだ程遠いな...
ここまでコーディングして思ったこと。
1つ目はそもそも指示書の見方がよくわからなかったということ。指示書見るのが初めてだったから仕方がないけど、実際の現場だともうちょいわかりやす買ったりするんかな?
2つ目はコーディングに思ったより時間がかかるということ。簡単な事は、調べずにパッと書いていかないと無駄に時間かかって作業が遅れる可能性があるっていうのが一番かな。
3つ目は基礎カリキュラムでエラー問題ひたすら解いてたのがすごい役に立ってると実感したこと。エラーが出てもエラー文見ればエラー内容にもよるけど、ほとんどの場合すぐ「ああ、ここがダメなのね」っていうのがわかるから、1分もかからずにエラーが解決する。これはほんとでかい。
...
それとコーディングしてて1つ問題があったんだけど、Font-awesome-railsのアイコンが□になっちゃって表示されなかったのよな。
調べるとgemがFont-awesome5にまだ対応してないから、アイコンを前バーションであるFont-awesome4の形式で指定しないとそうなるらしい。
%i.fas.fa-edit
ここのfas(fabやfarの時もある)を
%i.fa.fa-edit
faに変えてやると、Font-awesome4の形式になる。
難しいわっ
明日までに、サイドバーの実装は終わらせるぞ!
データベースの構造
Chat-spaceの初回コードレビューにて、テーブルの作成でボロクソに指摘受けたので、DBについて学んだことまとめる
...
3層スキーマ
スキーマとはデータベースの構造であり、3層スキーマとはスキーマを3つの階層にわけて定義する方式のこと。
概念スキーマ
- 開発者から見たデータベース。 DBの論理データやデータ同士の関係など定義する。(テーブル定義)
正規化
第一正規化
レコード内の繰り返しを避けたもの。同一カラム内にある複数の値をわけて一つのレコードにしたりする。
第三正規化
主キーに対して全ての属性が従属であり、かつ推移的関数従属(後述)も存在していないテーブル
例えば会社ID 社員ID 社員名 年齢 部署ID 部署名 で定義されたテーブルがあるとする。(アンダーラインは主キーを表す)
社員IDがわかれば部署IDがわかる。部署IDがわかれば部署名がわかる。これを従属しているという。
つまり社員IDがわかれば部署名もわかる。これを推移的関数従属といって、これを解消するのが第三正規化である。
ER図
テーブル同士の関係性を図にしたもの。
Django2.2でPyMySQLを使いたかった
原因不明のアレルギー性の蕁麻疹で更新どころじゃなかった。 治ったので再開します。
TECH::EXPERTの方の進捗も全然行けそうなので、やりたかったPythonいじりました。
PythonでWebサイトを作りたかったので、WebフレームワークであるDjangoを
この記事を利用して、勉強していた。
PyMySQLを使いたかったのでDjangoでPyMySQLを使うために、DjangoのDB関連の設定をPyMySQL用に変更した
setting.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sample', #作成したデータベースの名前を入力 'USER': 'root', #ローカルホストなのでユーザー名はroot 'PASSWORD': '', #以下はローカルホストなので空でOK 'HOST': '', 'PORT': ', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, 'TEST': { 'NAME': 'test_sample' } } }
manage.py
一番後ろに追記
import pymysql #pymysqlのモジュールをimport pymysql.install_as_MySQLdb()
ちなみに本番環境でPyMySQLを使う場合にはさらにwsgi.pyにもmanage.pyと同様の記述を追加しなくてはならない。
これで準備OK ターミナルに以下を入力
python3 manage.py migrate
けどエラー吐きよった。
ImportError: No module named pymysql
どうやらpymysqlがちゃんとimportされてないらしい。
sysにpymysqlのパスを通してもダメだった。。。。
...
解決方法
Djangoのバージョンを下げる
いろいろ調べた結果、Django2.2ではまだPyMySQLは対応していないらしく、バージョンを2.1に下げることで、解決するらしい。アンインストールしてDjango2.1をインストールして再度migrateしてみた
python3 manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK
いけた....
このエラー解決するのにかなり時間かかってた。やっと先進める。
綺麗なコードについて学ぶ
コードを書く事がこの先もっと多くなりそうなので、早いうちに他の人がちゃんとすぐ分かるように綺麗なコードの書き方について、エンジニア先輩方のqiitaの記事から引用して学びます。
...
分かりやすい名前をつける
まず、一つの変数を宣言してみる
var n;
これだけでは「これは何を格納している変数なんだ?」ってなって、いちいち全コードを見返さなくてはならない。
(for(orderCount=0;orderCount<0;orderCount++){};のようにするより、
for(n=0;n<0;n++){}; の方が分かりやすい場合もある。)
例えばこれが本を格納する変数だとすると
var book;
とすると一発で本を格納する変数だと分かる。
さらにいうと、これがどういった本なのかわかればなお良い。
var readableBook;
これだとこの変数は読む事ができる本を格納するものだと分かる。
メソッドの場合
何かに何かをするメソッドだと、動詞と名前を絶対入れるようにすると良い。
また
分かりやすくしようと意識して長くなってしまったりするけど、長すぎてもだめ。
var reservationAvailableBook;
予約可能な本を格納する変数だと分かるが、変数名が読みづらいからイライラする。
他の人に見せるので、思いやりのあるネーミングを心がける。
よく使う単語や使わない方が良い単語は下記のサイトを見て学ぼう
...
短くブロックする。
あるメソッドにデータベースからある本を取得したいメソッドを書く場合
function getBook(data){ //DBから本を取得する処理 ... //取得した本の名前をターミナルに出力する処理 }
とすると「本を取得するメソッドなのにそれ以外になんか余計な事してやがる」ってなっちゃう。
なのでコーディングしなおすと
function getBook(data){ //DBから本を取得する処理 } function outputBookName(data){ //取得した本をターミナルに出力する処理 }
とするのが良い。短くブロックすると仕様変更に強く書き換えやすい
...
他にもいろいろありすぎて一冊の分厚い本になりそうなので、ちゃんとまとめてくれてる記事を下記に貼っておく
綺麗なコードは永遠の課題となりそう...がんばろ....