2015-07-10-kichijoji.pm4_yurui_template
by
SUZUKI Masashi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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