Enviar pesquisa
Carregar
Tokyoex6 EEx
•
Transferir como PPTX, PDF
•
4 gostaram
•
1,816 visualizações
Tsunenori Oohara
Seguir
tokyo.ex EEx
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 25
Baixar agora
Recomendados
hello waf, hello phoenix
hello waf, hello phoenix
Tsunenori Oohara
running-elixir-in-production
running-elixir-in-production
Tsunenori Oohara
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
running web app on elixir
running web app on elixir
Tsunenori Oohara
Redmineでいこう
Redmineでいこう
Manabu Shinsaka
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
Keisuke Takahashi
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
Tsunenori Oohara
Recomendados
hello waf, hello phoenix
hello waf, hello phoenix
Tsunenori Oohara
running-elixir-in-production
running-elixir-in-production
Tsunenori Oohara
PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
running web app on elixir
running web app on elixir
Tsunenori Oohara
Redmineでいこう
Redmineでいこう
Manabu Shinsaka
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
今城 善矩
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
Keisuke Takahashi
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
Tsunenori Oohara
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
t字形Er(10頁版)
t字形Er(10頁版)
聡 鳥谷部
Eclipse xtext 紹介
Eclipse xtext 紹介
Akira Tanaka
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
aitc_jp
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
uchan_nos
Let's stady Machine Learning with OCSJ
Let's stady Machine Learning with OCSJ
tuchimur
動的なILの生成と編集
動的なILの生成と編集
terurou
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Takuya Iwatsuka
TOPPERS TECS WG 2016
TOPPERS TECS WG 2016
Hiroshi Oyama
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
Takuya Azumi
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
2019 05-19.overview
2019 05-19.overview
Shin-ya Koga
第84回 雲勉【オンライン:初心者向け】ECS入門 _ CloudFront + ELB + ECS FargateでWebサイトを公開
第84回 雲勉【オンライン:初心者向け】ECS入門 _ CloudFront + ELB + ECS FargateでWebサイトを公開
Keisuke Matsuda
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
Hideki Takase
solr勉強会資料
solr勉強会資料
Atsushi Takayasu
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
アシアル株式会社
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
Shintaro Hosoai
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)
Atsushi Takayasu
Elixir lang bootstrap
Elixir lang bootstrap
Tsunenori Oohara
Elixirハンズオン2
Elixirハンズオン2
Tsunenori Oohara
meguro.rb LT
meguro.rb LT
Tsunenori Oohara
Mais conteúdo relacionado
Semelhante a Tokyoex6 EEx
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
t字形Er(10頁版)
t字形Er(10頁版)
聡 鳥谷部
Eclipse xtext 紹介
Eclipse xtext 紹介
Akira Tanaka
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
aitc_jp
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
uchan_nos
Let's stady Machine Learning with OCSJ
Let's stady Machine Learning with OCSJ
tuchimur
動的なILの生成と編集
動的なILの生成と編集
terurou
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Takuya Iwatsuka
TOPPERS TECS WG 2016
TOPPERS TECS WG 2016
Hiroshi Oyama
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
Takuya Azumi
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
2019 05-19.overview
2019 05-19.overview
Shin-ya Koga
第84回 雲勉【オンライン:初心者向け】ECS入門 _ CloudFront + ELB + ECS FargateでWebサイトを公開
第84回 雲勉【オンライン:初心者向け】ECS入門 _ CloudFront + ELB + ECS FargateでWebサイトを公開
Keisuke Matsuda
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
Hideki Takase
solr勉強会資料
solr勉強会資料
Atsushi Takayasu
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
アシアル株式会社
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
Shintaro Hosoai
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)
Atsushi Takayasu
Elixir lang bootstrap
Elixir lang bootstrap
Tsunenori Oohara
Semelhante a Tokyoex6 EEx
(20)
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
t字形Er(10頁版)
t字形Er(10頁版)
Eclipse xtext 紹介
Eclipse xtext 紹介
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
Let's stady Machine Learning with OCSJ
Let's stady Machine Learning with OCSJ
動的なILの生成と編集
動的なILの生成と編集
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
TOPPERS TECS WG 2016
TOPPERS TECS WG 2016
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
2019 05-19.overview
2019 05-19.overview
第84回 雲勉【オンライン:初心者向け】ECS入門 _ CloudFront + ELB + ECS FargateでWebサイトを公開
第84回 雲勉【オンライン:初心者向け】ECS入門 _ CloudFront + ELB + ECS FargateでWebサイトを公開
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
solr勉強会資料
solr勉強会資料
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
【アシアル塾】PHPオブジェクト指向再入門・第四回デザインパターンに学ぶクラス設計
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)
Elixir lang bootstrap
Elixir lang bootstrap
Mais de Tsunenori Oohara
Elixirハンズオン2
Elixirハンズオン2
Tsunenori Oohara
meguro.rb LT
meguro.rb LT
Tsunenori Oohara
Elixir解答
Elixir解答
Tsunenori Oohara
Elixir言語紹介
Elixir言語紹介
Tsunenori Oohara
パンチラに関する考察
パンチラに関する考察
Tsunenori Oohara
how-to-learn-elixir
how-to-learn-elixir
Tsunenori Oohara
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
Tsunenori Oohara
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
Tsunenori Oohara
tokyo.ex3 LT
tokyo.ex3 LT
Tsunenori Oohara
Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介ver.2
Tsunenori Oohara
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
Tsunenori Oohara
elixir in production
elixir in production
Tsunenori Oohara
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
Tsunenori Oohara
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Tsunenori Oohara
地獄Spec
地獄Spec
Tsunenori Oohara
Mais de Tsunenori Oohara
(16)
Elixirハンズオン2
Elixirハンズオン2
meguro.rb LT
meguro.rb LT
Elixir解答
Elixir解答
Elixir言語紹介
Elixir言語紹介
パンチラに関する考察
パンチラに関する考察
how-to-learn-elixir
how-to-learn-elixir
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
tokyo.ex3 LT
tokyo.ex3 LT
Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介ver.2
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
elixir in production
elixir in production
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
地獄Spec
地獄Spec
Tokyoex6 EEx
1.
Template Engine for
Elixir Embedded Elixir 2016/09/22 tokyo.ex #6 おーはら
2.
Agenda 自己紹介 |> 趣旨 |> TemplateEngineとは |>
EExとは |> EExの構成 |> eval_(string|file) |> function_from_(string|file) |> compile_(string|file) |> 仕組み |> ASTとは |> compile |> Tokenizer |> Engine |> まとめ
3.
自己紹介 • おーはら@ohrdev – 基盤技術部@ドリコム •
仕事/技術スタック – 広告サービスのお世話 – 全社基盤システムのお世話 – Elixir/Erlang/Ruby/LFE/Lisp/etc… • コミュニティ – ElixirMeetUp、tokyo.ex、VR.tokyo – tokyo.erl(予定、10月前半頃に告知します)
4.
趣旨 • ターゲット – EEx
is 何? な方 • ゴール – EExの使い方がわかる – EExの仕組みがわかる
5.
TemplateEngineとは • テンプレート(雛形)と入力デー タを合成してドキュメント(文字 列)を出力するソフトウェア – ex)
jinja2, jade, erb, haml, slim, etc • ウェブページ(マークアップ)を出 力するエンジンを特に、ウェブ テンプレートエンジンと言う – WAFにバンドルされてる事が多 い(Railsのerbなど)
6.
EExとは • Embedded Elixir
(EEx) • 文字列、テンプレートにElixirのコードを評価し て埋め込む処理を提供するモジュール • Elixirにデフォルトでバンドル – https://github.com/elixir- lang/elixir/tree/master/lib/eex
7.
EExの構成 • 主要API – eval_string,
eval_file • 入力データと文字列/ファイルを直接評価して文字列を 出力、実行毎にcompile/evalするので遅い – function_from_string, function_from_file • 文字列/ファイルから、入力データを引数にして文字列 を出力する関数を定義するマクロ – compile_string, compile_file • 上2つのAPIの内部で使用される、文字列/ファイルを ElixirのASTにコンパイルする
8.
eval_string EEx.eval_string <source>, <binding>,
<option>
9.
eval_file EEx.eval_file <file>, <binding>,
<option>
10.
function_from_(string|file) EEx.function_from_string <type>, <name>,
<source>, <args>, <option> EEx.function_from_file <type>, <name>, <file>, <args>, <option>
11.
function_from_string(public)
12.
function_from_string(private)
13.
function_from_file
14.
仕組み:eval_(string|file) <source> <file> EEx.compile_string EEx.compile_file EEx.eval_string <source>,
<binding> EEx.eval_file <file>, <binding> EEx.do_eval Result Document <binding> ElixirのAST Code.eval_quoted 実行毎に、compile, evalされる 遅い! <file>が更新されて も、即反映される
15.
仕組み:function_from_(string|file) <source> <file> EEx.function_from_string EEx.function_from_file EEx.function_from_string <type>, <name>,
<source>, <args> EEx.function_from_file <type>, <name>, <file>, <args> Result Document BEAM macro def(p) name(args) do <source> or <file> end compile expand VMname(a1, a2 …) load compileしてから実行 phoenix_live_reloader 等でリロード <file>が更新されると、 再compileが必要
16.
ASTとは • Abstract Syntax
Tree • Elixirの式の内部表現、以下のタプルで表す – { :関数名, メタデータ, 引数 } – ex) 1 + 1 #=> {:+, [metadatas], [1, 1]} • quote でASTを確認できる
17.
ASTとは • Code.eval_quoted でASTを評価できる –
eval_quoted <ast>, <binding> • 詳しくは、 Metaprogramming Elixir を参照 – https://www.amazon.co.jp/dp/B00U1VU2GA
18.
compile • compile_string, compile_file
の実体は、 EEx.Compiler.compile <source>, <option> • EEx.Engine|EEx.SmartEngine を使って、出力 文字列のASTを返却する
19.
compile
20.
compileの流れ EEx.Tokenizer.tokenize <source> <tokens> EEx.Engine.init EEx.Engine.handle_body buffer <AST> EEx.Engine.handle_text EEx.Engine.handle_expr 入力文字列をトークン のリストに変換
21.
Tokenizer • Elixirコード(ロジックやバインディング)を含む 文字列をTokenのリストに変換する
22.
compileの流れ EEx.Tokenizer.tokenize <source> <tokens> EEx.Engine.init EEx.Engine.handle_body buffer <AST> EEx.Engine.handle_text EEx.Engine.handle_expr Engine 初期Buffer 後処理 BufferとTokenから quoteされた式を返却
23.
Engine • Tokenをバッファを使って、quoteされた式 (AST)に変換する • 4つのコールバックを実装する必要がある(ビ ヘイビア) –
init/1, handle_text/2, handle_expr/3, handle_body/1 • デフォルトはEEx.SmartEngine • compile時の:engineオプションで使用する Engineを指定
24.
カスタムEngine • カスタムエンジンの使い方 – init,
handle_test, handle_expr, handle_bodyの callbackを実装したエンジンモジュールを作成 – コンパイル時の:engineオプションで指定
25.
まとめ • ElixirのテンプレートエンジンのEExを紹介しま した • テンプレートとデータからドキュメント(文字列) を出力する流れを説明しました •
コンパイル時のトークナイザー、エンジンの処 理を説明しました • カスタムエンジンの作り方を説明しました
Baixar agora