Phoenix Framework Guide をなんとなく訳してみた① Overview



Elixir向けのWebフレームワークであるPhoenixについて興味を持っては見たもののまだまだ日本語での情報は少なそうなので[本家のガイド](http://www.phoenixframework.org/)で苦手なりに英語を訳しつつ学習中です。

自分の備忘として置かせてもらいます。多分間違った意訳が多いのでもしも優しい方がいたらご指摘ください。

最後までたどり着けるよう頑張ります。。。

対象Ver: [v1.2.0](http://www.phoenixframework.org/docs/overview)


###各セクションのリンク
+ [Overview](http://www.phoenixframework.org/v0.13.1/docs/overview) - [Phoenix Framework Guide をなんとなく訳してみた① Overview](http://qiita.com/rtbt525/items/afbf666e0c026c5658f4)
+ [Up And Running](http://www.phoenixframework.org/v0.13.1/docs/up-and-running) - [Phoenix Framework Guide をなんとなく訳してみた② Up And Running](http://qiita.com/rtbt525/items/d65efc631a1661c2686d)
+ [Adding Pages](http://www.phoenixframework.org/v0.13.1/docs/adding-pages) - [Phoenix Framework Guide をなんとなく訳してみた③ Adding Pages](http://qiita.com/rtbt525/items/240b30b690bbd27ca374)
+ [Routing](http://www.phoenixframework.org/v0.13.1/docs/routing) - 
+ [Plug](http://www.phoenixframework.org/v0.13.1/docs/understanding-plug) - 
+ [Controllers](http://www.phoenixframework.org/v0.13.1/docs/controllers) - 
+ [Views](http://www.phoenixframework.org/v0.13.1/docs/views) - 
+ [Templates](http://www.phoenixframework.org/v0.13.1/docs/templates) - 
+ [Channels](http://www.phoenixframework.org/v0.13.1/docs/channels) - 
+ [Ecto Models](http://www.phoenixframework.org/v0.13.1/docs/ecto-models) - 
+ [Deployment](http://www.phoenixframework.org/v0.13.1/docs/deployment) - 
+ [Advanced Depoayment](http://www.phoenixframework.org/v0.13.1/docs/advanced-deployment) - 

-

#概要

PhoenixはサーバサイドMVCパターンを実現するElixirで実装されたWebアプリケーションフレームワークです。Ruby on RailsやPythonでのDjango等の他のWebアプリケーションフレームワークを利用したことのある人に取って多くのコンポーネントとコンセプトは親しみ深いものでしょう。

Phoenixは高い生産性と高いパフォーマンスの両方を与えてくれます。またいくつかの面白いひねりがあり、リアルタイムに機能を実行するchannels、驚異的な速度のためのプリコンパイルされたtemplatesなどいくつかの新しい工夫がされています。

もしもあなたが既にElixirに親しんであるのであれば素晴らしい！もしそうでなくてもElixirはいくつかの学ぶに足る価値があります。まずは[Elixir Guide](http://elixir-lang.org/getting-started/introduction.html)を一読することをおすすめします。また[Resources Guide](http://www.phoenixframework.org/v0.13.1/docs/resources)に挙げられている他の多くの本やBlog、ビデオも参考になるでしょう。

このイントロダクションガイドの目的は、Phoenixについての高レベルの概要とそれを構成する部品およびその下の階層についてサポートすることです。

##Phoenix
Phoenixはモジュール化と柔軟性のため設計された多重階層システムの上になりたっています。その他のレイヤーとしてPlugとEctoが含まれおり、この概要の中ではPhoenixの後に説明します。Erlang HTTP ServerやCowboyはPlugやPhoenixの基盤として実行されるものですが、このガイドではCowboyについては説明しません。

Phoenixはいつくかの独立したパーツで構成されており、それぞれWebアプリケーションを構築するために明確な目的と役割を持っています。このガイドではこれらを全体的に各ガイドで掘り下げて説明するつもりですが、取り急ぎ全体像を示します。

+ エンドポイント（The Endpoint）
	* ルータに引き継ぐまでの全てのリクエストをハンドルします。
	* リクエストが必要とするPlugsのコアセットを提供します。
	* リクエストを割り当てられたルータにディスパッチします。
+ ルータ（The Router）
	* リクエストを切り分け、適切なコントローラのアクションを必要なパラメータと共に呼び出します。
	* リソースへのルートパスまたはURLを生成するヘルパーを提供します。
	* パイプライン（Pipelines）
		- 経路をワンセットとしてPlugsのグループに簡単に適用できます。
+ コントローラ（Controllers）
	* リクエストをハンドルするために呼び出されるアクションとなる関数を定義します。
	* アクション（Acrion）
		- データを用意し、Viewに渡します。
		- Viewのレンダリング処理を呼び出します。
		- リダイレクトを実施します。
+ ビュー（View）
	* テンプレートをレンダリングします。
	* プレゼンテーションレイヤーとして振る舞います。
	* テンプレートで利用できる、生データを装飾するためのヘルパー関数を定義します。
+ テンプレート（Templates）
	* そのままです。
	* 事前コンパイルされて早いです。
+ チャネル（Channels）
	* 簡単なリアルタイム通信を提供するソケット（sockets）を管理します。
	* 堅牢な接続を維持する双方向通信を提供するということを除けば、コントローラと相似しています。
+ 出版-購読モデル（PubSub, Publish/Subscribe）
	* チャネルレイヤーの基礎となり情報を定期購読します。
	* 抽象的なpubsubの基盤としてサードパーティ製のpubsub integrationとのアダプタを提供しています。

##Plug
Plugはコンポーネント化されたモジュールを組み合わせてWebアプリケーションを構成するための仕様です。Plugは再利用可能なモジュールまたはその仕様に組み込まれた関数です。それらはリクエストヘッダーの解析やロギングのような個別の振る舞いを提供します。PlugのAPIは小さく一貫しており、パイプラインのように決まった順序で定義して実行することができます。またプロジェクトの中やプロジェクトを横断して再利用することができます。

Plugでは認証機能からパラメータの前処理まで、さらにレンダリングでさえも、ほとんどすべての処理を表現することができます。

Phoenixは普遍的にPlugの素晴らしい利点を取り込んでいます（特にルータとコントローラ）。

Plugの最も重要なことは最終的にアプリケーションコンテンツをユーザに配信するためのHTTPサーバとのアダプターを提供してくれることです。現在のPlugはCowboyへのアダプタしか提供していませんが、将来的には他のサーバに対する接続を提供する予定です。Cowboyは[99s](http://ninenines.eu/)のLoïc HoguinによってErlangで書かれたHTTPサーバです。

Plugについてのもっと詳細な情報が必要であれば[Resources Guide](http://www.phoenixframework.org/v0.13.1/docs/resources)にリンクがあります。

##Ecto
Ectoは言語に組み込まれたクエリ構成ツールであり、Elixir用のデータベースのラッパーです。Ectoを使うと異なるデータベースに読み書きする、ドメインデータをモデル化する、複雑なクエリを安全に書く、SQLインジェクションなどの外部の攻撃から保護するなど多くのことができます。

Ectoは主に4つの抽象概念で構築されています：
・Repo - リポジトリは個々のデータベースとの接続を意味しています。あらゆるデータベースのオペレーションはリポジトリを経由して実行します。
・Model - モデルはデータを定義します。それらはテーブル名とフィールド名およびその型を定義します。またモデル間のリレーションも定義します。
・Query - クエリはモデルとリポジトリの両者をつなぎ、リポジトリからエレガントにデータを取得し、モデルに対して設定できます。
・Changeset - 変更セットはモデルデータに対してアプリケーションが使う前に実行する必要のある変換を宣言します。変換には型変換やバリデーションなどを含みます。

新しいPhoenixアプリケーションはEctoとともにPostgreSQLをデフォルトで使用します。

###このガイドについて
このガイドの誤りを見つけたり、改善したい場合には[Phoenix Guides](https://github.com/phoenixframework/phoenix_guides/)をチェックアウトしてください。IssueやPull Requestは歓迎します。


[次 >](http://qiita.com/rtbt525/items/d65efc631a1661c2686d)