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
110
2025-11-08 Security JAWS TerraformによるIAM Policy記述ガイド
masasuzu
2
930
2025-09-25 SRETT #13 ConftestによるTerraformのPolicy as Codeを試してみる
masasuzu
0
250
2025-09-19 クラウドにおけるシークレット管理
masasuzu
0
330
2025-08-05 Google Cloud Next Tokyo 2025 Cloud RunとCloud SQLの接続方式と事例
masasuzu
0
46
2025-06-20 PrivateLinkがNLBなしで作れるようになり便利になった
masasuzu
2
630
2025-01-31 吉祥寺.pm 37 初めての海外カンファレンス
masasuzu
0
700
2025-01-24-SRETT11-OpenTofuについてそろそろ調べてみるか
masasuzu
0
2k
2024-03-29 SRETT9 Cloud SQLの可用性について
masasuzu
0
540
Other Decks in Programming
See All in Programming
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
340
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
Grafana:建立系統全知視角的捷徑
blueswen
0
280
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
240
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
150
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
250
CSC307 Lecture 03
javiergs
PRO
1
460
CSC307 Lecture 01
javiergs
PRO
0
650
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
520
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
15
4.3k
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
130
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
The Pragmatic Product Professional
lauravandoore
37
7.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Documentation Writing (for coders)
carmenintech
77
5.2k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
110
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
160
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