1
0から学んだ
ポストモダン
Perl
YAPC::Asia Tokyo 2013
グニャラくん
(末永 匡)
Perlについて
ほとんど知らない
この僕が
2
社内用Web
アプリケーション
フレームワークを
作ることになって
3
いろいろ
壁に
ぶち当たりつつも
4
Perl
mongerに
近づけたお話
5
本発表の概要
• 前半
「俺が考えるWebアプリケーションフ
レームワークとは」
• 後半
「酒と泪と俺とPerl」
6
7
自己紹介
8
自己紹介
• グニャラくん
• 「東横イン評論家」
でGoogle検索1位
9
まともに
Perl
書いたこと
なかった
10
Perlのイメージ
11
Perlといえば(1)
12
Perlといえば(2)
13
そんな僕が
いまや
14
GitHub認定?
• Perl monger?
• 単なる
Old style
engineer
15
なぜか?
16
Perlを
使う会社に
転職したから
17
所属
• 株式会社ディー・エヌ・エー
• ソーシャルゲーム開発部門に所属
• 海外向けソーシャルゲーム開発部署に配属
18
ある日
指令が
下った
19
20
国内向けWeb
ソーシャルゲーム
を海外移植せよ
Web S.G.の移植
• DeNA社内Webアプリケーション
フレームワーク MobaSiF
• 2003年から稼働
• たくさんのゲームがMobaSiF上で稼働
21
MobaSiF
• /home/xxxx/以下の固定パス
• Apacheが動作していることが前提
• 職人芸的mod_rewrite
• ゲーム・プラットフォーム・フレーム
ワークが密結合
22
海外向けに
単一のゲームだけ
切り出すのは
面倒だな…
23
さらに
困難な
事情が
24
日本ローカル
• ベトナム人エンジニアに説明しづらい
• What is DoCoMo? / What is Emoji?
• スマフォ向けだから使わないのだが
• コメントや設定ファイルが文字化けし
て破壊される
• ソースコードはEUC、テ...
困った
26
27
そういえば
こんな仕事も
やってたな
28
フレームワーク調査
• JSON on HTTPやWeb APIを各言語
でどうやって実装するのか
• http://blog.wktk.co.jp/archives/234
29
よっしゃパパ
Plack上で
MobaSiF互換
層作っちゃうぞー
30
旧GunyaSiF誕生
• Plack上に構築されたMobaSiF互換レ
イヤ
• ソースコード/テンプレートはUTF-8
に移行
• テンプレートはXslate/TTerseに移行
31
旧GunyaSiFの成果
• Mac上でVMなしに開発できるように
• Mobageお手製パッチ済みFlash生成
用Mingライブラリの64bit対応
32
結構簡単に
できた
Plackスゲー
33
そこから
しばらく
ゲーム運用
したあと
34
上長に
呼ばれる
35
36
お前
ゲーム向け
フレームワーク
作れ
フレームワーク作りへ
• 誰かがやらねばならないことだし
• 前職で従事していた「ニコニコ大百
科」というサービスも、フレームワー
ク手作りだったし
37
GunyaSiF
爆誕
38
フレームワークの中身
• Amon2ベース
• 複数アプリケーションをホスト
• 継承できる環境設定ファイル
• 社内の各種APIへの対応
39
どうでもいい
40
もっと
一般的な
話をします
41
Web
アプリケーション
フレームワークに
俺が求める機能
42
実は
43
ほとんどない
44
Plackスゲー
• Plack/PSGIの時点で、ある程度Web
アプリケーションをつくる土台がある
45
こんなのはいらない
• ルーティング
• Router::Simpleでよい
• O/Rマッパー
• Tengでよい
46
アプリケーション
側で
好きなモジュール
使えばいい
47
大事なこと
• 必要な部品はCPAN上にある
• それをいかに組み合わせるか
48
Web
アプリケーション
フレームワーク
を再定義すると
49
50
Web開発に必要な
モジュールセットの提案
と
モジュールを結びつける
グルーコードの実例
WAFの作り方
• 適切なCPANライブラリを選ぶ
• グルーコードを書く
51
グルーコードをどう書くか
• グルーコードはOld Style Perlで十分
• Mouse/Mooなにそれ?
• アクセサが必要なものは汎用的なモジ
ュールくらい
• 追い出したモジュールはCPANにアップロードする
52
blessで
十分!!!
53
54
これが
ポストモダン
Perl
CPANには
多くのWeb向け
モジュールがある
55
ただ
56
57
足りないと思う
モジュールが
いくつかある
足りない
モジュール
その1
58
Plack::App::
phpMyAdmin
59
phpMyAdminスゴイ
• 実用上テーブルビューワは欲しい
• P::A::PHPCGIで動かすのもいいけど
• ファントムファイル表示など、値がフ
ィルターできればなおよい
60
GunyaSiFでは
どうしたか
• スクラッチで書いた
• LDAP認証とか妙に凝った
• 正社員かどうかによってテーブルごとに閲覧権限を設
定できたり
• キモすぎてCPANに上げられない…
61
足りない
モジュール
その2
62
js/css
自動コンパイラ
minifier
63
デザイナーにやさしい
• Sprocketsによるアセットパイプライ
ンとか、Gruntとか
• Sass/SCSSくらいは対応したい
• Coffee/JSXにも対応したい
64
Sass/SCSS
対応
65
Text::Sass
• Text::Sassでイケるじゃん、と夢見て
いたころが僕にもありました
• Filesys::Notify::Simpleと組み合わせ
れば自動コンパイルできるはず
66
67
イケません!!!
README on
Text::Sass
• This is most definitely a work-in-
progress. It only implements a
subset of the specification
• (snip...
うう…
ツラい
69
GunyaSiFでは
どうしたか
• CSSはCompassを採用
• Rubyだけど
• 開発時は、CSSへのHTTPアクセス時に動的にコンパ
イル
• JS MinifyはClosure Compilerを採用
• Javaだけど
70
前半まとめ
71
前半まとめ
• WAF = Web向けCPANモジュールの
集合 + グルーコード
• グルーコードはポストモダンPerlで
• 足りてないモジュールもあるよね
72
73
酒と泪と
俺とPerl
74
Perl
まじめに
さわり始めた
感想
75
…
76
普通じゃん!
77
Perlへの感想
• 普通
• perlbrew/plenv
• cpanm/Carton
• Plack
• 他言語で便利なものがちゃんとある
78
モジュールの管理方法
• GunyaSiF開発時はCarton 1.0前
• Carton採用してたが、carton execめ
んどいのでcpanm化
• Carton.lockからcpanfileを出力するスクリプトを書
いた
• cpanfi...
Perlで
ハマったところ
80
Data::Dumper
• 開発中に使うモジュールランキング第
1位(俺調べ)
• Rubyでいうところのpp
• んな大事なモジュールが壊れてるわけ
ない
81
壊れてました…
82
壊れているという惨事
83
id:gfxに泣きついた
• Data::Dumper が壊れているという惨
事
• http://d.hatena.ne.jp/gfx/
20130305/1362496416
• Perl 5.13で導入された
isWORDCHAR()がな...
P::M::MemoryUsage
• Plack::Middleware::MemoryUsage
• packageごとのメモリ使用量
• リクエストを処理する前後の増分
• B::Size2(::Terse)を使ってる
85
壊れてました…
(SEGVする)
86
id:gfxに泣きついた
• B::Size2をデバッグしたときのメモ
• http://d.hatena.ne.jp/gfx/
20130201/1359701228
• SvMAGIC()の中で落ちてた
87
(元)同僚
スゴイ人が多くて
とても助かる
88
なぜ
こんなに
地雷を踏んだか
89
だいたい
Perl 5.10
のせい
90
なぜ
Perl 5.10を
選んだか
91
バージョンの選び方
• CentOS 6系のsystem Perlのバージ
ョンは5.10.1
• 枯れてるからそれ使おう
92
間違い
93
ライブラリは進化する
• CPANライブラリのバージョンも固定
しないんだったら、環境として枯れて
いない
• むしろ、リスクを増大させてしまった
94
バージョン新しくしよう
• 最新のPerlにフォローアップすべし
• セキュリティパッチが提供されている
• ハッシュ衝突攻撃のパッチを当てるのも面倒だった
• 便利機能や性能向上などいろんな恩恵もある
95
そんな
おっちょこちょい
な僕でも
96
CPAN
Authorに
なれました
97
98
CPAN参加への動機
• コミュニティに還元したい
• コミュニティから受けた恩恵は計り知れない
• 設計上の密結合化の防止
• グルーコードはつなぐモジュールがな
いと意味がない!
99
CPANの感想(1)
• 意外とカンタン
• 敷居低くてカジュアルに参加できる
100
CPANの感想(2)
• Minilla普通に便利ですね
• その代わり、隠蔽されている部分について知識がない
と、イレギュラーな場合に死ぬ
101
CPANの感想(3)
• モダンなXSモジュール作成法がよく
分からない
• typester先生のプレゼンはある
• https://speakerdeck.com/typester/xsnimatuwaruhua
• Module::Bui...
CPANの感想(4)
• Plack::Middleware名前空間のモジュ
ールを上げると、どこかのIRCに通知
が出るらしくコワイ
103
後半まとめ
• Perlは最新版に近いものを使おう
• CPANへの貢献はカジュアルに!
• 機能がかぶろうが、名前空間がちょっとおかしかろう
が、TMTOWTDIの精神で
104
まとめ
105
まとめ
• 汎用的な処理はCPANモジュールとし
て公開することを前提に書こう
• グルーコードを書いて世の中に面白い
Webサービスをどんどん出していこう
106
ご静聴ありがとう
ございます!
107
108
ストーリーから
浮いてる
スライド
(未使用)
109
フレームワークの苦労
• フレームワークだけ書くのつらい
• MobaSiFだって、大百科用フレームワークだって、ア
プリケーションを作りながらフレームワーク書いてい
た
• アプリ開発者のニーズと乖離する
110
C言語でWebApp(1)
• C言語でWebAppの開発に必要なN個
のこと
• http://blog.wktk.co.jp/ja/entry/2013/09/10/
clang-webapp
111
ジョークエントリ
では
ないんです
112
C言語でWebApp(2)
• 前職で作ったフレームワークはいたる
ところにC言語が使われていた
• メンテナンス性が最悪だった
113
Upcoming SlideShare
Loading in...5
×

0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013

5,930

Published on

Perl初心者だった私が、普通にPerl開発できるようになるまでの、1年間の涙と感動の軌跡をトークいたします。
- Apache/FastCGIベースのアプリケーションをPSGI/Plackに移行したり
- モジュール管理をCartonにしたりcpanm生にしたりして悩んだり
- Data::DumperやB::Size2::Terseの不具合で悩んだり
- Amon2をベースとしたウェブアプリケーションフレームワーク作成したり
- CPANにXSモジュールをアップロードしたり

Published in: Technology

0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013

  1. 1. 1 0から学んだ ポストモダン Perl YAPC::Asia Tokyo 2013 グニャラくん (末永 匡)
  2. 2. Perlについて ほとんど知らない この僕が 2
  3. 3. 社内用Web アプリケーション フレームワークを 作ることになって 3
  4. 4. いろいろ 壁に ぶち当たりつつも 4
  5. 5. Perl mongerに 近づけたお話 5
  6. 6. 本発表の概要 • 前半 「俺が考えるWebアプリケーションフ レームワークとは」 • 後半 「酒と泪と俺とPerl」 6
  7. 7. 7
  8. 8. 自己紹介 8
  9. 9. 自己紹介 • グニャラくん • 「東横イン評論家」 でGoogle検索1位 9
  10. 10. まともに Perl 書いたこと なかった 10
  11. 11. Perlのイメージ 11
  12. 12. Perlといえば(1) 12
  13. 13. Perlといえば(2) 13
  14. 14. そんな僕が いまや 14
  15. 15. GitHub認定? • Perl monger? • 単なる Old style engineer 15
  16. 16. なぜか? 16
  17. 17. Perlを 使う会社に 転職したから 17
  18. 18. 所属 • 株式会社ディー・エヌ・エー • ソーシャルゲーム開発部門に所属 • 海外向けソーシャルゲーム開発部署に配属 18
  19. 19. ある日 指令が 下った 19
  20. 20. 20 国内向けWeb ソーシャルゲーム を海外移植せよ
  21. 21. Web S.G.の移植 • DeNA社内Webアプリケーション フレームワーク MobaSiF • 2003年から稼働 • たくさんのゲームがMobaSiF上で稼働 21
  22. 22. MobaSiF • /home/xxxx/以下の固定パス • Apacheが動作していることが前提 • 職人芸的mod_rewrite • ゲーム・プラットフォーム・フレーム ワークが密結合 22
  23. 23. 海外向けに 単一のゲームだけ 切り出すのは 面倒だな… 23
  24. 24. さらに 困難な 事情が 24
  25. 25. 日本ローカル • ベトナム人エンジニアに説明しづらい • What is DoCoMo? / What is Emoji? • スマフォ向けだから使わないのだが • コメントや設定ファイルが文字化けし て破壊される • ソースコードはEUC、テンプレートはShift-JIS 25
  26. 26. 困った 26
  27. 27. 27
  28. 28. そういえば こんな仕事も やってたな 28
  29. 29. フレームワーク調査 • JSON on HTTPやWeb APIを各言語 でどうやって実装するのか • http://blog.wktk.co.jp/archives/234 29
  30. 30. よっしゃパパ Plack上で MobaSiF互換 層作っちゃうぞー 30
  31. 31. 旧GunyaSiF誕生 • Plack上に構築されたMobaSiF互換レ イヤ • ソースコード/テンプレートはUTF-8 に移行 • テンプレートはXslate/TTerseに移行 31
  32. 32. 旧GunyaSiFの成果 • Mac上でVMなしに開発できるように • Mobageお手製パッチ済みFlash生成 用Mingライブラリの64bit対応 32
  33. 33. 結構簡単に できた Plackスゲー 33
  34. 34. そこから しばらく ゲーム運用 したあと 34
  35. 35. 上長に 呼ばれる 35
  36. 36. 36 お前 ゲーム向け フレームワーク 作れ
  37. 37. フレームワーク作りへ • 誰かがやらねばならないことだし • 前職で従事していた「ニコニコ大百 科」というサービスも、フレームワー ク手作りだったし 37
  38. 38. GunyaSiF 爆誕 38
  39. 39. フレームワークの中身 • Amon2ベース • 複数アプリケーションをホスト • 継承できる環境設定ファイル • 社内の各種APIへの対応 39
  40. 40. どうでもいい 40
  41. 41. もっと 一般的な 話をします 41
  42. 42. Web アプリケーション フレームワークに 俺が求める機能 42
  43. 43. 実は 43
  44. 44. ほとんどない 44
  45. 45. Plackスゲー • Plack/PSGIの時点で、ある程度Web アプリケーションをつくる土台がある 45
  46. 46. こんなのはいらない • ルーティング • Router::Simpleでよい • O/Rマッパー • Tengでよい 46
  47. 47. アプリケーション 側で 好きなモジュール 使えばいい 47
  48. 48. 大事なこと • 必要な部品はCPAN上にある • それをいかに組み合わせるか 48
  49. 49. Web アプリケーション フレームワーク を再定義すると 49
  50. 50. 50 Web開発に必要な モジュールセットの提案 と モジュールを結びつける グルーコードの実例
  51. 51. WAFの作り方 • 適切なCPANライブラリを選ぶ • グルーコードを書く 51
  52. 52. グルーコードをどう書くか • グルーコードはOld Style Perlで十分 • Mouse/Mooなにそれ? • アクセサが必要なものは汎用的なモジ ュールくらい • 追い出したモジュールはCPANにアップロードする 52
  53. 53. blessで 十分!!! 53
  54. 54. 54 これが ポストモダン Perl
  55. 55. CPANには 多くのWeb向け モジュールがある 55
  56. 56. ただ 56
  57. 57. 57 足りないと思う モジュールが いくつかある
  58. 58. 足りない モジュール その1 58
  59. 59. Plack::App:: phpMyAdmin 59
  60. 60. phpMyAdminスゴイ • 実用上テーブルビューワは欲しい • P::A::PHPCGIで動かすのもいいけど • ファントムファイル表示など、値がフ ィルターできればなおよい 60
  61. 61. GunyaSiFでは どうしたか • スクラッチで書いた • LDAP認証とか妙に凝った • 正社員かどうかによってテーブルごとに閲覧権限を設 定できたり • キモすぎてCPANに上げられない… 61
  62. 62. 足りない モジュール その2 62
  63. 63. js/css 自動コンパイラ minifier 63
  64. 64. デザイナーにやさしい • Sprocketsによるアセットパイプライ ンとか、Gruntとか • Sass/SCSSくらいは対応したい • Coffee/JSXにも対応したい 64
  65. 65. Sass/SCSS 対応 65
  66. 66. Text::Sass • Text::Sassでイケるじゃん、と夢見て いたころが僕にもありました • Filesys::Notify::Simpleと組み合わせ れば自動コンパイルできるはず 66
  67. 67. 67 イケません!!!
  68. 68. README on Text::Sass • This is most definitely a work-in- progress. It only implements a subset of the specification • (snip) • No support for @import of sass 68
  69. 69. うう… ツラい 69
  70. 70. GunyaSiFでは どうしたか • CSSはCompassを採用 • Rubyだけど • 開発時は、CSSへのHTTPアクセス時に動的にコンパ イル • JS MinifyはClosure Compilerを採用 • Javaだけど 70
  71. 71. 前半まとめ 71
  72. 72. 前半まとめ • WAF = Web向けCPANモジュールの 集合 + グルーコード • グルーコードはポストモダンPerlで • 足りてないモジュールもあるよね 72
  73. 73. 73
  74. 74. 酒と泪と 俺とPerl 74
  75. 75. Perl まじめに さわり始めた 感想 75
  76. 76. … 76
  77. 77. 普通じゃん! 77
  78. 78. Perlへの感想 • 普通 • perlbrew/plenv • cpanm/Carton • Plack • 他言語で便利なものがちゃんとある 78
  79. 79. モジュールの管理方法 • GunyaSiF開発時はCarton 1.0前 • Carton採用してたが、carton execめ んどいのでcpanm化 • Carton.lockからcpanfileを出力するスクリプトを書 いた • cpanfile.snapshotになったから今は不要…なの? 79
  80. 80. Perlで ハマったところ 80
  81. 81. Data::Dumper • 開発中に使うモジュールランキング第 1位(俺調べ) • Rubyでいうところのpp • んな大事なモジュールが壊れてるわけ ない 81
  82. 82. 壊れてました… 82
  83. 83. 壊れているという惨事 83
  84. 84. id:gfxに泣きついた • Data::Dumper が壊れているという惨 事 • http://d.hatena.ne.jp/gfx/ 20130305/1362496416 • Perl 5.13で導入された isWORDCHAR()がなかった 84
  85. 85. P::M::MemoryUsage • Plack::Middleware::MemoryUsage • packageごとのメモリ使用量 • リクエストを処理する前後の増分 • B::Size2(::Terse)を使ってる 85
  86. 86. 壊れてました… (SEGVする) 86
  87. 87. id:gfxに泣きついた • B::Size2をデバッグしたときのメモ • http://d.hatena.ne.jp/gfx/ 20130201/1359701228 • SvMAGIC()の中で落ちてた 87
  88. 88. (元)同僚 スゴイ人が多くて とても助かる 88
  89. 89. なぜ こんなに 地雷を踏んだか 89
  90. 90. だいたい Perl 5.10 のせい 90
  91. 91. なぜ Perl 5.10を 選んだか 91
  92. 92. バージョンの選び方 • CentOS 6系のsystem Perlのバージ ョンは5.10.1 • 枯れてるからそれ使おう 92
  93. 93. 間違い 93
  94. 94. ライブラリは進化する • CPANライブラリのバージョンも固定 しないんだったら、環境として枯れて いない • むしろ、リスクを増大させてしまった 94
  95. 95. バージョン新しくしよう • 最新のPerlにフォローアップすべし • セキュリティパッチが提供されている • ハッシュ衝突攻撃のパッチを当てるのも面倒だった • 便利機能や性能向上などいろんな恩恵もある 95
  96. 96. そんな おっちょこちょい な僕でも 96
  97. 97. CPAN Authorに なれました 97
  98. 98. 98
  99. 99. CPAN参加への動機 • コミュニティに還元したい • コミュニティから受けた恩恵は計り知れない • 設計上の密結合化の防止 • グルーコードはつなぐモジュールがな いと意味がない! 99
  100. 100. CPANの感想(1) • 意外とカンタン • 敷居低くてカジュアルに参加できる 100
  101. 101. CPANの感想(2) • Minilla普通に便利ですね • その代わり、隠蔽されている部分について知識がない と、イレギュラーな場合に死ぬ 101
  102. 102. CPANの感想(3) • モダンなXSモジュール作成法がよく 分からない • typester先生のプレゼンはある • https://speakerdeck.com/typester/xsnimatuwaruhua • Module::Build::Pluggable::XSUtilはなんかつらかった • http://blog.wktk.co.jp/archives/331 102
  103. 103. CPANの感想(4) • Plack::Middleware名前空間のモジュ ールを上げると、どこかのIRCに通知 が出るらしくコワイ 103
  104. 104. 後半まとめ • Perlは最新版に近いものを使おう • CPANへの貢献はカジュアルに! • 機能がかぶろうが、名前空間がちょっとおかしかろう が、TMTOWTDIの精神で 104
  105. 105. まとめ 105
  106. 106. まとめ • 汎用的な処理はCPANモジュールとし て公開することを前提に書こう • グルーコードを書いて世の中に面白い Webサービスをどんどん出していこう 106
  107. 107. ご静聴ありがとう ございます! 107
  108. 108. 108
  109. 109. ストーリーから 浮いてる スライド (未使用) 109
  110. 110. フレームワークの苦労 • フレームワークだけ書くのつらい • MobaSiFだって、大百科用フレームワークだって、ア プリケーションを作りながらフレームワーク書いてい た • アプリ開発者のニーズと乖離する 110
  111. 111. C言語でWebApp(1) • C言語でWebAppの開発に必要なN個 のこと • http://blog.wktk.co.jp/ja/entry/2013/09/10/ clang-webapp 111
  112. 112. ジョークエントリ では ないんです 112
  113. 113. C言語でWebApp(2) • 前職で作ったフレームワークはいたる ところにC言語が使われていた • メンテナンス性が最悪だった 113
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×