∑考=人 〜プロメテウス〜

そして今日も考える。

todoリストアプリを作ってみる

プログラムとアプリの間の壁

プログラムとアプリケーションの違いについてちゃんと理解している人はどのくらいいるのんでしょうか。つい最近までの私の理解では、プログラム⊂アプリケーション。要するに複数のプログラムの集合体がアプリケーション、ぐらいの認識でした。

 

では、複数のプログラムを組み合わせればアプリケーションが完成するのか、というと半分正解で、半分間違い。C言語でプログラムを作ることができてもアプリケーションを作ることはできないでしょう。私も2年ほど前、C言語でまともなプログラムを作ったが、当時はアプリケーションをどうやって作るのかなんて想像もつきませんでした。

 

実はCやJavaなどの言語を使って作るのは、主に”処理”を担当するプログラムがほとんどです。なので、処理プログラムを複数組み合わせたところで、アプリケーションを作ることはできません。処理プログラムにおいては、内部に入力値を埋め込んでしまうか、簡易的にコンソールで入力を与えるくらいしかできないし、出力もコンソール上で行われるのが標準的です。

 

ただし、我々の考える一般的なアプリケーションには処理以外の機能もあります。それは”画面”と”データ”です。例えば、WebブラウザもWebアプリケーションの一種です。その中の一つ、Google Chromeを例に取ってみると、まず、トップ画面が表示されますね。基本的には入力フォームと検索ボタンしかないシンプルな画面です。

 

そして、入力したキーワード(値)に応じた画面に遷移します。これは、入力されるキーワードを想定して複数のページを作成しているわけではなく(やろうとしてもそんなことはできませんが)、入力されたキーワードにヒットするデータのみをデータベースから取り出して画面上に表示させているんです。

 

このように、ほとんどのWebアプリケーションでは、画面、すなわち人間とプログラムの仲介を為す機能(インターフェイス)と人の要求(入力テキストで検索など)に応じたデータを引っ張ってくるためのデータベース機能が必要になります。なお、こういった、画面(プレゼンテーション層)、処理(ロジック層)、データベース(データベース層)の3つからなる構造のWebアプリケーションを3階層システムとか言います。現在のWebアプリ、Webシステムはこの手法が主流のようです。

 

というわけで、C言語でプログラムを作れるだけでは、近年のWebアプリケーションを作るのはかなり難解です(不可能ではないはずですが)。プログラムとWebアプリの間には思いのほか大きな溝があるのです。

アプリケーションを作るために

もちろん、どんなアプリケーションを作るかによっても変わってきますが、最低限目に見える形でアプリケーションを作りたいのであれば、必ずプレゼンテーション層のプログラムが必要になります。画面に表示させるための鉄板プログラムはHTMLです。ちなみにAndroidのアプリだとXMLで書くことになります。

 

そして、Google Chromeなどのように、入力に応じてインタラクティブに画面を作りたいのであれば、データベースも必須でしょう。データベースを作ったり、データベースから特定のデータを取り出すためにはSQL言語であるMySQLPostgreSQLなどが主に利用されます。

 

ただし、HTMLとデータベース間で直接データのやり取りを行うことはできません。そのため、アプリケーション層とデータベース層の間でデータの受け渡しをするための処理が必要になるのです。そして、その処理を担うのがCやJavaなどの一般的に処理を記述するためのプログラム、というわけです。

 

Javaであれば、ServletJSPといった、3層システムに特化した技術が存在しています。Cについては定かではありませんが、おそらく同じような技術はあるんじゃないでしょうか。もちろん、使う言語によってプログラムの文法は異なりますが、基本的にはどのアプリも同じような流れで動いているのです。そういった大枠を理解してしまえば、Webアプリケーションを作るのも実はさほど難しくはありません。

Webアプリを開発する

とは言え、理屈がわかってもできるかどうかは別の話。なので、自分で作ってみることにしました。自分が欲しいアプリ、ということで、todoリストアプリを現在開発中です。今使用している言語は、html、phpmysqlです。ちょっと紹介します。

 

トップ画面はこんな感じ。

 

f:id:n1dalap:20140707230603p:plain

htmlの知識があれば1分かからずに作れます笑。

 

ここで、”リスト一覧”ボタンを押すと、以下のリスト画面に遷移します。

f:id:n1dalap:20140707231026p:plain

これはphpで書いています。正確にはphpのプログラムによって、既に作成してあるデータベースから特定のデータをもらい(データベース層とのやり取り)、そのデータを基にhtmlを出力する(プレゼンテーション層とのやり取り)ということをやっているんです。なので、もしデータベースに登録されているデータが変われば、ここで出力される画面も変わってきます。

開発途中の感想

簡単な機能でもちゃんと動作すると嬉しいものです。ついつい夢中になってしまう時もあります。開発に入る前に最低限の設計はしたのですが、思ったような動作にならないことや、開発中に別途必要だなと感じる機能もたくさんありました。やっぱり実際に作ってみると色々な問題が見えてきて面白いものです。

 

とは言え、デザインがダサダサ。機能面が落ち着いたら、cssの勉強がてら、デザインも変更していければと思います。