狠狠撸

狠狠撸Share a Scribd company logo
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、テンプレートは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くらいは対応したい
? Co?ee/JSXにも対応したい
64
Sass/SCSS
対応
65
Text::Sass
? Text::Sassでイケるじゃん、と夢見て
いたころが僕にもありました
? Filesys::Notify::Simpleと組み合わせ
れば自動コンパイルできるはず
66
67
イケません!!!
README on
Text::Sass
? This is most de?nitely a work-in-
progress. It only implements a
subset of the speci?cation
? (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からcpan?leを出力するスクリプトを書
いた
? cpan?le.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
CPAN
Authorに
なれました
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

More Related Content

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