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
2025-11-21 社内エンジニア勉強会 改めて理解するVPC Endpoint
masasuzu
0
180
2025-11-08 Security JAWS TerraformによるIAM Policy記述ガイド
masasuzu
2
1k
2025-09-25 SRETT #13 ConftestによるTerraformのPolicy as Codeを試してみる
masasuzu
0
320
2025-09-19 クラウドにおけるシークレット管理
masasuzu
0
450
2025-08-05 Google Cloud Next Tokyo 2025 Cloud RunとCloud SQLの接続方式と事例
masasuzu
0
55
2025-06-20 PrivateLinkがNLBなしで作れるようになり便利になった
masasuzu
2
720
2025-01-31 吉祥寺.pm 37 初めての海外カンファレンス
masasuzu
0
780
2025-01-24-SRETT11-OpenTofuについてそろそろ調べてみるか
masasuzu
0
2.1k
2024-03-29 SRETT9 Cloud SQLの可用性について
masasuzu
0
560
Other Decks in Programming
See All in Programming
組織で育むオブザーバビリティ
ryota_hnk
0
170
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
130
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
710
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
100
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
120
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
950
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
160
今から始めるClaude Code超入門
448jp
8
8.6k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
630
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Six Lessons from altMBA
skipperchong
29
4.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
110
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
700
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
160
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
640
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
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