PythonでWebプログラミングの基礎(その1)Webサーバの動作確認

PythonでのWebプログラミングの基礎について書きます。プログラミングを始めたばかり、あるいはこれから始めようかという方を想定して書きました。但しですがコマンドライン操作を使います。そこはぜひ慣れて頂ければとも思います。またコマンドの詳細までは書けませんので必要な場合は別途調べて下さい。

内容としてはとにかく実際に動かしながらその動いてるもののベースはどうなっているかということです。

今回はまずはWebサーバを起動してシンプルなページを表示させてみます。

ここでの環境はWindows10でのWSL(Debian)です。環境構築から始める場合は以下からを参照して下さい。もちろん同様のLinux環境でも出来ると思います。
Windows10でWSLを利用してLinuxを利用する(概要と有効化編)

Webサーバとは

Webサーバとは何かということですが、インターネット上(ローカルなネットワーク上の場合もある)に多数存在して様々なコンテンツを提供、サービスを提供をするサーバです。インターネットで何かしようとするとブラウザでまずどこかに接続すると思いますがその接続先で稼働しているサーバです。サーバという意味ではハードウェア(コンピュータそのもの)の意味もあればサーバシステム(サーバソフトウェア)の意味もありそれらが稼働していることによりサービスが提供されます。

Webサーバを起動してページを表示する
ここではもちろんいきなりインターネット上で本格的なWebサーバを起動するということではなくて自分のPCのローカル環境でPython環境でWebサーバを起動して動作確認してみましょうということです。

早速やってみます。

Debianのターミナル(画面)をWindows10から起動します。

ホームディレクトリ(ログインしたディレクトリ)配下で何かディレクトリ(ここではwebserver)を作成します。コマンドはmkdirです。

そのディレクトリに移動します。

ここのディレクトリ配下で以下のようなファイルを作成します。ファイル名はindex.htmlとします。

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Hello WebServer</title>
</head>
<body>
Hello world!
</body>
</html>

一般的なnanoエディタの場合は以下のように起動出来ます。
$ nano index.html

編集画面に移行します。

ここで1文字づつ入力するのもいいですが、コピーアンドペーストも出来ます。上記のテキストを画面から選択してコピーします。(Ctrlキー+Cでも出来ます。)そして、エディタの画面でマウスの右クリックをします。そうすると無事にペーストが出来ます。やってみて下さい。ここでは以下のように出来ました。

これをCtrlキー+XからYes(Yを入力)のEnterキー入力で保存します。

Webサーバの起動
ファイルを保存した同じディレクトリでPython3でWebサーバを起動します。以下のようにコマンドを入力します。
$ python3 -m http.server

ブラウザで表示する
Windows側からブラウザを起動して以下のURLを入力します。
http://localhost:8000/index.html
以下のように表示されました。HTMLファイルとしては何行もありましたが、表示されたのは1行です。もちろんそのように書いているので正しく表示されています。

別のPCやスマホで表示する
テスト的なものですが、Webサーバなので同じネットワーク上であれば別のPCやスマホからアクセス出来ます。別のPCやスマホからブラウザで上記のように表示出来るということです。それをやってみます。(※もし同じことを実際に試してみるのであれば自宅やモバイルWifi、テザリングなど完全な自分の環境でやってみて下さい。)

以下の手順でやってみます。順番に書きます。

webサーバの起動
前項のようにコマンド( python3 -m http.server)を入力してサーバを起動します。そのターミナルは起動した状態のままにしておきます。

webサーバのIPアドレスの確認
webサーバのIPアドレス、つまり自分のPCのIPアドレスを確認します。IPアドレスとはまさにネットワーク上のPCのアドレスです。但しここではローカルネットワーク内で有効なIPアドレスです。

これを以下の手順で確認します。

別のターミナルの起動
ここではWindows10のWSL(Debian)なので、Windows10からDebianを別途起動します。ここで以下のようにコマンドを入力します。まずはここではこのまま入力するか、以下のコマンドをコピーしてDebianの画面にマウスの右クリックでペーストして実行してみて下さい。
$ ip -f inet -o addr

私の場合で以下のように表示されました。

慣れていないとこういった呪文的、暗号的な点で拒否反応が出るかもしれないですが、まあ見てください。ここから自分のIPアドレスを絞り込むのですが、有線LANとWifiの場合で探すところが違います。

私の場合は今wifiを使っています。この場合は、通常wifi0という行を探します。以下です。

この192.168.3.163というのが私のPCの(ローカルの)IPアドレスです。

有線LANの場合は通常eth0を探します。以下です。

但し、今はLANケーブルは接続されていないのでこのIPアドレスは有効ではありません。

pingコマンドで自分との接続確認
以下のようなコマンドを入力します。
$ ping 自分のIPアドレス

私の場合は、wifiで接続しているので以下です。
$ ping 192.168.3.163

以下のようになりました。これが正常に通信出来ている状態です。つまり自分のIPアドレスはここでは192.168.3.168ということです。

Ctrlキー+Cで中断して下さい。
このpingコマンドで有効でないアドレスを入力をするとエラーメッセージかレスポンスがないかになります。

他のPCやスマホからアクセス
これが本題です。まずは他のPCやスマホを同じネットワークに接続します。私の場合は同じwifiにタブレットを接続しました。

(私の場合はタブレットの)ブラウザのURLに以下を入力します。8000というのはポート番号というものでこの場合はPythonで起動したWebサーバのプログラムのことを指定しています。
http://webサーバのPCのIPアドレス:8000/index.html
今の私の場合は以下です。
http://192.168.3.163:8000/index.html
以下のように表示出来ました。ローカルエリア内ですが自分のWebサーバに別のクライアントからアクセス出来たということです。

Webサーバの画面では以下のようにログ(実行経過)が表示されました。何回も再表示させたのでログとして何行も残っています。

※PCのセキュリティソフトやその他の制限で接続、表示出来ない場合があると思います。その場合は、セキュリティで遮断されなければこのように表示出来るとご理解下さい。

またその場合は、Webサーバを動かしているPCのブラウザで上記のようにIPアドレスを指定して表示させてみて下さい。URLにIPアドレスが指定出来るということが見えればいいと思います。
http://localhost:8000/index.html
これを以下のように入力します。
http://192.168.3.163:8000/index.html
以下のように表示されます。

まとめ的に
PythonでWebプログラミングの基礎というテーマで書いていますが、そのベースにインターネットのプロトコル(通信規約)のTCP/IPが存在するということも重要です。このTCP/IPの全てではなくても、必要な部分を理解した上でないとPythonでのWebプログラミングも難しくなってくるということです。

このTCP/IPについても書いていきたいですが、次回はひとまず動的ページの生成というテーマで書きます。
次回へ移動する