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.5k
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
2026-03-03 Jagu'e'r Tech Writer Meetup #19 登壇のネタ作りについて
masasuzu
0
50
2026-02-24 月末 Tech Lunch Online #10 Cloud Runのデプロイの課題から考えるアプリとインフラの境界線
masasuzu
0
110
2025-11-21 社内エンジニア勉強会 改めて理解するVPC Endpoint
masasuzu
0
240
2025-11-08 Security JAWS TerraformによるIAM Policy記述ガイド
masasuzu
2
1.1k
2025-09-25 SRETT #13 ConftestによるTerraformのPolicy as Codeを試してみる
masasuzu
0
380
2025-09-19 クラウドにおけるシークレット管理
masasuzu
0
550
2025-08-05 Google Cloud Next Tokyo 2025 Cloud RunとCloud SQLの接続方式と事例
masasuzu
0
63
2025-06-20 PrivateLinkがNLBなしで作れるようになり便利になった
masasuzu
2
810
2025-01-31 吉祥寺.pm 37 初めての海外カンファレンス
masasuzu
0
820
Other Decks in Programming
See All in Programming
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
3
1.1k
Codex の「自走力」を高める
yorifuji
0
1k
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
170
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
500
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
720
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
8.2k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
270
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
210
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
470
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
11
2.6k
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
370
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
530
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
830
WENDY [Excerpt]
tessaabrams
9
36k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
210
Technical Leadership for Architectural Decision Making
baasie
3
280
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
470
Odyssey Design
rkendrick25
PRO
2
540
The Curious Case for Waylosing
cassininazir
0
260
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
120
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
69
How to make the Groovebox
asonas
2
2k
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