宣言型プログラミング
処理手順を細かく指定するのではなく、得たい結果や成立してほしい状態を記述する考え方。
概要
宣言型プログラミングは、「どの手順で処理するか」を細かく記述するのではなく、「何を得たいか」「どの状態にしたいか」を記述する考え方です。
実際の実行手順や最適化は、データベース、ブラウザ、フレームワーク、クラウド基盤などの実行側へ任せます。
例
SQLでは、データを取得する具体的なループやファイル読み込み手順を書かず、必要な結果を指定します。
SELECT id, name
FROM users
WHERE status = 'ACTIVE'
ORDER BY created_at DESC;
データベースは、インデックスや結合方法などを考慮して実行計画を作ります。利用者は結果を宣言しますが、実際の性能を理解するには実行計画やデータ量も確認する必要があります。
使われる例
- SQL: 取得したいデータの条件を記述する
- HTML: 文書の構造を記述する
- CSS: 要素に適用したい表示規則を記述する
- React: 状態に対してどのUIを表示するか記述する
- TerraformやCloudFormation: 作成したいインフラ構成を記述する
- Kubernetes: 維持したいアプリケーションの状態を記述する
メリット
- 手順より目的へ集中できる
- 記述量を減らせる場合がある
- 実行側が最適化や差分適用を行える
- 同じ宣言から環境や状態を再現しやすい
- 実装の詳細を隠し、意図を共有しやすい
デメリット
- 実際にどの順序や方法で実行されるか見えにくい
- 性能問題が起きたとき、実行側の仕組みを理解する必要がある
- 表現できる内容は宣言言語やツールの機能に制約される
- 複雑な条件を宣言へ詰め込むと読みにくくなる
- 差分、依存関係、暗黙のデフォルトによって予想外の結果になることがある
向いている場面
- データの検索や集計
- UIや文書構造の記述
- インフラやデプロイ構成の管理
- ルールや制約の定義
- 実行方法より、望ましい結果を明示したい処理
論理型との関係
論理型プログラミングは、事実と規則を宣言し、それらを満たす解を推論によって求める方式です。Prologが代表例です。
論理型は宣言型の一種ですが、一般的な業務開発で触れる頻度を考え、このノートでは独立した主要ページではなく、宣言型の関連方式として扱います。
更新履歴
- 初版作成