Pythonはオールマイティなプログラミング言語だ。Pythonを使えば、他のプログラミング言語でできる大抵のことは実現できる。もちろん、Webサイトの作成だってお手の物だ。今回から、数回に分けて、Pythonを使ったWebサイトの作成に挑戦してみよう。一回目の今回は、スマートフォンでも手軽に更新できるメッセージボードを作ってみよう。

本当にPythonを使ったWebサイトが百円で運用できるか?

知っている方にとっては、当然のことだが、もう何年も前から、月百円も出せば、自分のWebサイトを開くことができる。もちろん、ブログをやるだけ、SNSで日記を書いたり、つぶやきたいだけなら、お金をかけなくても、無料で十分楽しめる。しかし、自分の作った独自のプログラムを動かし、それを世界中の人に使ってもらいたい場合などは、自分でWebサイトを作って公開してみると良いだろう。月々のお小遣いから百円を出費するだけで、大手のレンタルサーバに自分のWebサイトを持つことができるのだ。

例えば、2018年12月現在でPythonが動かせるレンタルサーバの料金をいくつか紹介してみよう。

ロリポップ(エコノミープラン)

  • ロリポップ

    ロリポップ

- 月々: 100円
- 初期費用: 1,500円
- ディスク容量: 10GB
- URL: https://lolipop.jp/
- 備考: Python2/3.4が利用可能
- パス: /usr/local/bin/python3.4

スターサーバー(エコノミープラン)

  • スターサーバー

    スターサーバー

- 月々: 126円(6ヶ月以上契約の場合)
- 初期費用: 1,500円
- ディスク容量: 10GB
- URL: https://www.star.ne.jp/
- 備考: Python2/3.4が利用可能
- パス: /usr/bin/python3.4

コアサーバー(ライトプラン)

  • コアサーバー

    コアサーバー

- 月々: 198円(1年以上契約の場合)
- 初期費用: 無料
- ディスク容量: 60GB
- URL: https://www.coreserver.jp/
- パス: /usr/local/bin/python3

このように、ロリポップは100円で、スターサーバーは126円、コアサーバーは198円と、いずれも百円台だ。その上で、Pythonの実行をサポートしている。つまり、Pythonで作ったプログラムを世界中の人に使ってもらうことができるということだ。

ちなみに、自宅サーバであれば、無料でWebサイトを運用できると思った人もいるだろう。筆者も以前、そう思ったことがあったが、実は、PCを付けっぱなしにすると、月々の電気代は確実に100円以上になるので、レンタルサーバを利用した方がお得だ。

PythonのプログラムをWebサイトに転送して動かすまで

それでは、PythonのプログラムをWebサイトに転送して動かすまでの手順を紹介しよう。せっかくなので「格安 レンタルサーバ」で検索して、気に入った会社に申し込んでみよう。大抵の会社は、申し込むと、その瞬間から自分のWebサイトを運用できる。

ただし、レンタルサーバによって、Pythonが使えなかったり、インストールされているPythonのバージョンが違うので注意しよう。本稿では、Python3.4以降がインストールされていることを前提にしている。申し込む前に、その点だけ確認しよう。

一番簡単なプログラムを作る

まずは、簡単なPythonのプログラムを作ってみよう。以下のプログラムは、画面に「こんにちは。」と表示するだけのPythonプログラムだ。このプログラムを「hello.py」という名前で保存しよう。

#!/usr/local/bin/python3.4

# 日本語を扱うために必要な設定 --- (*1)
import os, sys, io, cgi
sys.stdin =  open(sys.stdin.fileno(),  'r', encoding='UTF-8')
sys.stdout = open(sys.stdout.fileno(), 'w', encoding='UTF-8')
sys.stderr = open(sys.stderr.fileno(), 'w', encoding='UTF-8')

out = lambda msg: print(msg, end="\r\n")

# ヘッダの出力 --- (*2)
out("Content-Type: text/html; charset=utf-8")
out("")

# HTMLの出力 --- (*3)
out("<html><meta charset='utf-8'><body>")
out("<h1>こんにちは</h1>")
out("</body></html>")

プログラムを保存する際に注意すべきことがある。それは、文字エンコーディングの設定を「UTF-8」で指定して保存することだ。最近のテキストエディタであれば、デフォルトがUTF-8になっていることが多いのだが、少し前のテキストエディタの設定では、SHIFT_JISなどになっていることが多いので、確認してみよう。

次に、プログラムの一行に注目しよう。これは、Pythonのインストールパスを指定するものだ。プログラムの先頭行で「#!」に続けて記述する必要がある。このプログラムは、ロリポップとスターサーバーでの指定例だ。もし、上記で紹介したコアサーバーでは、一行目を次のように書き換える必要がある。

#!/usr/local/bin/python3

この設定が違っていると、サーバエラーが表示されてしまうので、レンタルサーバのマニュアルを見て、CGIやPythonのパスの部分を確認して書き換えよう。

ここで、プログラムを確認してみよう。プログラムの(*1)では、Pythonのプログラムで日本語が出力できるように設定をしている。いくつかのWebサーバでは、この設定を記述しないと日本語がうまく出力できなかったので注意しよう。

次に、(*2)の部分だが、ヘッダ情報を出力する。実は、Webサーバ用のプログラムでは、メタ情報であるヘッダ情報と、実際のデータを表すデータと二つの情報を出力する必要がある。ここでは、ヘッダ情報として、HTMLを出力すること、そのHTMLの文字コードがUTF-8であることの二つの情報を送信する。

最後、(*3)の部分で、HTMLを出力する。Webブラウザで表示できる標準的なWebサイトは、HTMLで記述されている。ここでは、あまりHTMLについて紹介しないが、<h1>などのHTMLタグを使うことで、その文字がタイトルであることを指定する。

  • Pythonのプログラムがサーバで実行される仕組み

    Pythonのプログラムがサーバで実行される仕組み

作ったプログラムをWebサーバに転送しよう

次に、FTPツールを使って、Pythonのプログラムファイルをサーバに転送しよう。WindowsならFFFTP、NextFTP、FileZillaなどのツール、macOSなら、FileZilla、Cyberduckなどの転送ツールが利用できる。FTPソフトの設定などは、申込時に、FTPソフトの設定が通知されるはずなので、それと、各サーバのマニュアルを確認して設定しよう。また、多くのレンタルサーバでは、Webブラウザから使える転送ツールを提供している。

そして、プログラムを転送したら、ファイルのパーミッションを書き換えよう。こちらのパーミッションの設定も、各サーバによって異なるが、ロリポップなら、ファイル属性を 700 にする。スターサーバーならば、705 か 755 に設定しよう。

  • ファイルのパーミッションを変更する

    ファイルのパーミッションを変更する

Webブラウザでアクセスしよう

そして、Webブラウザでアップロードしたファイルにアクセスしてみよう。ドキュメントルートにアップロードした場合、「http://取得したアドレス/hello.py」にアクセスする。そして、以下のような画面がブラウザに表示されたら、Pythonのプログラムを動かすことができたことになる。

  • 無事にPythonのプログラムが実行された

    無事にPythonのプログラムが実行された

もし、500 Server Errorなどが表示された場合、Pythonのパスが正しいか、また、ファイルのパーミッションが正しく設定されたかを確認しよう。

ローカルにも開発環境を準備しよう

すべてのプログラム開発を、レンタルサーバ上で行うと、サーバに迷惑をかけてしまう恐れがある。そこで、ローカル環境にも開発環境を準備しておこう。既に、Python3をインストールしている前提だ。

ローカルでPythonのテストをする場合、cgi-binというディレクトリを作り、そこにPythonのプログラムを配置する。その上で、PythonのCGIHTTPServerを動かすことでプログラムをテストすることができる。

.
└── cgi-bin
     └── hello.py

そして、コマンドライン(WindowsならPowerShell、macOSならターミナル.app)を起動して、以下のコマンドを実行する。

# Windowsの場合
python -m http.server --cgi
# macOSの場合
python3 -m http.server --cgi

その上で、コマンドラインに表示されたアドレス「http://localhost:8000/cgi-bin/hello.py」にアクセスすると、そのプログラムが実行される。

  • Windows上でPythonのサーバプログラムをテストしているところ

    Windows上でPythonのサーバプログラムをテストしているところ

ローカル環境構築の補足

Windows環境でAnacondaを利用している場合など、pythonコマンドのパスが通っていないことが多い。この場合、スタートメニューより、『Anaconda3 > Anaconda Prompt』を起動し、そのコマンドライン上で作業する。以下のコマンドを実行すると、Explorerが起動するので、そのフォルダに、テキストエディタでプログラム「hello.py」を作成しよう。

# cgi-bin ディレクトリを作成
mkdir cgi-bin
# Explorerを起動
explorer .¥cgi-bin¥

そして、プログラムを保存したら、以下のコマンドを実行し、Webブラウザでアクセスしよう。

python -m http.server --cgi

macOSの場合、プログラムの一行目には、macOSのPythonのパスを指定する必要があるが、envを利用して、以下のように指定すると良いだろう。

#!/usr/bin/env python3

まとめ

以上、今回は、PythonのプログラムをWebサーバ上で動かす方法を紹介した。サーバの申し込みから、ファイルの転送、パーミッションの設定と、慣れないとちょっと面倒な点もあるが、Pythonで作った自作プログラムを世界中に公開できると思って頑張って設定してみよう。次回は、もう少し本格的なプログラムを作ってみよう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。