0から学んだポストモダンperl @ yapc::asia tokyo 2013
Post on 18-Dec-2014
5.388 Views
Preview:
DESCRIPTION
TRANSCRIPT
1
0から学んだポストモダン
PerlYAPC::Asia Tokyo 2013
グニャラくん(末永 匡)
Perlについてほとんど知らない
この僕が
2
社内用Webアプリケーションフレームワークを作ることになって
3
いろいろ壁に
ぶち当たりつつも
4
Perlmongerに近づけたお話
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、テンプレートはShift-JIS
25
困った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)
• No support for @import of sass
68
うう…ツラい
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を出力するスクリプトを書
いた
• cpanfile.snapshotになったから今は不要…なの?
79
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()がなかった
84
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
CPANAuthorになれました
97
98
CPAN参加への動機• コミュニティに還元したい• コミュニティから受けた恩恵は計り知れない
• 設計上の密結合化の防止
• グルーコードはつなぐモジュールがないと意味がない!
99
CPANの感想(1)
• 意外とカンタン
• 敷居低くてカジュアルに参加できる
100
CPANの感想(2)
• Minilla普通に便利ですね• その代わり、隠蔽されている部分について知識がない
と、イレギュラーな場合に死ぬ
101
CPANの感想(3)• モダンなXSモジュール作成法がよく分からない• typester先生のプレゼンはある
• https://speakerdeck.com/typester/xsnimatuwaruhua
• Module::Build::Pluggable::XSUtilはなんかつらかった
• http://blog.wktk.co.jp/archives/331
102
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
top related