はじめに
おはようございます。当ブログにアクセス頂き、ありがとうございます。
『千里の道も一歩から』とつぶやきながら、人生を迷走しているたなけんです。
本エントリではClojureを用いたWebアプリケーション開発の第一歩として、仕様策定(全体, 第1イテレーション)と開発環境の整備、そして実装について記載いたします。
アプリケーションの全体像
クライアントからhttp GETメソッドによって、サーバに問い合わせ、
外部APIから取得した情報をhttpレスポンスとして返す、
非常にシンプルなWebアプリケーションとなります。
- 入力: クライアントにより入力された単語を受信する
- 処理: 外部APIを利用し、英単語の意味を取得する
- 出力: クライアントへ取得した意味を送信する
各イテレーションのゴール
- プログラムから辞書にアクセスし、意味を取得する。(アプリケーション層)
- ブラウザからの操作を可能にする。(プレゼンテーション層)
- ユーザごとの履歴を残す。(パーシステント層)
- Herokuへのデプロイ及び性能テスト(運用)
第1イテレーション実装方針
- 辞書はDictionary.com のWeb APIを利用する
- clj-httpを用いDictionary.comにアクセスし、意味を含むXMLを取得する
- clj-xpathを用いXMLから意味を取得する
- clj-jsonを用いClojureオブジェクトをjson文字列に変換する
異常系の処理(全体方針)
- 例外発生時には、Exceptionを補足して、アプリケーション例外を投げる
- tools.loggingを用い、適切にログを残す(例外内容のトレース等)
その他、機能毎に以下のような異常の発生が考えられます。
- 設定ファイルの不備
- 外部APIのダウン
- 外部APIの仕様変更
開発環境の整備
以下のサイトを参考にさせて頂きました。
- Emacsインストール Link
- swank-clojureインストール via ELPA Link
- Leiningenインストール Link
ビジネスロジックの実装(1)
本日は以下のコードを紹介します。
- プロジェクトファイル
- アプリケーション例外クラス
- nsマクロ
- 例外処理関数
- 設定ファイル読み込み関数
プロジェクトファイル
Leiningenでプロジェクトを作成した際、自動生成されるproject.cljに
利用する各種ライブラリを追記します。
Leiningenは、JavaでいうところのMavenのようなもので、ライブラリの依存関係を解消します。
プロジェクトファイルはMavenのPOMファイルにあたり、
lein deps
を実行することで、依存ライブラリのダウンロード、クラスパスへの追加をすることができます。
アプリケーション例外クラス
例外発生時にはJavaのクラス情報を利用するため、java.lang.RuntimeExceptionを継承した、
アプリケーション例外クラスを作成します。
compile関数でこのファイルをコンパイルした後は、他のJavaクラスと同様、
Clojureプログラム内で利用することができます。
nsマクロ
nsマクロはJavaのpackageとimportを合わせたようなもので、
名前空間と、その名前空間内で使用するClojure/Javaクラスを宣言します。
:reload-allオプションは、逐次関連するファイルを再読み込みすることの指定です。
:requireで宣言されたClojureファイルについては、
asで付けられたエイリアス/メンバ
で、指定されたファイルのメンバにアクセスすることができます。
例外処理関数
例外の内容をログに記録し、アプリケーション例外を発生させます。
- do特殊形式: 副作用のある処理を行う
- clojure.tools.logging/error関数: エラーをログ出力する
- throw特殊形式: 例外を発生させる
設定ファイル読み込み関数
設定ファイルを読み込み、読み込まれた文字列をClojureのオブジェクトに変換します。
- slurp関数: ファイルの記述内容を文字列として読み込む
- read-string関数: 文字列をClojureのオブジェクトに変換する
- try特殊形式: 例外が発生される可能性のある処理を包む。例外発生時に対応する例外を含むcatch節を評価する
逐次ファイルI/Oが発生することを避けるために、一度だけget-properties関数をよび、
その値をpropertiesとしてモジュール内に保持しておきます。
今回の作業は以上。最後までお読み頂きありがとうございました。
たなけん (作業時間60分(各種インストールは除く))