2015-07-10-kichijoji.pm4_yurui_template

 2015-07-10-kichijoji.pm4_yurui_template

テンプレートとPerlに関するゆるい話

吉祥寺.pm #4

A473164add8debfea01e4eb70e07d1ea?s=128

SUZUKI Masashi

July 10, 2015
Tweet

Transcript

  1. ゆるいテンプレートの話 2015/07/10 吉祥寺.pm #4 すずきまさし@masasuz 1

  2. おまえだれよ • すずきまさし/@masasuz • 五反田の中小Webサービス会社 • 運用/開発基盤整備 • Perl/zsh/MySQL/Nginx/Ubuntu/Debian/ i☆Ris

    
  3. (色んな意味で)熱いGotanda • Gotanda.pm • 五反田Perl • Perl入学式 • 東京Crystal勉強会 #1

    • 7/31 at Mobile Factory 
  4. もくじ • テンプレートエンジン is 何? • ゆるふわ • テンプレートエンジンの利用シーン •

    ゆるふわ 
  5. 5分で終わらないのに定評が あるので巻きます。 5

  6. テンプレートエンジン is 何? 6

  7. テンプレートエンジン is 何? テンプレートとデータ構造(変 数)を受け取ってそれらを組み 合わせたものを返す(出力)する しくみ WebではViewの部分で一般的に 使われています。 

  8. # データ構造 +{ title => 'なんとかぺーじ', user => +{ name

    => 'かるぱ', age => 18, }, } # 出力 <html> <head title=“なんとかぺーじ”> <body> ドーモ かるぱ=サン </body> # テンプレート <html> <head title=“[% title %]”> <body> ドーモ [% user.name %]=サン </body> テンプレートエンジン=サン 8
  9. テンプレートエンジンの機能 • 制御構造 • 分岐(if, else), ループ(for, while) • フィルター

    • HTMLエスケープ • マクロ • インクルード 
  10. テンプレートエンジン 使ってますか? 10

  11. 一番有名なのはPHPですよね? 11

  12. さておき、 12

  13. Perlのテンプレートエンジン • Text::Xslate • XSで高速 • xslate.org 死んでる? • Template::Toolkit

    (Template Toolkit2) • 広く使われてる • Text::MicroTemplate • コアモジュールのみに依存 
  14. テンプレートエンジン 利用シーン 14

  15. 利用シーン • 一般的にはweb applicationのView • Web Applicationのflavor • サーバ/ミドルウェアの設定 •

    そのた 
  16. Web ApplicationのFlavor • e.g. Amon2::Setup::Flavor • amon2-setup.pl--flavor=Basic MyApp • テンプレートファイルにモジュール名を

    渡してプロジェクトの雛形を作ってくれ る。 
  17. 自分のテンプレート 利用シーン 17

  18. 設定ファイル • 社内では、基本的にどのサーバも個別事項以外は、 同じ設定にしておきたい。 • 手作業での記述ミスを避けたい • コピペでミスは避けたい • 同じような設定を複数書く際のミスを避けたい

    • 修正漏れを避けたい • 要は自動生成したい 
  19. MySQLの設定ファイル • ノードのメモリによってbuffer_poolの サイズを変えたい。 • server_idは、ノードのip addressから 動的に決めたい。 • slaveだけread_onlyを付けたい

    • etc... 
  20. 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
  21. Nginxの設定ファイル • rootとvhostが違うだけの設定が大量に ある。 • Plackサーバのポートは、設定ファイル に記述してあるのでそこを参照したい。 • etc... 

  22. 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
  23. 日報 • 日付だけ違うだけで、他はほぼ同じ内容 もマークダウンテキスト。 • 最近は、Qiita:Teamとかesaでテンプ レート使ってる人も多い。 

  24. 日報 #!/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. ? 25

  26. 素のBashもテンプレート エンジンになりうる!! 26

  27. 日報 #!/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
  28. 半分ネタですが。 • ヒアドキュメントには変数を埋め込める • $()内に処理を埋め込める • 制御構造は厳しいが、ヒアドキュメントを 分割すれば、なんとか。。 • とはいえ、簡単なものであれば、これで充

    分。 
  29. MATOME • 手書きよりテンプレートによる自動生成の 方が良い • コピペによるミスを避けられる • 修正漏れを避けられる • 簡単なことなら高機能なテンプレートエン

    ジンは無くても良い • 使う道具は要件次第 29
  30. 宣伝 30

  31. (色んな意味で)熱いGotanda • Gotanda.pm • 五反田Perl • Perl入学式 • 東京Crystal勉強会 #1

    • 7/31 at Mobile Factory