【備忘録】Go言語フレームワークechoを使ってAPIサーバーを構築する

# はじめに
Go言語を触れてまだ１週間ぐらいです。
echoがどのような特徴を持ったフレームワークなのかとかはまだちゃんと理解しているわけではありません。
自分用の備忘録であることにご留意ください。

# 開発環境
Go言語：version 1.20.6
OS：Windows10 Home 22H2
テキストエディタ：Visual Studio Code

# 準備
### １．Go言語をインストールする
下記URLからGo言語をインストーラ―をダウンロードしてインストールします。

https://go.dev/dl/

Featured downloadsの中の一番左の項目「Microsoft Windows」をクリックしてダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/3c46ab45-fc40-f267-0ae9-05205202934c.png)
ダウンロードしたインストーラーを実行して、手順に沿ってインストールしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/e941130d-17a9-afc7-8a44-d0fd02172fed.png)
インストールが正常に完了したら下記画像のように「Finish」が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/61d17e4d-ded2-ab3f-e38d-eca2681ef44a.png)
これでGo言語のインストールは完了です。

### ２．Visual Studio Codeの拡張機能を追加する
次にVisual Studio Codeを開きましょう。
左サイドバーに拡張機能の項目があります（４つの正方形が集まったアイコン）ので、選択しましょう。
そして上の検索欄に「go」と入力します。すると、一番上の項目に「Go」という拡張機能がヒットするはずです。（開発者の欄に「Go Team at Google」と記されています。）
これを選択してインストールボタンを押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/e982fb1a-bb80-35cd-d4ba-c18b61028986.png)

### ３．コマンドパレットから有効化する
引き続きVisual Studio Codeで作業します。
上の「表示」＞「コマンドパレット」を選択しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/b454464c-f92f-0085-760c-3ed6f0595d65.png)
検索欄が現れるので「go update」と入力して「Go: Install/Update Tools」を選択しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/63d5a788-44e2-5382-7956-c4541921c59d.png)
すると、7個ぐらい項目が出てきます。デフォルトではチェックは入ってないので、全選択してとりあえず全てにチェックを入れてOKをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/564b5084-67bc-d4cd-7d1d-60e6855cc71d.png)
完了したら念のため再起動しましょう。
上の「ファイル」＞「終了」を選択してVisual Studio Codeを終了させてから、再度起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/8de6add1-cbac-21c6-6226-c834015bfc95.png)

# 環境構築
さて準備が整いました。環境構築に移っていきましょう。

### １．Go言語用のフォルダを作る
まず最初に今後、いろいろ格納していくためのGo言語用フォルダを作ります。
私は、`C:\Users\{user_name}`の配下に`go-lang`というフォルダを作りました。
この中にGo言語関連のいろいろを入れていきます。

### ２．Visual Studio Codeでターミナルを開く
Visual Studio Codeに戻りましょう。
上の「ファイル」＞「フォルダを開く」を選択して、先ほど作った`go-lang`フォルダを選択しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/2dd3da08-009f-a71d-196b-ff0ac534528e.png)
すると`go-lang`フォルダの中身が左サイドに表示されます。（現在、`go-lang`フォルダの中身には何も入っていないため、何も表示されていませんが。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/e4bfdc36-abd5-1701-bd1e-e7bd062584da.png)
次に、新規ターミナルを開きます。（既に開かれている場合もあります。その場合ここは飛ばして構いません。）
上の「表示」＞「ターミナル」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/43217517-bf5b-e8e5-a1f9-518f1829791b.png)
すると下部にターミナル画面が出現するはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/41b712c1-89e5-f80e-7c57-6f764e7cf1ba.png)
次はこのターミナルにコマンドを入力していきます。

### ３．新しいディレクトリを作成して現在のディレクトリから移動する
下記コマンドをターミナルに入力してEnter。新しいディレクトリを作成します。
```:ターミナル
mkdir echo-test
```
`echo-test`の部分は任意のフォルダ名で大丈夫です。私は分かりやすいように`echo-test`にしました。
こんな感じの画面になるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/f9ad2f29-f1d5-9d83-71e7-e6fc998c539b.png)
そして`go-lang`フォルダの中には、`echo-test`フォルダができているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/4e7cfadb-9f5a-d4da-85dd-76b5972d1d6e.png)
それでは、作業ディレクトリを`go-lang`フォルダから`echo-test`フォルダに移動します。
下記コマンドを入力しましょう。
```:ターミナル
cd echo-test
```
すると作業ディレクトリに変化が見られますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/a022f357-d483-7f10-c927-18e471ca39d0.png)

### ４．モジュールの初期化
次に、モジュールの初期化のために下記コマンドを入力しましょう。
```:ターミナル
go mod init echo-test
```
すると、現在のディレクトリ（`echo-test`フォルダ）に`go.mod`ファイルが生成されていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/a0d8742c-f91a-75bf-3f0e-0c0307715b21.png)

### ５．echo及びechoのmiddlewareをインストールする
下記コマンドでまずはechoをインストールしましょう。
```:ターミナル
go get github.com/labstack/echo/v4
```
すると、現在のディレクトリ（`echo-test`フォルダ）に`go.sum`ファイルが生成されていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/33b23676-d40c-2444-db18-439e07f14742.png)
同じ手順で下記コマンドを入力してechoのmiddlewareもインストールしなければなりません。
```:ターミナル
go get github.com/labstack/echo/v4/middleware
```

# 実装
`echo-test`の配下に新しいファイルを作成しましょう。`server.go`という名前をつけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/854ce559-9d66-da35-e6c6-20e7639c4ed7.png)
`server.go`にはまだ何も記述されていませんから以下のコードをコピペしてください。
```go:server.go
package main

import (
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)

func main() {
  // インスタンスを作成
  e := echo.New()

  // ミドルウェアを設定
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // ルートを設定
  e.GET("/", hello) // ローカル環境の場合、http://localhost:1323/ にGETアクセスされるとhelloハンドラーを実行する

  // サーバーをポート番号1323で起動
  e.Logger.Fatal(e.Start(":1323"))
}

// ハンドラーを定義
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}
```
これを`Ctrl＋S`で保存しましょう。

# 実行
それでは早速実行してみましょう。ターミナルで下記コマンドを実行しましょう。
```:ターミナル
go run server.go
```
以下のような画面がターミナルで表示されたら、サーバー起動成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/bd1e8a72-f2f3-4fd5-5b75-f1d66fd297ed.png)
ブラウザで http://localhost:1323/ にアクセスしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511208/b9f4efd1-a716-ccfa-150b-98dbec631592.png)
「Hello, World!」が表示されました。
これでAPIサーバーとの通信を確認できたことになります。

# まとめ
初めてのQiita投稿なので初学者でも分かるように少々説明がくどくなりましたが、次回からはもっと簡潔に書こうと思います。
プログラミング経験はまだ１年にも満たない初学者ですが、よろしくお願いします。
もっとこうした方がいいとかアドバイス等ありましたら、コメントお待ちしております。
それでは～👋

# 参考
【Go】echoを使ってAPIサーバーを3分で構築してみる

https://zenn.dev/def_yuisato/articles/echo-get-started