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年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
2022年4月5日
アーキテクチャとディレクトリ構造
mazrean icon mazrean
2022年3月29日
課題・レポートの作成、何使う?【新歓ブログリレー2022 21日目】
aya_se icon aya_se
記事一覧 タグ一覧 Google アナリティクスについて