Curlプログラミングの落とし穴

curlでいざアプリケーションを開発するとなった際に戸惑う人は少なくありません。新しく覚える言語で馴染みがなかったり、書籍やネット上の情報が少ないといった原因が考えられますが、もうひとつ大きな別の原因があります。
それは、UIがHTMLであるシンクライアント(Webアプリケーション)と、リッチクライアントであるcurlとでは、同じプログラミングでもその内容が全く異なるということです。これは、使用するプログラミング言語が異なるからではありません。WebかGUIか、という点でアプリケーションの性格が全く異なるからです。当然異なるのはプログラミング時における些細な事柄だけではなく、その設計内容や方法も大きく変わってきます。


今日ではWebアプリケーションが広く一般的であるため、その設計・実装方法については詳しくても、GUIアプリケーションの開発には馴染みがないという方が多いようです。そういった方が、curlGUIアプリケーションを構築することになると、Webアプリケーションとの勝手の違いに戸惑います。これは、ずっとJavaで開発を行っていた人がC#PHPなど異なる言語で開発をすることになったとしても、開発対象が同じWebアプリケーションであれば問題にならない部分です。



例えばcurlでのプログラミングでは、レイアウトや見栄えといった画面を構築するためのコーディングに、少なからぬ労力が必要となります。多くの場合、HTMLやJSPといったマークアップ言語では実現できないような高度な画面の構築が求められます。ボタンやフィールドが並ぶだけの単純なダイアログの場合もあれば、複雑な段組の帳票を生成したり、画面座標を意識したレンダリングロジックのコーディングが必要な場合もあるかもしれません。

通常、GUIライブラリなどの、WebアプリケーションにはないAPIを駆使する必要があります。ユーザとの様々なインタラクションを可能とするために、GUIライブラリには一般的に多数のAPIが含まれるため、それらを適切に活用することは単純ではありません。GUIコントロールの拡張など、APIの高度な利用が必要となる場面が多いことも特徴的です。ボタンをマウスオーバー時にハイライトさせることもあれば、半角数字のみ受け付けるようにテキストフィールドをカスタマイズしたり、はたまたレコードグリッドのデフォルトの右クリックメニューの動作を変更したりと、その内容も多種多様です。

また、ユーザの様々な操作に応答するためのコーディングが必要になります。ボタンが押された際にユーザIDフィールドとパスワードフィールドの値を収集して入力値の検証を行い、サーバプログラムにポストする場合もあれば、都道府県リストが選択されたタイミングで市区町村リストの内容を適切な選択肢に変更するようなコードを書く場合もあります。ユーザのキー入力やマウスの操作などに伴い発生する低レベルなイベントのハンドリングもしばしば必要となるでしょう。



一方、Webアプリケーションにおけるプログラミングでは、ドメインモデルを構築するなど、ビジネスロジックの実装が主となります。そこでは、データベースを扱うためにJDBCなどでSQLを発行するデータベースプログラミングが必要であったり、トランザクション管理やORマッピングといった問題に対処することも求められます。

複数ユーザからアクセスされるためセッション管理を行ったり、HTMLの生成にJSPASPなどのサーバーページプログラミングが必要であったりもします。

さらに、Webアプリケーションでは様々なフレームワークMVCフレームワークやDIコンテナ、ORマッパーなど)が利用され、それらフレームワーク固有の知識といったことも重要になってきます。分散アプリケーションを構築するような場合には、WebサービスEJB、CORBAなどの技術にフォーカスしたプログラミングも必要でしょう。



このように、Webアプリケーションの開発と、curlを使ったGUIアプリケーションのそれとでは、趣が大きく異なる点にまず留意したいところです。