You don't have javascript enabled. Good luck! :(
記事公開日: 2021/02/13

イントロダクション

イントロダクション

ウェブプログラミングが始まって以来, 人々は開発プロセスをより楽しいものにしようとしてきた. コミュニティとして, 継続的に新しい技術を推し進め, セキュリティ脅威, HTTPのステートレスな性質, 強力なウェブアプリケーションを作るために必要となる複数の言語(HTML, CSS, Javascript)や, その他多くの困難に挑戦し解決しようとしてきた.

YesodはHaskellプログラミング言語の強みを利用することで, ウェブ開発プロセスを容易なものにしようと試みている. Haskellの強力な正確性のコンパイル時保証は, 型を用いるだけではない; 参照透明性により, 予期せぬ副作用を避けることができる. 代数的データ型のパターンマッチングにより, すべての可能なケースを説明したことが保証される. Haskellに基づいてビルドすることで, あらゆるバグを消すことができる.

残念なことに, Haskellを用いることだけでは十分ではない. ウェブはその本性からして型安全ではない. 整数と文字列を区別するという単純なことさえも不可能である: ウェブ上のあらゆるデータはローバイトとして移されるため, 型安全性に対する最善の努力から逃れてしまっている. あらゆるアプリケーション作成者にはすべての入力の妥当性を確認するという仕事がある. この問題は境界問題と呼ばれる: アプリケーションが内部で型安全であるのと同様に, 外部の世界とのあらゆる境界もまたサニタイズする必要があります.

型安全性

これはYesodの出番である. 高レベルの宣言的技術を用いることで, 期待する入力型を正確に指定できる. プロセスは他の点でも同様にうまく機能する: 型安全URLプロセスを用いることで, 送信したデータもまた正しく構築されることを保証できる.

境界問題はクライアントを扱う際における問題のみではない: 同じ問題はデータを永続化したりロードする場合に生じる. 再び, Yesodはデータの整理を代わりに行うことであなたの手助けをする. 高レベルの定義においてエンティティを記述し, 詳細についてはありがたいくらい無頓着でいられる.

正確性

ウェブアプリケーションには多くのボイラープレートがあることをみな知っている. 可能な限り, YesodはHaskellの機能を用いて業務を効率化する:

  • フォームライブラリはApplicative型クラスを用いて, 一般的な場合におけるコードの量を減らしてれる.

  • ルートはかなり簡単な方法で宣言され, また型安全性も犠牲にしない.

  • データベースとの間におけるデータのシリアライズは, コード生成により自動的に処理される.

Yesodにおいては, 2種類のコード生成がある. プロジェクトを始めるために, scaffoldツールを提供し, ファイルとフォルダ構成を設定する. しかし, 大部分のコード生成はメタプログラミングによりコンパイル時に行われる. これは生成されたコードは決して陳腐化しないことを意味する. なぜならば, 簡単なライブラリのアップグレードにより, 生成されたコードも最新になるためである.

しかししっかり把握し, コードが何を行っているかを正確に知りたい人にとっては, 常にコンパイラの近くで実行できるし, 全て自分でコードを書くこともできる.

パフォーマンス

HaskellのメインコンパイラであるGHCは驚くべきパフォーマンス特性を持ち, 常に改良し続けている. この言語選択そのものが, Yesodに他のものよりもパフォーマンス上の利点を与えている. しかし, それは十分ではない: パフォーマンスのために設計された構造が必要である.

templateに対する方法は1つの例である: HTMl, CSS, そしてJavascriptをコンパイル時に分析することで, Yesodはコストのかかる実行時ディスクI/Oを避けることができ, このコードのレンダリングを最適化できる. しかし構造設計はより深い: 基盤となるライブラリにおいてconduitやbuilderのような発展的な技術を用いることで, コードがコンスタントメモリで実行されることを保証し, 貴重なファイルハンドルや他のリソースを浪費せずに済む. 高レベルの抽象化を与えることで, 高度に圧縮され適切にキャッシュされたCSSやJavaScriptを得ることができる.

Yesodの最も重要なウェブサーバであるWarpは, 最も高速なHaskellのウェブサーバである. これら2つの技術が組み合わされ, 利用可能な中で, 最も高速なウェブアプリケーション開発のための解決策の1つが与えられる.

モジュール性

Yesodは多くのパッケージを生み出し, それらの大部分はYesod自体の外でも利用可能である. プロジェクト目的の1つは, 可能な限りコミュニティに貢献することである: そのため, 次のプロジェクトにおいてYesodを使う予定がなくても, この本の大部分はなおニーズに関連しているかもしれない.

もちろん, これらのライブラリは全てしっかり統合するように設計されている. Yesodフレームワークを用いることで, 様々なAPIを通し, 強い一貫性が感じられるであろう.

堅牢なファウンデーション

かつてPHPフレームワークがUTF-8のサポートを宣伝しているのを目にしたことがある. これは衝撃であった: UTF-8サポートがあるのは自動的ではないでしょうか? Haskellの世界では, 文字エンコーディングのような問題はすでに正しく対処されており, 完全にサポートされている. 実際, 反対の問題が存在する: 多くのパッケージが存在し, 問題に対し強力でしっかりと設計されたサポートを与えている. Haskellコミュニティは常に限界を押し上げており, 各問題に対し最もきれいで効率的な解決策を見つけている.

このような強力なエコシステムにおける欠点としては, 選択における複雑性である. Yesodを用いることで, すでに大部分の選ばれしツールを手にしており, それらが共に機能することが保証されている. もちろん, 常に自分自身の解決策を用いる余地もある.

実例として, YesodとHamlet(デフォルトのテンプレート言語)はblaze-builderをテキストコンテンツの生成のために用いている. blazeはUTF-8データを生成するための最も高速なインターフェースを与えるため, この選択はなされた. textのようなほかの素晴らしいライブラリを用いたければ, それを外すことに何の問題もない.