スポンサーリンク

2015年6月14日

TrotのREADME.mdを翻訳してみた。

#目的

TrotのREADME.mdを翻訳する。

#実行環境

OS:Windows8.1
Trot Framework: v0.5.0 or v0.6.0

#目次

1. README.md翻訳
2. まとめ

#参考文献

https://github.com/hexedpackets/trot

#始める前に

注意!!
この記事は、trotのREADME.mdをyahoo翻訳の力を借り、素人翻訳した内容を書いています。
管理人の英語力は本人がドン引きするほど低いので、
間違った解釈及び理解している部分が多分にあると思います。
それでも構わないという方は見て頂けたら嬉しいです。

また、ご指摘等があれば受け付けておりますゆえ、遠慮なくお願いします。
特に間違えて習得している部分は教えて頂ければ、本当に助かります。

以下の部分は全て原文から引用している部分です
>英文

CHANGELOG.mdを見るとv0.5.0までしか書いてないけど、
VERSIONのファイルを見るとv0.6.0と書いてある。
どっち正式だ?書いてるだけでv0.6.0じゃない?CHANGELOG.mdを更新してないだけ?

追記(2015/06/14)
無事、Hello World的なもの出せました。
[Elixir+Trot] Trotフレームワークを使って"Hello Trot!!"するだけの簡単なお仕事・・・

##1. README.md翻訳


-trot

>Trot is an Elixir web micro-framework based on Plug and Cowboy.
>The goal of Trot is to make common patterns in Plug easier to use,
>particularly when writing APIs, without sacrificing flexibility.

Trotは、PlugとCowboyを基本としたElixirのWebマイクロ・フレームワークです。
特にAPIを記述する時、Trotの目的はPlugの柔軟性を犠牲にすることなく一般パターンをより使いやすくすることです。

-Usage
>Add Trot as a dependency to your mix.exs file and update your applications list to include it.

あなたのmix.exsファイルへ依存関係Trotを加えて、あなたのアプリケーション・リストを更新して下さい。
----
defp deps do
  [{:trot, github: "hexedpackets/trot"}]
end

def application do
  [applications: [:trot]]
end
----

>The following configuration options are supported by the server:

以下の構成オプションは、サーバでサポートされています。

>config :trot, :port, 4000: port to listen on for incoming HTTP requests. Defaults to "4000".
>
>config :trot, :router, MyApp.Router: module to route requests to. Defaults to "Trot.NotFound".
>
>config :trot, :heartbeat, "/heartbeat": path to setup a heartbeat route.
>This will always return 200 with a body of "OK". Defaults to "/heartbeat".
>
>Finally, put use Trot.Router to the top of your module.
>This will add route macros and setup the plug pipeline at compile time.

config :trot, :port, 4000:
HTTPリクエストを受けるポートの設定。デフォルトは4000番。

config :trot, :router, MyApp.Router:
リクエストを送るモジュールを設定。デフォルトは"Trot.NotFound"

config :trot, :heartbeat, "/heartbeat":
heartbeatのルートパスを設定。これは、常にbodyにOKと200が戻ります。デフォルトは"/heartbeat"

最後に、"use Trot.Router"を置いてください。あなたのモジュールの上部へ。
これはルート・マクロを加えます、そして、セットアップがコンパイル時のプラグ・パイプラインです。

最後に、一番上へあなたのモジュールを置いて"use Trot.Router"して下さい。
これは、ルートマクロへ加えています。そして、コンパイル時にプラグパイプラインをセットアップします。

-Routes
>Routes are specified using one of the HTTP method
>macros: get/3, post/3, put/3, patch/3, delete/3, options/3.
>The first argument is a the path to route to,
>the second (optional) argument is a keyword list of any options to match against,
>and the last argument is the block of code to execute. Examples are below.
>
>If @path_root is specified, it will be prefixed to all routes in that module.
>
>Routes can be setup in different modules and imported into the main router
>with the import_routes/1 macro,
>which takes a module name as the only argument.
>Note that ordering matters as normal Elixir pattern matching rules apply to imported routes.
>
>A default 404 response can be enabled by putting import_routes Trot.NotFound or
>use Trot.NotFound at the end of the module.

ルートに指定して使えるHTTPメソッドのマクロ: get/3, post/3, put/3, patch/3, delete/3, options/3。
第一引数はルートのパス、第二引数はキーワードリストの幾つかのオプションに対してマッチする。
最後の引数は実行するコードのブロックです。
下記は例です。

もし"@path_root"を指定したら、それはモジュールの中の全てのルートにプレフィックスが付きます。

ルートは異なるモジュールでのセットアップがありえます。
それは、"import_routes/1"マクロでメインルータにインポートされます。
それは、唯一の引数としてモジュール名を取ります。
オーダが重要である点に注意して下さい。通常のElixirパターンマッチ規則としてインポートされたルートにapplyして下さい。

デフォルト404のレスポンスは、"import_routes Trot.NotFound"で許可するかモジュールの終わりに"use Trot.NotFound"でできます。

-Responses
>All of the following are valid return values from handlers and
>will be parsed into full HTTP responses:
>
>- String of response body
>- Status code, either numeric or an atom from Plug.Conn.Status
>- {code, body}
>- {code, body, headers}
>- JSONable object
>- {code, object}
>- {code, object, headers}
>- {:redirect, location}
>- {:badrpc, error}
>- %Plug.Conn{}

以下の全ては、ハンドラーからの有効な戻り値でフルHTTPレスポンスに解析されます。

- String of response body
- Status code, either numeric or an atom from Plug.Conn.Status
- {code, body}
- {code, body, headers}
- JSONable object
- {code, object}
- {code, object, headers}
- {:redirect, location}
- {:badrpc, error}
- %Plug.Conn{}

#Example router application

----
defmodule SoLoMoApp.Router do
  use Trot.Router

  # Returns an empty body with a status code of 400
  get "/bad" do
    :bad_request
  end

  # Sets the status code to 200 with a text body
  get "/text" do
    "Thank you for your question."
  end

  # Redirect the incoming request
  get "/text/body", headers: ["x-text-type": "question"] do
    {:redirect, "/text"}
  end

  # Sets the status code to 201 with a text body
  get "/text/body" do
    {201, "optimal tip-to-tip efficiency"}
  end

  # Sets status code to 200 with a JSON-encoded body
  get "/json" do
    %{"hyper" => "social"}
  end

  # Pattern match part of the path into a variable
  get "/presenter/:name" do
    "The presenter is #{name}"
  end

  import_routes Trot.NotFound
end
----

#Templating
>To add templating in a router,
>add use Trot.Template and set @template_root to the top-level directory
>containing your templates.
>By default, @template_root is "templates/".
>
>Trot can be used to render EEx templates (the default engine include with Elixir),
>HAML templates through Calliope, or a combination of both.
>When the application is compiled a render_template/2 function is
>generated for every template under @template_root.
>render_template/2 expects the name of the template
>relative to @template_root as the first
>argument and a keyword list of variables to assign as the second argument.
>
>When MIX_ENV=prod all of templates are loaded and pre-compiled for faster rendering.

ルータにテンプレートを加えるために、"use Trot.Template"を加え、
"@template_root"であなたのテンプレートをトップレベルのディレクトリに設定して下さい。
デフォルトでは、"@template_root"は"templates/"です。

Trotは、EEXテンプレートをレンダリングすることができます。
(デフォルトエンジンではElixirを含みます)
カリオペを通してHamlテンプレートか両方の組み合わせができます。
アプリケーションがコンパイルされる時、"render_template/2"関数は"@template_root"の下であらゆるテンプレートに生成されます。
"render_template/2"は、最初の引数と第二引数として割り当てる変数のキーワードリストとして"@template_root"と比較して名前をテンプレートに期待します。
"MIX_ENV=prod"が速いレンダリングのため全てのテンプレートをロードしてプレコンパイルする。

-Example app using templates
----
defmodule PiedPiper do
  use Trot.Router
  use Trot.Template
  @template_root "templates/root"

  get "/compression/pied_piper" do
    render_template("compression_results.html.eex", [weissman_score: 5.2])
  end

  get "/compression/nucleus" do
    render_template("compression_results.html.haml", [weissman_score: 2.89])
  end
end

# compression_results.html.eex
<html><body>Pied piper has a Weissman Score of <%= @weissman_score %></body></html>

# compression_results.html.haml
%html
  %body Nucleaus has a Weissman Score of <%= @weissman_score %>
----

-API versioning
>Adding use Trot.Versioning to your module will enable API version parsing and
>pattern matching.
>The first part of the path for all requests in the module is assumed to be the version.
>It is parsed into the conn[:assigns] dictionary, making it easy to access.
>Routes can also be configured to only match a particular version.

"use Trot.Versioning"をモジュールに加えるとAPIバージョン分析とパターンマッチを可能にします。
モジュールの全てのリクエストのためのパスの最初の部分はバージョンであるとされます。
それは、"conn[:assigns]"に解析されます、アクセスするのを簡単にする。
ルートは、特定のバージョンにだけにマッチするように構成されることもできる。

-Example versioned app
----
defmodule Nucleus do
  use Trot.Router
  use Trot.Versioning

  get "/version" do
    conn.assigns[:version]
  end

  get "/current", version: "v1" do
    :ok
  end

  get "/current" do
    :bad_request
  end
end
----

>In the above example, "/v1/version" will return "v1" as the response body.
>A request to "/v1/current" will return a 200 but "/v2/current" will return a 400.

上記の例において"/v1/version"は、レスポンスとして"v1"を返します。
"v1/current"へのリスエストは200を返します。しかし、"/v2/current"は400を返します。

##2. まとめ

やっぱり翻訳は面倒くさい。
一日掛かってしまった。

#管理人の独り言~

正直思った。翻訳しなくて良かったんじゃね?
README見れば実行するのはそんなに難しくない。

動きません・・・サンプルのソースコードを記述してもコンパイルエラーが出ます。
また、私の知識不足か起動方法さえ分かりません。
なので、デフォルトのページ(があれば)も表示できませんでした。
もう少し情報を探すか待ってみます。

それまでは、RailsチュートリアルをPhoenixで書き換えて実施して行こうと思います。

翻訳は、yahoo翻訳に切り替えました。
(一番理解しやすい英語→日本語に変換してくれる気がする・・・)
翻訳は"Google Translator Toolkit"を使います。
こんなのあったの知らなかった・・・

人気の投稿