クライアント編 → https://trap.jp/post/1487/
次回 → https://trap.jp/post/1302/
Github → https://github.com/Irori235/ToDoList-Server/tree/day-1
この記事は新歓ブログリレー12日目の記事です。
21Bのasariです。普段はSysAd班でweb開発をしています。
フロントエンドに続き、ToDoアプリのバックエンドをGo言語を用いて実装していきます。全4日間です。
Go
Go(Golang)は、Googleにより開発されたwebサーバー構築に特化した言語です。Goは比較的新しい言語であり、シンプルかつ高速です。近年非常に流行していて、Google、PayPal、Netflix、mercariといったあらゆるサービスで利用されています。
この記事でできるようになること
この記事では、簡単なwebアプリの
- 設計ができるようになる
- Goで実装できるようになる
ことを主眼に置いています。
ですから、WebアプリのAPI設計やGoの主要な実装については丁寧に解説しています。一方で、DBの設定やそのパラメーターといった細かい箇所は解説を省き、動くコードを提示することで代わりとしています。
使用する技術は、練習用の技術ではなく、traPで実際に使用されている技術を積極的に使用しています。つまり、より複雑なwebアプリ開発で応用できることを念頭に置いています。
使用技術
- Go 1.17
- mySQL
- Echo
- Gorm
- Docker
目次
- この記事でできるようになること
- 今日やること
- ターミナルの説明
- go言語のダウンロード
- GOPATHの設定
- EchoでHelloWorld!
今日やること
go言語をインストールして、簡単なプログラムを書いていきます!
ターミナルの説明
Windowsを使っている場合はこの記事→ [ 新歓ブログリレー ] WSL をインストールしよう! を参考にWSLをインストールしてください。
コマンドの文法は、WindowsでWSLを使う場合と、Macの場合とで共通です。Macでは標準でTerminalがインストールされています。上の記事に基本的なコマンドが紹介されているので、実際に試してみて慣れていきましょう。重要なファイルを削除してしまわないように注意しましょう。とはいっても無闇矢鱈にrm
を連打しなければ大丈夫です。
go言語のダウンロード
goのバージョンは1.17.8をインストールしていきましょう。
WindowsのWSLにgo言語をインストールするには、 https://pleiades.io/help/go/how-to-use-wsl-development-environment-in-product.html#wsl-general の3と4を参考にしてください(1.17.1を1.17.8に置き換えましょう)。また、上の新歓ブログリレーの記事を参考に、
echo 'export PATH=$PATH:/usr/local/go/bin' >> .bash_profile
をホームディレクトリで実行してパスを通します。パスを設定しても、ターミナルを再起動するまでは反映されません。GOPATHの設定は次のセクションで説明します。
Macの場合は「golang download」のように検索して、go言語のホームページのインストーラーを実行することで、インストールした後にパスを自動で通してくれます(1.17.8のインストーラーをダウンロードしましょう)。
コマンドgo version
を実行して、バージョンが表示されたらインストールが正しくできています!
GOPATHの設定
goで開発をしていくためには、まず環境変数GOPATH
を設定する必要があります。
GOPATH
はgoのプロジェクトを管理しやすくする目的で、goで開発するときに使うディレクトリを設定します。設定した後は、goのプロジェクトのディレクトリを$GOPATH/src
の中に置いていきます。
例えば、GOPATH
を/Users/ユーザー名/go
で設定した場合、プロジェクトawesomeProject
の中のgoのソースコードmain.go
は次のような位置に配置されます。
$GOPATH/src/awesomeProject/main.go
# $GOPATHが「/Users/ユーザー名/go」の場合
/Users/ユーザー名/go/src/awesomeProject/main.go
GOPATH
の設定はWindowsでWSLを使っている場合も、Macを使っている場合も同じようにできます。
まずはこれから、goのプロジェクトを管理していくディレクトリを作成しましょう。ルートディレクトリなどでmkdir go
を実行します。cd go
を実行して今作ったディレクトリに移動しpwd
を実行すると、現在のディレクトリのフルパスが表示されます。これをGOPATH
に設定します。
cd
を実行してホームディレクトリに移動し、次のコマンドを実行します。
ただし、シェルをbashではなくてzshを使っている場合は、.bash_profile
を.zshrc
に置き換えてください。使っているシェルはecho $SHELL
を実行して確認できます。
echo 'export GOPATH=/Users/ユーザー名/go' >> .bash_profile
GOPATHを確認
上のコマンドでGOPATH
を設定したら、ターミナルを再起動して設定を反映します。ターミナル起動時に.zshrc
や.bash_profile
が読み込まれるため、設定ファイルを編集したらターミナルを再起動する必要があります。(再起動せずとも反映するsource
コマンドというものもあります。)
echo $GOPATH
を実行して、設定したディレクトリのパスが表示されたら、正しくGOPATH
が設定できています!
EchoでHelloWorld!
goのダウンロード、GOPATHの設定ができたら、早速プログラムを書いていきましょう!
プログラムを書くツールとしてはVSCodeなどが有名です。自分のPCに入っていない人はダウンロードしましょう。VSCodeにgo言語用の拡張機能を追加するとプログラミングしやすくなります!
今から作るプログラムで、Webサービスの一番基本の機能である「URLにアクセスしたら情報が受け取れる」という機能を体感できます!
1. ディレクトリ作成
$GOPATH/src
にechoHelloWorld
というディレクトリ(≒フォルダ)を作成します。これが、このプロジェクトのディレクトリになります。上で設置したGOPATH
の中のsrc
というディレクトリの中にディレクトリを作ることがgoのプロジェクト管理の基本です!
mkdir $GOPATH/src
cd $GOPATH/src
mkdir echoHelloWorld
cd echoHelloWorld
2. go mod init
作成したディレクトリにいる状態でgo mod init
を実行します。go.mod
というファイルが作成されます。このファイルにはこのgoプロジェクトで使っていくライブラリ(依存プログラム)が記載されます。
$GOPATH/src
の中にいない場合、このコマンドはエラーになるはずです。
$GOPATH/src
以外の場所にプロジェクトを作成・配置することもできます。その際には、プロジェクトを作成するときにgo mod init <パッケージ名>
のように「パッケージ名」を指定する必要があります。
$GOPATH/src
以下のディレクトリでgo mod init
を実行した場合、src
より下のディレクトリパスがパッケージ名として自動で指定されます。そのため今の例では、echoHelloWorld
がパッケージ名として設定されています。
3. main.goの作成、編集
goプログラムを書いていきます!
go.mod
と同じ場所にmain.go
を作成して次のようにプログラムを書きます。
package main
import "github.com/labstack/echo/v4"
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
4. go mod tidy
go mod tidy
を実行します。goプログラムに使われているライブラリを自分のPCで使える状態にします。
5. go build
go build -o main
を実行します。プロジェクトのgoプログラムをコンパイルして実行ファイルを作成します。
6. 実行
./main
を実行します。コンパイルで作成された実行ファイルmain
を実行します。
7. アクセス
ブラウザでhttp://localhost:1323/
にアクセスしてみましょう!
ターミナルでは、./main
を実行したため、コマンドを実行できない状態になっていると思います。プログラムの実行を止めるためにはcontrol+C
を押します。(シェルでコマンドが打てない状態から抜け出したいときにcontrol+C
は役立ちます。)
プログラムの説明
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, World!")
})
"/"
の部分を変更することで、アクセス先のURLを変えることができます。
例えは"/hello"
に変えると(プログラムを変更したらコンパイルを再度実行して、新しい実行ファイルを実行する必要があります)ブラウザでhttp://localhost:1323/hello
にアクセスするとメッセージを受け取れるようになります。
Webアプリケーション(サーバーサイド)ではこの仕組みをベースに、return c.String(200, "Hello, World!")
のデータを返却する部分が複雑になることで、さまざまな機能を持つようになります。ブラウザでアクセスする多くのWebページはデザインされていますが、サーバーサイドの役割は文字だけでデータのやりとりをすることです。
Web APIとは
http://localhost:1323/api/users
にアクセスすると、ユーザーのリストが取得できるhttp://localhost:1323/api/tasks
にアクセスすると、タスクのリストが取得できる
このようにデーターの取得、登録、削除などをテキストの受け渡しによって行える仕組みです。デザインされたUI(クライアント、フロントエンド)はこのAPIを使ってデータを表示したり、登録の橋渡しになったりします。
URLにアクセスすると言っても、インターネットの仕様でアクセスの仕方は複数存在します。Google ChromeなどのブラウザのURLではGET
というアクセスの仕方で通信します。上のプログラムのe.GET("/",
のGET
がそれです。そのため、ブラウザでメッセージがちゃんと表示されたのです。
それ以外に、POST
、PUT
、DELETE
...などがあります。e.GET("/",
のGET
をPOST
などに変えることによって、同じURLでもアクセスする側がアクセスの仕方を選択することによって、複数の機能を提供することができます。ブラウザのURLはGET
でアクセスするため、goのプログラムをPOST
に変更するとブラウザにメッセージは表示されなくなります。
お疲れ様でした。今日はここまでです! 明日から本格的にToDoリストを作っていきます。お楽しみに〜
明日は@d_etteiu8383さんと@iroriさんの記事です。