feature image

2022年3月20日 | ブログ記事

GoでToDoリストを作ろう ! (Day-1)

クライアント編 → 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アプリの

ことを主眼に置いています。

ですから、WebアプリのAPI設計やGoの主要な実装については丁寧に解説しています。一方で、DBの設定やそのパラメーターといった細かい箇所は解説を省き、動くコードを提示することで代わりとしています。

使用する技術は、練習用の技術ではなく、traPで実際に使用されている技術を積極的に使用しています。つまり、より複雑なwebアプリ開発で応用できることを念頭に置いています。

使用技術

目次

  1. この記事でできるようになること
  2. 今日やること
  3. ターミナルの説明
  4. go言語のダウンロード
  5. GOPATHの設定
  6. 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/srcechoHelloWorldというディレクトリ(≒フォルダ)を作成します。これが、このプロジェクトのディレクトリになります。上で設置した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とは

このようにデーターの取得、登録、削除などをテキストの受け渡しによって行える仕組みです。デザインされたUI(クライアント、フロントエンド)はこのAPIを使ってデータを表示したり、登録の橋渡しになったりします。

URLにアクセスすると言っても、インターネットの仕様でアクセスの仕方は複数存在します。Google ChromeなどのブラウザのURLではGETというアクセスの仕方で通信します。上のプログラムのe.GET("/",GETがそれです。そのため、ブラウザでメッセージがちゃんと表示されたのです。

それ以外に、POSTPUTDELETE...などがあります。e.GET("/",GETPOSTなどに変えることによって、同じURLでもアクセスする側がアクセスの仕方を選択することによって、複数の機能を提供することができます。ブラウザのURLはGETでアクセスするため、goのプログラムをPOSTに変更するとブラウザにメッセージは表示されなくなります。

お疲れ様でした。今日はここまでです! 明日から本格的にToDoリストを作っていきます。お楽しみに〜

明日は@d_etteiu8383さんと@iroriさんの記事です。

asari icon
この記事を書いた人
asari

21B あさり☀

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2022年4月7日
traPグラフィック班の活動紹介
annin icon annin
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2022年4月5日
アーキテクチャとディレクトリ構造
mazrean icon mazrean
2022年3月29日
課題・レポートの作成、何使う?【新歓ブログリレー2022 21日目】
aya_se icon aya_se
2021年5月16日
CPCTFを支えたインフラ
mazrean icon mazrean
記事一覧 タグ一覧 Google アナリティクスについて