2015-07-10-kichijoji.pm4_yurui_template
by
SUZUKI Masashi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ゆるいテンプレートの話 2015/07/10 吉祥寺.pm #4 すずきまさし@masasuz 1
Slide 2
Slide 2 text
おまえだれよ • すずきまさし/@masasuz • 五反田の中小Webサービス会社 • 運用/開発基盤整備 • Perl/zsh/MySQL/Nginx/Ubuntu/Debian/ i☆Ris
Slide 3
Slide 3 text
(色んな意味で)熱いGotanda • Gotanda.pm • 五反田Perl • Perl入学式 • 東京Crystal勉強会 #1 • 7/31 at Mobile Factory
Slide 4
Slide 4 text
もくじ • テンプレートエンジン is 何? • ゆるふわ • テンプレートエンジンの利用シーン • ゆるふわ
Slide 5
Slide 5 text
5分で終わらないのに定評が あるので巻きます。 5
Slide 6
Slide 6 text
テンプレートエンジン is 何? 6
Slide 7
Slide 7 text
テンプレートエンジン is 何? テンプレートとデータ構造(変 数)を受け取ってそれらを組み 合わせたものを返す(出力)する しくみ WebではViewの部分で一般的に 使われています。
Slide 8
Slide 8 text
# データ構造 +{ title => 'なんとかぺーじ', user => +{ name => 'かるぱ', age => 18, }, } # 出力 ドーモ かるぱ=サン # テンプレート ドーモ [% user.name %]=サン テンプレートエンジン=サン 8
Slide 9
Slide 9 text
テンプレートエンジンの機能 • 制御構造 • 分岐(if, else), ループ(for, while) • フィルター • HTMLエスケープ • マクロ • インクルード
Slide 10
Slide 10 text
テンプレートエンジン 使ってますか? 10
Slide 11
Slide 11 text
一番有名なのはPHPですよね? 11
Slide 12
Slide 12 text
さておき、 12
Slide 13
Slide 13 text
Perlのテンプレートエンジン • Text::Xslate • XSで高速 • xslate.org 死んでる? • Template::Toolkit (Template Toolkit2) • 広く使われてる • Text::MicroTemplate • コアモジュールのみに依存
Slide 14
Slide 14 text
テンプレートエンジン 利用シーン 14
Slide 15
Slide 15 text
利用シーン • 一般的にはweb applicationのView • Web Applicationのflavor • サーバ/ミドルウェアの設定 • そのた
Slide 16
Slide 16 text
Web ApplicationのFlavor • e.g. Amon2::Setup::Flavor • amon2-setup.pl--flavor=Basic MyApp • テンプレートファイルにモジュール名を 渡してプロジェクトの雛形を作ってくれ る。
Slide 17
Slide 17 text
自分のテンプレート 利用シーン 17
Slide 18
Slide 18 text
設定ファイル • 社内では、基本的にどのサーバも個別事項以外は、 同じ設定にしておきたい。 • 手作業での記述ミスを避けたい • コピペでミスは避けたい • 同じような設定を複数書く際のミスを避けたい • 修正漏れを避けたい • 要は自動生成したい
Slide 19
Slide 19 text
MySQLの設定ファイル • ノードのメモリによってbuffer_poolの サイズを変えたい。 • server_idは、ノードのip addressから 動的に決めたい。 • slaveだけread_onlyを付けたい • etc...
Slide 20
Slide 20 text
MySQL # generated by mkconf.pl # IP : [% ip %] # Memory : [% memsize %]MB #------------------------------------------------ [mysqld] server-id = [% server_id %] [% IF role == 'slave' -%] read_only [%- END %] innodb_buffer_pool_size = [% int(memsize * 0.65) %]M # メモリの65% # snip .., 20
Slide 21
Slide 21 text
Nginxの設定ファイル • rootとvhostが違うだけの設定が大量に ある。 • Plackサーバのポートは、設定ファイル に記述してあるのでそこを参照したい。 • etc...
Slide 22
Slide 22 text
Nginx [%- FOR project IN projects %] upstream app_[% project.name %] { [% FOR server IN project.app_servers -%] server [% server %]:[% project.plack_port %]; [% END %] } server { server_name [% FOR domain IN project.domains -%] [% domains %] [% END %] ; location /static/ { root /usr/local/project/[% project.name %]/static; } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://app_[% projet.name %]; } } [% END %] 22
Slide 23
Slide 23 text
日報 • 日付だけ違うだけで、他はほぼ同じ内容 もマークダウンテキスト。 • 最近は、Qiita:Teamとかesaでテンプ レート使ってる人も多い。
Slide 24
Slide 24 text
日報 #!/bin/bash cat << __EOF__ > $(date +"%Y/%m/%d(%a).md") # $(date +"%Y/%m/%d(%a)") 日報 [yesterday](../../$(date --date yesterday +"%Y/%m/%d.md")) / [tomorrow](../../$ (date --date tomorrow +"%Y/%m/%d.md")) ## Todo ## Memo ### Blogged ### Bookmark ## Done ## Doing ## ToDo __EOF__ 24
Slide 25
Slide 25 text
? 25
Slide 26
Slide 26 text
素のBashもテンプレート エンジンになりうる!! 26
Slide 27
Slide 27 text
日報 #!/bin/bash cat << __EOF__ > $(date +"%Y/%m/%d(%a).md") # $(date +"%Y/%m/%d(%a)") 日報 [yesterday](../../$(date --date yesterday +"%Y/%m/%d.md")) / [tomorrow](../../$ (date --date tomorrow +"%Y/%m/%d.md")) ## Todo ## Memo ### Blogged ### Bookmark ## Done ## Doing ## ToDo __EOF__ 27
Slide 28
Slide 28 text
半分ネタですが。 • ヒアドキュメントには変数を埋め込める • $()内に処理を埋め込める • 制御構造は厳しいが、ヒアドキュメントを 分割すれば、なんとか。。 • とはいえ、簡単なものであれば、これで充 分。
Slide 29
Slide 29 text
MATOME • 手書きよりテンプレートによる自動生成の 方が良い • コピペによるミスを避けられる • 修正漏れを避けられる • 簡単なことなら高機能なテンプレートエン ジンは無くても良い • 使う道具は要件次第 29
Slide 30
Slide 30 text
宣伝 30
Slide 31
Slide 31 text
(色んな意味で)熱いGotanda • Gotanda.pm • 五反田Perl • Perl入学式 • 東京Crystal勉強会 #1 • 7/31 at Mobile Factory