バリデーション
本書は、『Elixir/Phoenix初級』シリーズの第4巻です。第2巻から作り始めた簡易予定表管理システムNanoPlannerの機能拡張を進めながら、プログラミング言語ElixirとWebアプリケーション開発フレームワークPhoenixの学習を並行的に進めていきます。
本巻は大きく5つの部分に分かれます。
1. 本巻で実装する機能拡張の仕様説明(第1章)
2. Phoenix 1.4へのアップグレード(第2章から第4章)
3. 「今日の予定表」を表示する機能を実装(第5章から第8章)
4. 予定項目に「終日」フラグを追加する仕様変更(第9章から第12章)
5. バリデーションとエラーメッセージの表示(第13章から第18章)
第2部(第2章から第4章)では、Phoenixのバージョンを1.3から1.4にアップグレードします。前巻で行った1.2から1.3へのアップグレードと比べると作業量は少ないのですが、フロントエンドビルドツールがBrunchからwebpackに切り替わったので、手順はそれなりに複雑です。
第3部(第5章から第8章)では、NanoPlannerに登録された予定項目を特定の条件に基づいて絞り込む方法について学習します。具体的には「今日」という時間範囲の中にある項目だけを一覧表示するにはどうすればいいのかを考えます。簡単そうに思えるかもしれませんが、日付をまたぐ予定項目のことを考慮に入れると、意外に難しいです。
第4部(第9章から第12章)のテーマは真偽値とチェックボックスです。ある時刻に始まりある時刻に終わる予定項目しか扱えなかったNanoPlannerに、「終日」という概念を導入します。その結果、ある日付からある日付まで続く予定項目を管理できるようになります。ユーザーが「終日」チェックボックスをOn/Offしたときのユーザーインターフェースをどうするか、データベースにどのような値を記録すればいいのか、さまざまな側面について検討します。
分量的にもっとも長い第5部(第13章から第18章)では、Phoenixアプリケーションにおけるバリデーション(値の検証)の初歩を学びます。本巻の副題になっていることからもわかるように、本書の山場です。
まず、第13章で「空の件名が入力されたらエラーにする」という仕様を実装します。これは、最も単純なバリデーションです。次に、第14章でBootstrapのスタイルシートを用いてエラーが起きた入力欄のスタイルを変更します。第15章では、Gettextモジュールを用いた国際化について学び、エラーメッセージを日本語で表示できるようにします。第16章から最終章では、NanoPlannerに文字列の長さと日付・日時の前後関係に関してバリデーションを行う機能を追加していきます。
プログラミング言語Elixir自体の学習という側面から見ると、パターンマッチングを用いた関数定義が頻出することが本巻の特徴です。また、皆さんの大好きなパイプ演算子を使って工夫したコーディング例も多く用意しました。関数型プログラミングの楽しさが読者の皆さんに少しでも伝われば幸いです。