Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2015-07-10-kichijoji.pm4_yurui_template
Search
SUZUKI Masashi
July 10, 2015
Programming
0
1.3k
2015-07-10-kichijoji.pm4_yurui_template
テンプレートとPerlに関するゆるい話
吉祥寺.pm #4
SUZUKI Masashi
July 10, 2015
Tweet
Share
More Decks by SUZUKI Masashi
See All by SUZUKI Masashi
2024-03-29 SRETT9 Cloud SQLの可用性について
masasuzu
0
400
2023-12-18 SRETT8 Terraform使いがPulumiに入門する
masasuzu
0
2.1k
2023-12-01 吉祥寺.pm ベストプラクティスと組織とIaC
masasuzu
1
1.5k
SRETT#6_Terraformのtfstateについて考える
masasuzu
2
2.7k
SRETT#4黒い画面をもっと効率的に(使って自動化の時間を捻出)
masasuzu
2
410
2022-04-12 吉祥寺.pm 29
masasuzu
0
1.4k
2015-12-12-chiba.pm7
masasuzu
0
3.4k
2015-09-17_gotanda.pm6
masasuzu
0
3.5k
2015-06-25_gotanda.pm5
masasuzu
0
1.6k
Other Decks in Programming
See All in Programming
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
120
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
260
fs2-io を試してたらバグを見つけて直した話
chencmd
0
240
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
350
【re:Growth 2024】 Aurora DSQL をちゃんと話します!
maroon1st
0
800
Beyond ORM
77web
8
1.2k
Spatial Rendering for Apple Vision Pro
warrenm
0
150
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
230
useSyncExternalStoreを使いまくる
ssssota
6
1.4k
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
290
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Being A Developer After 40
akosma
87
590k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
170
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Side Projects
sachag
452
42k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
Rails Girls Zürich Keynote
gr2m
94
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
910
Visualization
eitanlees
146
15k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Transcript
ゆるいテンプレートの話 2015/07/10 吉祥寺.pm #4 すずきまさし@masasuz 1
おまえだれよ • すずきまさし/@masasuz • 五反田の中小Webサービス会社 • 運用/開発基盤整備 • Perl/zsh/MySQL/Nginx/Ubuntu/Debian/ i☆Ris
(色んな意味で)熱いGotanda • Gotanda.pm • 五反田Perl • Perl入学式 • 東京Crystal勉強会 #1
• 7/31 at Mobile Factory
もくじ • テンプレートエンジン is 何? • ゆるふわ • テンプレートエンジンの利用シーン •
ゆるふわ
5分で終わらないのに定評が あるので巻きます。 5
テンプレートエンジン is 何? 6
テンプレートエンジン is 何? テンプレートとデータ構造(変 数)を受け取ってそれらを組み 合わせたものを返す(出力)する しくみ WebではViewの部分で一般的に 使われています。
# データ構造 +{ title => 'なんとかぺーじ', user => +{ name
=> 'かるぱ', age => 18, }, } # 出力 <html> <head title=“なんとかぺーじ”> <body> ドーモ かるぱ=サン </body> # テンプレート <html> <head title=“[% title %]”> <body> ドーモ [% user.name %]=サン </body> テンプレートエンジン=サン 8
テンプレートエンジンの機能 • 制御構造 • 分岐(if, else), ループ(for, while) • フィルター
• HTMLエスケープ • マクロ • インクルード
テンプレートエンジン 使ってますか? 10
一番有名なのはPHPですよね? 11
さておき、 12
Perlのテンプレートエンジン • Text::Xslate • XSで高速 • xslate.org 死んでる? • Template::Toolkit
(Template Toolkit2) • 広く使われてる • Text::MicroTemplate • コアモジュールのみに依存
テンプレートエンジン 利用シーン 14
利用シーン • 一般的にはweb applicationのView • Web Applicationのflavor • サーバ/ミドルウェアの設定 •
そのた
Web ApplicationのFlavor • e.g. Amon2::Setup::Flavor • amon2-setup.pl--flavor=Basic MyApp • テンプレートファイルにモジュール名を
渡してプロジェクトの雛形を作ってくれ る。
自分のテンプレート 利用シーン 17
設定ファイル • 社内では、基本的にどのサーバも個別事項以外は、 同じ設定にしておきたい。 • 手作業での記述ミスを避けたい • コピペでミスは避けたい • 同じような設定を複数書く際のミスを避けたい
• 修正漏れを避けたい • 要は自動生成したい
MySQLの設定ファイル • ノードのメモリによってbuffer_poolの サイズを変えたい。 • server_idは、ノードのip addressから 動的に決めたい。 • slaveだけread_onlyを付けたい
• etc...
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
Nginxの設定ファイル • rootとvhostが違うだけの設定が大量に ある。 • Plackサーバのポートは、設定ファイル に記述してあるのでそこを参照したい。 • etc...
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
日報 • 日付だけ違うだけで、他はほぼ同じ内容 もマークダウンテキスト。 • 最近は、Qiita:Teamとかesaでテンプ レート使ってる人も多い。
日報 #!/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
? 25
素のBashもテンプレート エンジンになりうる!! 26
日報 #!/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
半分ネタですが。 • ヒアドキュメントには変数を埋め込める • $()内に処理を埋め込める • 制御構造は厳しいが、ヒアドキュメントを 分割すれば、なんとか。。 • とはいえ、簡単なものであれば、これで充
分。
MATOME • 手書きよりテンプレートによる自動生成の 方が良い • コピペによるミスを避けられる • 修正漏れを避けられる • 簡単なことなら高機能なテンプレートエン
ジンは無くても良い • 使う道具は要件次第 29
宣伝 30
(色んな意味で)熱いGotanda • Gotanda.pm • 五反田Perl • Perl入学式 • 東京Crystal勉強会 #1
• 7/31 at Mobile Factory