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