見出し画像

エンジニア採用担当がプログラミング頑張る話【6日目/2ヶ月間】

こんにちは、@hiroki_maekawaです。

今日は所用で夜21時からのスタートになりましたが、最近はちょっと外が明るくなり始めてから寝ています。夜中だと雑念がなく、日中より集中できるんじゃないか?という気がしてます。

それでは引き続き頑張っていきたいと思います。

今日の目標

1. 昨日出たスクレイピングの疑問点に関する理解

2. MySQLの理解
・MySQLで何ができるのか?
・今週MySQLを使って何をしなければならないのか?
・実際にMySQLを書いてみる


1. 昨日出たスクレイピングの疑問点に関する理解

・疑問1つ目

スクリーンショット 0032-05-28 22.36.28

おっしゃる通りでした。昨日はgoqueryの恩恵を受けてコード書いてる感ゼロだったので、ただタイトルから文字引っ張ってくるだけじゃなくて、複雑なスクレイピングを可能にするgoqueryを書きたい。。(これはMySQLの理解が終わったらやる。)

・疑問2つ目
エラーハンドリングするぞー!と思い下記コードを書いたらエラー、なぜ、、

title, err := doc.Find("title").Text()

質問してみたところ、答えが

スクリーンショット 0032-05-28 22.40.31

→「。。。?」となり、自分の関数に関する理解が浅かったのか、新たに下記2つの疑問が出てきました。
①なぜText()関数にはerrorが飛んでくることはないのか?
②errorが飛んでくる関数と飛んでこない関数には何か違いがあるのか??(どのように見分ければ良いのか?)

Goは返り値を複数出せたり、返り値の型を指定できたりすることができることは分かっていましたが、エラーハンドリングについてはまだまだ場数が必要なんでしょうか。。

2. MySQLの理解

今日やりたいことは下記。
①MySQLで何ができるのか?
②今週MySQLを使って何をしなければならないのか?
③実際にMySQLを書いてみる


①MySQLで何ができるのか?
下記、ドットインストール(オンライン講座)で学んだことのメモを書いていきます。
・MySQLはOSSのデータベースシステム。
・help; で使えるコマンドを表示できる
・画面クリアはcontrol+l
・select user();でユーザー情報確認
・->で消したい場合は\c (macでは\はoption+¥)
・\qもしくhはquitでMySQL終了
・MySQLではデータを管理するためにデータベースを作る
・DBの中にTableを作ってデータを格納していく
・Tableは複数作成可能
・表のようにidやtitleやbodyと分けて格納する
・行(よこ)のことをRecord / Rowという
・列(たて)のことをField / Columnという
・Tableや行、列を扱う言語をSQLという
・mysql -u root -p; で起動(rootユーザーの場合)
・DBを作る際はcreate database ”DB名”; 
・show databases; でDB一覧が見える
・drop database ”DB名”; でDBを削除できる
・今操作しているDBを確認 select database();
・DBを扱うためには操作対象を指定する use ”DB名”;
・MySQLサーバーに投げるコマンドをクエリと呼ぶ
・DB毎に作業ユーザーを指定するのが一般的(#4)
・mysql -u "ユーザー名" -p "DB名"で起動

この後、オンライン講座に出てくる「外部ファイルに書いてあるコマンドを実行する方法」の意味を理解することができず、一旦ここでストップ。②今週MySQLを使って何をしなければならないのか?に移り、それに必要な基礎知識は都度キャッチアップしていくことにしました。


②今週MySQLを使って何をしなければならないのか?
③実際にMySQLを書いてみる

スクリーンショット 0032-05-28 23.20.15

昨日スクレイピングを行なって、クローラーを作ることができたと思うので、スクレイピングしたものをMySQLとGoを使ってデータベースに入れるんだろうなと予想。下記手順で作業を進めていきました。

既にHomebrewはインストールしてあるので、早速下記コマンドでMySQLをインストール。セキュリティ設定などやって準備完了です。

$ brew install mysql
$ mysql.server start
$ mysql_secure_installation   ///セキュリティとパスワード設定
$ mysql -uroot -p   ///最後にこれ打って、パスワード打って準備完了

・コマンドで"scraping"というスクレイピング専用のDBを作成。(ユーザー名も"scraper")

mysql> CREATE DATABASE scraping;
CREATE USER scraper@localhost IDENTIFIED BY "パスワード";
GRANT ALL PRIVILEGES ON scraping.* TO scraper@localhost;

その後"scraping"というDBの中に"scraping.go"というTableを作成。(今回は簡単な2列のもの)
(左から、id(列名)、int(データ型)、AUTO_INCREMENT(制約:自動的に値が1ずつ増えていく設定))

CREATE TABLE scraping.go (
   id INT AUTO_INCREMENT,
   content TEXT
);

ただ、これだと下記エラーが出る、、、

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

ググったら、キー設定がされていないとダメみたいで、主キー設定を試行錯誤してみました。

CREATE TABLE scraping.go (
 id INT AUTO_INCREMENT PRIMARY KEY,
 content TEXT
);

 これでようやくいけました。。(意識もうろう)

mysql> show tables;
+--------------------+
| Tables_in_scraping |
+--------------------+
| go                 |
+--------------------+
1 row in set (0.02 sec)
mysql> desc go;
+---------+------+------+-----+---------+----------------+
| Field   | Type | Null | Key | Default | Extra          |
+---------+------+------+-----+---------+----------------+
| id      | int  | NO   | PRI | NULL    | auto_increment |
| content | text | YES  |     | NULL    |                |
+---------+------+------+-----+---------+----------------+
2 rows in set (0.04 sec)
mysql> 


・その後、昨日書いたgoファイルからMySQLに接続するために、ドライバをインストール。

$ go get github.com/go-sql-driver/mysql

・goファイルからMySQL接続を試みる

下記サイトを参考に、gormのインストールを行い、goファイルからMySQL接続を無事確認することができました。


さいごに

この後、下記手順で今週の課題の最後までいけるのではと予想しました。何とか明日完成まで辿り着けるように頑張っていきたいと思います!

・構造体の作成
・データを追加
・そしたらgoでrunした結果がDBのTableに保存されてるか??確認
・テストを書く

それではまた!

この記事が気に入ったらサポートをしてみませんか?