Pythonによる効率的なアプリケーションの開発|【Python・R・エクセル統計学・統計解析】
アプリケーションと開発効率
プログラムとは、処理を手順に沿って並べた文字列にすぎません。
これは、ファイルの行数を数えるような単純なプログラムであっても、飛行機の運転を管理するような複雑なプログラムであっても同じことです。
すべてのプログラムは、あらかじめ決められた手続きを、プログラムに書かれた手順に沿って実行しているにすぎません。
Webアプリケーションの基本はテキスト処理です。
Webアプリケーションはとてもシンプルな原理で動いているため、単純な処理の組み合わせであらゆることができるようになります。
Webアプリケーションで実行する処理の多くは文字列の切り貼りです。
出力に使うHTMLもデータベースとの通信に使うSQLも、全部1つのプログラムの中に埋め込んでしまう方が便利なように思えます。
事実、初期のWebアプリケーションを実行するWebアプリケーションでは、そのような素朴な手法がうまく機能しました。
Pythonのようなスクリプト言語には、文字列を扱うための強力な機能が多く搭載されています。
また、データベースとの接続など、豊富な機能を提供する標準モジュールを使えば、とても手軽にWebアプリケーションを作ることができます。
素朴な手法の問題点
Webアプリケーションのプログラムで必要となる文字列の切り貼りを、その場で順番に行うことを、素朴な手法とここでは呼びましょう。
これまでのプログラミングでは、このような手法を使ってプログラムを作ってきました。
単純な出力だけを行うWebアプリケーションでは特に問題があるようには見えません。
サンプルプログラムの後半になると、だんだんとプログラムの見通しが悪くなってきます。
UIとなるフォームをWebアプリケーションから出力したり、データベースとの通信を行い始めたりすると、Pythonのコード以外の文字列がたくさんプログラムに入り込んでしまっています。
このようなプログラムではプログラムの変更をするとき、変更すべき場所を探しだすのが大変になります。
Webアプリケーションに機能を追加したいとき、不具合を直したいときは、HTMLやSQLのような文字列をかきわけて該当するPythonのコードをいちいち見つけ出さなければなりません。
また、コードだけが修正されるとは限りません。
今の状態でさえ、いろいろな種類の文字列が交じってしまっています。
Webアプリケーションをもっと凝ったデザインにするときや、専門のデザイナーにデザインを頼むときに、どのようなことが起こるか想像してみるとよいでしょう。
Webアプリケーションの歴史の初めのころは、素朴な手法を使って開発が行われていました。
しかし、このような手法もほどなく壁に行き当たります。
Webアプリケーションに対する要求が大きくなり、より複雑な機能を持ったWebアプリケーションを作る必要が出てきたのです。
そうなると、不具合の修正や機能追加がだんだんと行いづらくなり、うまく開発が進まなくなってきたのです。
モジュール化、クラス化による開発の効率化
素朴な手法を使ったプログラミングでは、文字列処理などを積み重ねていくことでプログラミングを行います。
これはちょうど、レンガを積み上げて建築をするようなものです。
レンガを積み上げていけば、小屋や小さな家くらいは簡単に作れるようになるかもしれません。
しかし、巨大なビルを作るには、レンガを積むような手法を使うのではなく、もっと効率の良い、他の手法が必要です。
Webアプリケーションに限らず、プログラムには多くの「似通った処理」があります。
似通った処理を繰り返しコードとして書かなくてよいことになります。
Pythonでは、そのような処理をモジュールやクラスとしてまとめることが多いはずです。
Webアプリケーションで扱うテキストはたいてい一定のルールを持っています。
たとえば、Webアプリケーションの出力となるレスポンスにはヘッダーと本文という2つの部分があります。
ヘッダも本文もどちらも文字列です。
本文の文字列は、どのような結果をユーザーに見せたいかによって大きく変化します。
ヘッダには表面に現れないいろいろな情報を記載しますが、記載する情報はおのずと決まるような値が多いため、プログラムで自動的に生成することができます。
このような性質に注目して、Responseという名前のクラスを作りました。
レスポンスを共通して扱うクラスを作ったことで、プログラムがよりシンプルになりました。
Webアプリケーションに実行する共通した処理をクラスとしてまとめたことで、プログラムに重複部分がなくなり、プログラム全体がすっきりと短くなったわけです。
レスポンスだけでなく、データベースと通信を行うときに利用するSQLもルールを持った文字列です。
SQL文字列を作るときのルールをうまく分析し、クラスにすることができればどうなるでしょうか。
プログラムに埋め込まれたSQL文字列がきれいになくなり、プログラムはさらにすっきりするはずです。
実際、近年のWebアプリケーションの開発ではO/Rマッパーといわれるクラスの一種が活用されています。
役割分担による開発の効率化
Webアプリケーションの開発の中で最もやっかいなのがHTMLに相当する文字列です。
HTMLには、数値や文字列といった情報だけでなく、テキストの大きさや位置、テキストの意味などを決める情報をタグ(エレメント)という形で記述します。
このため、一般的なテキストに比べてHTMLは長くなりがちです。
横幅が長くなるのも、Pythonのプログラムとしてはあまり嬉しくありません。
このような長いテキストを埋め込むと、プログラムはすぐにHTMLで埋め尽くされてしまいます。
そのため、Webアプリケーションの出力として使うHTMLだけを外部に分離しておく、という手法がとられ始めました。
プログラムとは別のファイルにHTML文字列を書いておき、必要に応じて読み込んで使うのです。
このような仕組みはテンプレートエンジンと呼ばれています。
高機能なテンプレートエンジンでは、単にHTMLファイルを読み込むだけでなく、内部にプログラムコードのようなものを埋め込めるものもあります。
関連記事