プログラミング奮闘記

難しいと評判!初心者がN予備校でプログラミングを学んだ感想と備忘録!
No.24:HTTPサーバー

N予備校 プログラミングコース 第24回

あなたは2019年の目標って立てましたか?
どんな目標を立てたか覚えていますか?

私は2018年末に2019年の目標を立てました。
その一つにプログラミングを学び仕事として使えるようにすることをあげました。
そして、思い立ったが吉日と「N予備校のプログラミングコース」を申し込みました。

そして受講と同時に自身の振替と、これから始めようと考えている人の参考になればとブログを書き始めました。
今回ブログの移設にともない、再度そのブログを読み返しながら、今思うことを加えて記載していきたいと思います。

また私が受講したのは【2018年度】で、現在公開されている【2019年度】との違いについても書いていきたいと思います。

このブログは、初心者が学びながら書いているため、間違っている場合があります。
分かり次第修正していくつもりです。

そのあたりも含め楽しんでいただければと思います。 

最後に進めていてわからなかったところや気になったところをまとめています。

プログラミング入門 webアプリコース 第24回

前回は、再起動しても情報が保持されるボットプログラムを作成しました。
今回はWebサービスを提供するうえで必要なHTTPサーバーを利用したプログラミングについて学びます。

  • 今回の内容まとめ(第3章 10)
    ・HTTPサーバーについて
    ・ログについて

  • 今回の目標
    HTTPサーバー利用したプログラミングを作成し、サーバーでトラブルがあった際などの情報を記録したログを取得するプログラムを作成します。 

  • 今回新しく扱っているコマンド等
    ・createServer
    ・user-agent
    ・writeHead
    ・listen関数

HTTPサーバーについて

HTTPとは、Hyper Text Transfer Protocolの略称で、サーバー(server:サービスを提供する側)とクライアント(client:サービスを受ける側)の間で情報を送受信するプロトコル(protokol:手順や規格)の事です。
HTTPサーバーとは、このHTTPによって情報をやり取りするコンピュータやプログラムのことです。

Webサービスについて

Webとは、World Wide Webの略称で、インターネットを利用したコンピューターネットワーク自体を指します。
そして、WebサービスとはHTTPなどのインターネット関連技術を利用して通信を行うサービスの事です。
Webサービスを作るためには、HTTPでサービスを提供する必要があります。
そのため、HTTPでサービスを提供するHTTPサーバーが必要となります。

Node.jsを使ったHTTPサーバー作成

HTTPサーバーをNode.jsを使って作成します。
その際、Node.jsのHTTPモジュールを使用します。
サーバーには、サーバーが受け取る「リクエスト」とサーバーが提供する「レスポンス」に関する関数が必要になります。
今回は、user-agentという情報を表示することでプログラムが働いているかを確認します。

ユーザーエージェント(user-agent)

user-agentとは、利用者がHTTPを使って通信を利用する際のソフトウェアまたはハードウェアのことをいいます。
「iPhoneからアクセスしています」や「Chromeからアクセス」しています等の、自分がどこからアクセスしているのかなどの情報になります。

user-agentを使用して、今回作成するプログラムが以下になります。

const http = require(‘http’);
const server = http.createServer((req, res) => {
res.writeHead(200, {
‘Content-Type’: ‘text/plain; charset=utf-8’
});
res.write(req.headers[‘user-agent’]);
res.end();
});
const port = 8000;
server.listen(port, () => {
console.log(‘Listening on ‘ + port);
});
1行目で、HTTPモジュールを読み込んでそれをhttpと名付けています。

2行目で、httpモジュール機能を使って、サーバーを作成しています。
リクエストを表す引数をreqとレスポンスを表す引数をresとし、サーバーにリクエストがあった時にこの関数が呼び出されます。

3-5行目で、リクエストがあった際の関数の挙動が実装されています。
その内容は、成功を示すステータスコードである200と、どこからのアクセス化などの情報を表示する様に設定しています。
その情報を表示するために、Content-Type(内容の形式)を通常テキスト(text/plain)、charset(文字セット)をutf-8に指定しています。

6行目で、res.write関数により、レスポンスの内容を書きだします。

ここでは、rew.headers関数により、リクエストしている側のuser-agentの中身を取得し、レスポンスの内容として書き出しています。

7行目で、endメソッドによりレスポンスの書き出しを終了させています。

9行目で、HTTPが起動するポートを8000と、それを定数portとしています。

10行目で、listen関数でサーバーを起動して、起動した際に実行する関数を指定しています。今回は、port=8000ですので「Lisning on 8000」と表示するように設定しています。

listen関数

サーバーが立ち上がると、特定のポートからリクエストがないかをずっと聞き続けるため、HTTPサーバーを起動する関数は、listen関数という名前になっています。


今回でWebサービスを提供するために必要なHTTPサーバーを使ったプログラミングが完成しました。
ただ、現状では、サーバー側にトラブルがあった際などに情報が残りません。

そこで、次回ログという記録について学びます。

ABOUT ME
GoodAmbition
オンライン塾経営者(大阪大学工学部出身の元開発技術者) 自身も家庭教師や塾講師として働きつつ、後輩の育成やオンライン塾を経営しています。 私自身も約10年にわたり家庭教師や塾講師として100人以上の受験生と向き合ってきました。 色々な学生、保護者の方とかかわる中でよく質問される内容や、受験に必要な内容について書いています。 独学で頑張っている人たちへ勉強計画や悩み相談なども受け付けていますので気軽にお問い合わせください。 就職活動や資格の勉強などで悩んでいる方もご連絡ください。 教育・就活、書籍、食べ歩きに関するお話がメインです。 最近取り組んでいること プログラミング、筋トレ、マラソン、ライティングスキル向上etc. 苦手なことを克服しようと頑張っています。