見出し画像

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

こんにちは、@hiroki_maekawaです。

さて、今週の目標は下記のようなので、早速進めていきたいと思います!

・RestfulAPIの構築
・http経由でデータのやりとり
・golangからmysqlに接続

今日の目標

・今週何をすればいいのか?全体像をつかむ
・Go Modulesを新しいディレクトリで実行する
・コードレビューの確認


1. 今週何をすればいいのか?全体像をつかむ

まずは分からない単語を調べてみました。

そもそもRESTfulAPIとは?
色々ググってみたところこんな感じ。

・RESTfulAPI=REST API。
・REST APIでの呼び出しインターフェースのこと。
・RESTの原則に沿った形で設計されたAPIのこと。
・クライアントとサーバー間でデータを送受信する方式のこと。
・HTTPメソッド(GET、POST、PUT、DELETE)で表現するもの。
・Webシステムを外部から利用するためのプログラムの呼び出し規約(API)の種類の一つで、RESTと呼ばれる設計原則に従って策定されたもの。
・「作成(Create)」「読み出し(Read)」「更新(Update)」「削除(Delete)」ができる。

→RESTという設計思想に基づいて作られた、クライアントとサーバー間でデータをやり取りする時に使うAPI(他のソフトウェアと機能を共有できるようにしたもの)。httpを使います。と理解。

httpとは?

こちらは「ITパスポート試験」を勉強した時に学びました。通信プロトコル。通信する時の決まり事というイメージ。


その後"Go RestAPI"とググり進めていくと、下記サイトを発見し、まずは環境構築→RESTAPIの実装になるのではと仮説を立てました。

色々と試行錯誤しながらやっていきたいと思います。

(その他にも、フレームワークのGinを使うと、APIをいい感じに実装できるらしいといったサイトがあったのでメモ。)


2. Go Modulesを違うディレクトリで実行する

go mod init したところGOPATHの設定をしていなかったことが判明したので、GOPATHの設定について調べていきたいと思います。以前PATHの設定を行ったのですが、パスについての知識が飛んでしまっていたので、、この際復習も兼ねてやっていきます。

(base) HirokinoMacBook:hiromae_week_3 hirokimaekawa$ go mod init
go: cannot determine module path for source directory /Users/hirokimaekawa/season-three/hiromae_week_3 (outside GOPATH, module path must be specified)

【用語】GOPATHとは、Goのソースを取りまとめておく場所を指定する環境変数のことであり、今回の場合、go mod initを実行するために設定する必要があるものと理解。(GOPATHを設定しないとgo mod initが実行できない。)

今自分のパソコンにある環境変数を確認($ printenv)

$ printenv

実はこのprintenvコマンドも/usr/bin/printenvと打っても実行できるが、環境変数$PATHに設定されているため、printenvだけで実行することができている。

確認の方法($ printenv PATH)

(base) HirokinoMacBook:hiromae_week_2 hirokimaekawa$ printenv PATH
/Users/hirokimaekawa/opt/anaconda3/bin:/Users/hirokimaekawa/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/hirokimaekawa/myprojects/mydrivers

↑この中に/usr/binがあるためですね。
また普段ここまで遡らないですが、確かに/の中にもuseが確認できます。

(base) HirokinoMacBook:/ hirokimaekawa$ ls
Applications			etc
Library				home
Network				installer.failurerequests
System				net
Users				private
Volumes				sbin
bin				tmp
cores				usr
dev				var

その後/usr/bin/printenvまで探してみると、、

(base) HirokinoMacBook:/ hirokimaekawa$ cd usr
(base) HirokinoMacBook:usr hirokimaekawa$ ls
bin		lib		local		share
include		libexec		sbin		standalone
(base) HirokinoMacBook:usr hirokimaekawa$ cd bin
(base) HirokinoMacBook:bin hirokimaekawa$ ls

//沢山あったので色々省略
printenv

確かにありました。

GOPATHも設定していきます。

go mod initを通すことがゴール→modはここにあったので、

/Users/hirokimaekawa/go/pkg/mod

GOPATH=/Users/hirokimaekawa/goを通してみます。

$ export 定義したい環境変数の名前=環境変数の中身
$ export GOPATH=/Users/hirokimaekawa/go

通らなかったので

$ export GOPATH=$HOME/go

これでも通らず調べたところ、vimを使って環境変数を設定しなければいけないことが分かりました。

ここからはvimの操作方法を調べながらやっていきます。

//編集画面を開く
$ vi ~/.bash_profile

//入力モードに切りかえ
 i

//PATHを追加
GOPATH=/Users/hirokimaekawa/go

//保存と終了
:wq

//保存しないで終了
:q

//もし何かあったら
esc

//その後反映させる
$ source ~/.bash_profile

//GOPATHを確認
$ printenv GOPATH もしくは $ echo $GOPATH

これでGOPATHが設定できたので、再びgo mod initが通るか確認

(base) HirokinoMacBook:hiromae_week_3 hirokimaekawa$ printenv GOPATH
/Users/hirokimaekawa/go

(base) HirokinoMacBook:hiromae_week_3 hirokimaekawa$ go mod init
go: cannot determine module path for source directory /Users/hirokimaekawa/go/season-three/hiromae_week_3 (outside GOPATH, module path must be specified)
Example usage:
	'go mod init example.com/m' to initialize a v0 or v1 module
	'go mod init example.com/m/v2' to initialize a v2 module
Run 'go help mod init' for more information.

またエラーや〜
質問してみたところ、リポジトリをここに作る必要があるみたいでした。

/Users/hirokimaekawa/go/src/github.com/season-three/hiromae_week_3

調べたところ、ソースコードはsrc内に保存する必要があるとのことでしたが、なぜgithub.com内に入れなければいけないのか分からず、、

理由は「goのライブラリ管理がgithubに依存しているため、github.comに入れる必要がある」ということでした。とりあえず今のところはと覚えておくだけでOKとのことだったので、ここに備忘録としてメモしておきます。

github.com/{organization}/{repository_name}

レポジトリを移動して、これでようやく

$ go mod init
$ go build 

無事go.modファイルとgo.sumファイルができてくれました。

スクリーンショット 0032-06-09 16.19.42


3. コードレビューの確認

そもそも以前書いたテストコードがエラーだらけだったので、まずは実行できる状態に書き直しました。「エラーコードの意味を自分で調べて→修正」といった作業ができるようになっていたので、嬉しかったです。

またレビューの内容は「テストをループ処理するところに、関数を書くことで(=なんの関数をテストするかを明らかにすることで)、他の人が見て分かりやすくするという意味がある」ということを理解しました。


今日できるようになったこと

・vimを使ってGOPATHの設定
・エラーへの対処(以前よりましに)


さいごに

またもPATHでハマってしまった1日でしたが、良い復習になりました。また、以前よりエラーへの対処ができるようになっているのが収穫でした。

明日はいよいよREST APIの構築、環境構築からやっていきます。
それではまた!

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