プログラマー VTuber 衣亥栖ティオのちょっとした話

Youtubeに投稿したプログラミング学習動画の補足説明をするためのブログです。

プログラマーへの道 #63 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

前回からの差分は以下のURLから検索することができます。 "プログラマーへの道" の動画番号を "Filters" に追加して検索してください。

https://github.com/tio-iis/sample-backend-server/pulls?q=is%3Apr+is%3Aclosed

f:id:iis_tio:20211204143415j:plain:w300

全体は以下のURLのタグ検索機能で確認することができます。 "プログラマーへの道" の動画番号を "Find a tag" に指定して検索してください。

https://github.com/tio-iis/sample-backend-server

f:id:iis_tio:20211204143619j:plain:w300

curlの正体

動画内でバックエンドサーバにブラウザでもアクセスできるという説明をしました。 ここで curl の正体が分かったかなと思っています。 curl は HTTP リクエストを送信するためのコマンドです。

https://ja.wikipedia.org/wiki/CURL

HTTP リクエストというはブラウザがWebサイトを表示する際にバックエンドサーバに送信している通信のことでもあります。 言い換えると、curl は "ブラウザがWebサイトを表示する際にバックエンドサーバに送信している通信を送信できるコマンド" です。 開発中に curl を利用する機会はとても多いので、これはエンジニアにとって必須のコマンドです。 今後も開発でも使っていくので覚えておきましょう。

ブラウザとポート番号

バックエンドサーバにアクセスする際に "8080" という数字を付けていますが、これをポートといいます。

https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%88_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF)

実はブラウザでWebページを表示する際のURLにもポートが必要なので、本来であれば "https://github.com/" というURLにもポートを指定する必要があります。 ポートは通信形式によって利用する数字が決まっており、https の通信の場合は 443 を指定します。 そのため、本来であれば "https://github.com/" は "https://github.com:443/" でなければいけません。 試しに "https://github.com:443/" をブラウザで表示してみてください。 正常に GitHub のページが表示されるはずです。 では、なぜ普段 443 を指定しなくてもいいのかというと、ブラウザの通信は443を利用するというのが決まっているので、ブラウザが空気を読んで 443 を付けてくれているからです。

"ブラウザ(https通信)は 443 を利用する" というように決まっているポートを Well Known Port といいます。

https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7

http は 80 で、ssh 22 で、mysql は 3306 というように有名な通信形式はポートが決まっているので、 エンジニアは大体このポートを覚えています。

favicon について

favicon の説明を以下に載っています。 favicon はなくてもいいものですが、あったほうがかっこいいので、Webサービスを開発するときは大体この favicon を用意することになりますね。

https://ja.wikipedia.org/wiki/Favicon

プログラマーへの道 #62 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

前回からの差分は以下です。

https://github.com/tio-iis/sample-backend-server/pull/2/files

全体は以下です。

https://github.com/tio-iis/sample-backend-server/tree/tag62

サーバは動き続ける

バックエンドサーバは起動したあとに動き続けるので、http.ListenAndServe() を実行すると、そこで処理が止まってしまいます。 サーバを起動する前に必要な処理は http.ListenAndServe() よりも前に実行しておきましょう。

http.HandleFunc() について

動画内でも説明したとおり、http.HandleFunc() は第一引数にパスを指定し、第二引数に実行対象の処理を指定します。

https://pkg.go.dev/net/http#HandleFunc

第二引数である実行対象の処理は以下のような定義になっていて、ResponseWrite, Request を引数に持つ func である必要があります。

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

なので、バックエンドサーバでは以下のように "ResponseWrite, Request を引数に持つ func" を定義して、それを HandleFunc() に指定しています。

func countHanlder(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, count)
}

プログラマーへの道 #61 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

前回からの差分は以下です。

https://github.com/tio-iis/sample-backend-server/pull/1/files

全体は以下です。

https://github.com/tio-iis/sample-backend-server/blob/tag61/main.go

Go言語の雛形について

Go言語はmain関数と呼ばれる関数から処理が始まり、ファイルの最初には package の定義を記載する必要があります。 利用するライブラリは import で読み込む必要があります。 動画でも説明したとおり、import はエディタによって自動的に補完されますが、その他は自分で書かなければいけません。 私は暗記していますが、そうでない方は以下の Go Playground からコピペするのがいいと思います。

https://go.dev/play/

コピペしたプログラムに対して "go run" を実行すると、それだけで動くプログラムを手に入れることができるので、 あとは自分の書きたいプログラムを追記していくだけです。

プログラマーへの道 #60 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

https://github.com/tio-iis/sample-backend-server/blob/94d42cb2d03fd53ce29669789442a721ef0ca466/main.go

バックエンドサーバについて

動画ではバックエンドサーバを実装して、curl でサーバにアクセスしてみました。 curl でのアクセスに対してバックエンドサーバは "hello" などの値を出力しています。 "何かしらのアクセスに対して、何かしらの応答を返す" という働きがバックエンドサーバの基本となります。 これをメモ帳アプリに応用すると、"このメモを登録して" というアクセスに対して "登録しました" という応答を返すことができたりします。

curl について

動画内では curl を利用してバックエンドサーバにアクセス(動作確認)をしました。 curl というコマンドはHTTPリクエストを送信するためのコマンドです。 今までの動画ではHTTPという仕組みについて紹介していなかったので、単に "バックエンドサーバにアクセスするために利用するコマンド" という紹介をしています。 HTTPという仕組みを紹介する際にcurlについても説明しようと思っています。

PuTTyの画面を2つ開いた理由

バックエンドサーバを起動する際に "go run main.go" というコマンドを実行するのですが、 バックエンドサーバは起動すると常に動き続けている関係上、curl コマンドを実行できません。 curl コマンドを実行するために PuTTy を別で開きました。

count という変数と生存期間について

動画内では以下の count という変数をインクリメントすることで、バックエンドサーバが値を保持できることを説明しました。 https://github.com/tio-iis/sample-backend-server/blob/94d42cb2d03fd53ce29669789442a721ef0ca466/main.go#L8

この値をメモ帳アプリのメモに置き換えることで、メモ帳アプリでユーザーが入力したメモをバックエンドサーバに保存することができます。 しかし、こうして保存したメモもバックエンドサーバを停止させてしまうと消えてしまいます。 そのため、一般的なWebサービスではDB(データベース)というものを利用してユーザーの入力情報が消えないようにしています。 DBはそれ自体複雑なものなので、動画で取り上げるのは少しあとになりそうです。

プログラマーへの道 #59 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

ソースコードはありません。

Ubuntuについて

Ubuntuの公式サイトは以下です。

https://www.ubuntulinux.jp/

UbuntuはデスクトップPCのOSとして利用できるので、Windowsの代わりに利用している方もいますね。

https://www.ubuntulinux.jp/ubuntu/features

Web系エンジニアはデスクトップPCのOSというよりも、バックエンドサーバを動かすためのOSとして利用することが多いです。 Web系エンジニア同士の会話で Ubuntu と言うと大体サーバの方を指します。 https://www.ubuntulinux.jp/ubuntu/server

CentOS Stream について

Ubuntu と人気を二分するOSとしてCentOSというOSがあります。 日本では特に人気だったりします。 実は私も Ubuntu よりも CentOS の方が慣れています。

しかし、最近このCentOSの開発が終了するという発表がありました。 これはエンジニアにとっては結構びっくりする発表なんですよね。 一応CentOS Streamという別の形で残っていくようですが、今度どうなるか心配です。 私の開発環境にUbuntuを選んだのはこの点も影響がなかったわけではありません。

https://qiita.com/yamada-hakase/items/1629d511ab4199d253b4

SSHについて

SSHの説明は以下です。

https://ja.wikipedia.org/wiki/Secure_Shell

詳しい説明は省略しますが、遠隔地にあるサーバに接続する際には大体この仕組みを利用します。 SSHを利用するには何かしらのツールを利用する必要があります。 有名なのは PuTTY というツールです。 私が動画内で利用しているのもこれです。

プログラマーへの道 #58 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

ソースコードはありません。

クラウド企業について

動画内で紹介したクラウドは以下です。

GCP(Google Cloud Platform)

https://cloud.google.com/gcp/?hl=ja

AWS(Amazon Web Service)

https://aws.amazon.com/jp/

Azure(Microsoft Azure)

https://azure.microsoft.com/ja-jp/

さくらインターネット

https://www.sakura.ad.jp/

クラウド企業のシェアについて

GCP, AWS, Azure のシェアについての記事が以下にありました。

https://www.publickey1.jp/blog/21/aws32azure19google_cloud73620211canalys.html

AzureのシェアがGCPよりも高くなっていますが、 私の経験上、Web系の開発では Azure を利用することは少ないと思います。 大体GCPAWSです。 Azureはエンタープライズ領域で強みがあるので、全体的なシェアとしてはGCPよりも高くなっているのだと思います。 どちらも大体同じような機能を備えていますが、 それぞれ細かい部分で優劣があるので、どちらを利用するかを判断するのもエンジニアのスキルの1つになります。

クラウドの利用料について

クラウドの利用料はすべてネット上に公開されているので、利用する前に試算することができますが、利用するサービスの種類や利用する時間によって単価が変動するので、意外と試算するのは面倒だったりします。 以下はGCPの料金表です。

https://cloud.google.com/pricing/list?hl=ja

GCPの場合は以下のような試算サイトがあります。

https://cloud.google.com/products/calculator

クラウドを利用しない企業について

動画内でも紹介したようにYahooさんは主にオンプレ(自分たちでサーバを管理する方法)です。

https://techblog.yahoo.co.jp/entry/20191217789983/

DeNAさんはオンプレからクラウドにシフトしたようです。

https://japan.zdnet.com/article/35170552/

NetflixAWSを利用しているようですね。

https://aws.amazon.com/jp/solutions/case-studies/netflix/

プログラマーへの道 #57 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

動画に登場したGoのアプリケーションは以下です。

https://github.com/tio-iis/go-sample