Upload
charsbar
View
1.440
Download
5
Embed Size (px)
DESCRIPTION
talked at Fukuoka Perl Workshop on 18th CPAN birthday
Citation preview
2013年のCPAN
モジュール作成事情
Kenichi Ishigaki
(@charsbar)
Fukuoka Perl Workshop #24
Oct 26, 2013
(Happy CPAN birthday)
例によってCPANTSネタです
• 昨年こちらで話した分析の元ネタ
• この一年で、いろんなことがありました
• YAPC本編でもその一部について話してきました
• 今日はその続きとして、papixさんが話すはずだったネタについて話します
まずは軽く昨年のおさらいを
Top 10 (2012年版)
1 XAICRON
2 PAWAPAWA (new) (2011-)
3 BAYASHI
4 MORIYA
5 SATOH
6 MATTN (new) (2007-)
7 TOMITA
8 TYPESTER
9 CHIBA
10 YAMAMOTO (new) (2006-)
日本人の新規作者数 (2012年版)
11
6 8
5
14 14
43
51
41
29 27
25
20
17
0
10
20
30
40
50
60
~2000 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
日本人作者のリリース数 (2012年版)
41 47
245 295 291
173
569
1020
1147
1558
2041 2116
1841
1020
0
500
1000
1500
2000
2500
~2000 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
それから1年
採点基準の変化
• 春のQA Hackathon以降、採点基準が7増12減しています(YAPC後に1増しました)
• 実装の方もだいぶ修正しました
• が、今日もまた例外的なディストリビューションの作者氏からバグレポートが…
• 明日にでもまた1つ基準を増やそうと思っています
日本人のデータにもかなりの脱落が…
0.130307 2013/03/07
- turned out to have long ignored authors
whose emails are CENSORED;
added nearly hundred people to the list.
実はYAPC後にもいろいろ発覚
0.130930 2013/09/30
- applied more liberal detection rule and added twelve people
(hideo55++)
0.131002 2013/10/02
- applied more liberal detection rule and added twelve people
(again)
(motemen++)
最終的に今年のグラフはこんな感じになっています
日本人の新規作者数 (2013年版)
11
6 8
5
14 14
43
53
45
54
47
40
33
62
36
0
10
20
30
40
50
60
70
~2000 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
日本人作者のリリース数 (2013年版)
41 47
247 295 291
173
569
1023
1149
1604
2135 2221
1943 1849
2811
0
500
1000
1500
2000
2500
3000
~2000 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
Top 10 (2013年10月版)
1 BAYASHI (2008-)
2 YAKEX (new) (2012-)
3 MOZNION (new) (2012-)
3 HIDEAKIO (new) (2011-)
5 SYOHEX (new) (2011-)
5 AKIYM (new) (2012-)
7 SYAGI (new) (2012-)
7 ZIGUZAGU (new) (2007-)
7 CHIBA (inactive) (2007-)
10 ANAZAWA (new) (2011-)
10 PAPIX (new) (2012-)
10 SOH (new) (2012-)
10 PAWAPAWA (2011-)
10 MORIYA (inactive) (2009-)
10 RINTARO (inactive) (2007-)
若者の台頭、
すばらしいですね
• でも、この急激な変化の理由は?
• もちろん採点基準が変わった影響はあるでしょうが、それだけ?
リリース年とスコアの関係
- 年々着実に向上している
- 経験値の向上
- 啓蒙活動の成果?
- 優秀な若者が増えた?
- のかもしれないけれど、判定不能
89.23
91.47
92.45
93.26
95.01
95.43
96.32 96.07
96.65
97.52
88.94
91.44
92.03
92.42
93.07
93.84
94.58
94.97 95.26
96.22
88
89
90
91
92
93
94
95
96
97
98
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
国内
全世界
リリース年とリリース数の関係
- 年々着実に向上している
- 経験値の向上
- 啓蒙活動の成果?
- 優秀な若者が増えた?
- のかもしれないけれど、判定不能
173 570
1024 1148 1603
2133 2221 1934 1847
2762
11191
12268 12702
14455
18441
20998
22155 21822 22582
20575
0
5000
10000
15000
20000
25000
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
国内
全世界
ディストリビューションを作成するツールの変化?
• ひな形を作成するツールの分析はなかなか大変
• 生成されたドキュメントに痕跡が残っていることもありますが…
• インストールまわりのツールについてはCPAN
Meta filesを見ればある程度分析可能
CPAN Meta files
• META.yml/META.json
• いちいちMakefile.PL/Build.PLを実行しなくてもいいように
• 本格的な普及は2005年くらいから
• どんなツールで生成したかの情報が記録されている
Stats on META Generator
http://cpants.cpanauthors.org/stats/meta_generator
META generatorと平均スコア(全世界版)
88.00
90.00
92.00
94.00
96.00
98.00
100.00
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
ExtUtils::MakeMaker Module::Build Module::Install Dist::Zilla Milla Minilla
88.00
90.00
92.00
94.00
96.00
98.00
100.00
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
ExtUtils::MakeMaker Module::Build Module::Install Dist::Zilla Milla Minilla
META generatorと平均スコア(国内版)
META generatorとユニークユーザ数 (全世界版)
73
9
49 191 312 396
425
30
49
94 158
240 359 364
307 310
237
121
192
236 256
295 328
350 320 324
316
677
889 962 993 1031 969
889 891 920
748
0
500
1000
1500
2000
2500
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
ExtUtils::MakeMaker Module::Build Module::Install Dist::Zilla Milla Minilla
META generatorとユニークユーザ数 (国内版)
57
2
14 34
51
67
67 65
72 55
1
4
7 9 16
8
11 11
23 32
20
41
68 64 68 56
43 48 48 39
7
0
50
100
150
200
250
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
ExtUtils::MakeMaker Module::Build Module::Install Dist::Zilla Milla Minilla
META generatorとリリース数 (全世界版)
1074
86
992 3817
5865 6938
6967
733
942 1541
2817
4275 6152
5140
4070 3327
1945
1163
2305 2383
2783
3655 4198
3913 3260 3587
3083
5456 6921 7247 7584
8506 7536 7213 6824 6966
5745
419
0
5000
10000
15000
20000
25000
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
ExtUtils::MakeMaker Module::Build Module::Install Dist::Zilla Milla Minilla
META generatorとリリース数 (国内版)
970
227
9
175 503
907
1320
1488
1108 923
468
31
86
109
146 164 320 138
81 377 428
115
406
690
473 479 370 364
497 329 349
4
37
50
0
500
1000
1500
2000
2500
3000
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
ExtUtils::MakeMaker Module::Build Module::Install Dist::Zilla Milla Minilla
満点に注目してみた
149 131
244 329
446 300
93
651
0
500
1000
1500
2000
2500
3000
2012 2013
満点リリース数(国内版)
ExtUtils::MakeMaker Module::Build
Module::Install Dist::Zilla
Milla Minilla
329 349
377 428
923
468
227
970
0
500
1000
1500
2000
2500
3000
2012 2013
リリース数(国内版)
ExtUtils::MakeMaker Module::Build
Module::Install Dist::Zilla
Milla Minilla
満点に注目してみた
2471 2133
1604 1451
1014 769
3885 4047
721
0
5000
10000
15000
20000
25000
2012 2013
満点リリース(全世界版)
ExtUtils::MakeMaker Module::Build
Module::Install Dist::Zilla
Milla Minilla
6966 5745
3587
3083
3327
1945
6938
6967
419 1074
0
5000
10000
15000
20000
25000
2012 2013
リリース(全世界版)
ExtUtils::MakeMaker Module::Build
Module::Install Dist::Zilla
Milla Minilla
Top10作者とMETA generators
BAYASHI Module::Build, Minilla YAKEX Dist::Zilla
MOZNION Minilla, Module::Build
HIDEAKIO Module::Build, Minilla
SYOHEX Minilla, Module::Install
AKIYM Minilla, Module::Install, Module::Build
SYAGI ExtUtils::MakeMaker, Module::Build
ZIGUZAGU Module::Install ANAZAWA Module::Install
PAPIX Minilla, Module::Install, Module::Build
SOH Module::Install, Minilla PAWAPAWA Module::Install
これからモジュールを書くなら、Minillaがおすすめ
• Minillaを使うと初心者でも形式的な問題を起こしづらい
• 最初はpmsetupとかModule::Setupでもいいんですが、継続的なメンテを考えるとMinillaが有利
• いまもメンテナンスが続いている
• Module::Installは時代に取り残されつつある
• 大量の依存モジュールを気にしないならDist::ZillaやMillaでも
• 知識があるならお好きなように
Minilla: CPANモジュールを書く人のツール
• (M::I - inc) + shipit + (dzil - plugins)
• ひな形の作成からリリースまで、基本的なことはひと通りできる
• ほかのツールの使い方を覚える必要がない
• tokuhiromさんの流儀にしたがえば設定も不要
• 依存モジュールが少なくインストールが楽
• Windowsでも問題なくインストールできる
インストールには関与しない
• CPANモジュールを使うだけならインストール不要
• インストールは既存のツール(Module::Build)にまかせる
• 依存モジュールの制約が少ない
基本的な使い方
新規の場合はまずひな形を用意
$ minil new Foo-Bar
$ cd Foo-Bar
minil new Foo::Bar でも大丈夫
お好みで初期状態をコミットしておく
$ git commit -m "initial import"
git init && git add . はひな形作成時に済んでいます。
.pmファイルやテストファイルを編集する
• 依存モジュールが増えたら cpanfile も更新すること
• gitの管理下にないファイルは無視されます
• prove派の人はaddのし忘れに注意
• META.jsonやBuild.PLなどへの修正は無効
minil dist (minil release) 時に上書きされます
• Changesの日付やバージョンは更新不要
• リリース前の変更は常に{{$NEXT}}の下に書いていく
テストを実行する
$ minil test
$ minil test --all リリース時に自動実行されるテストも試したい場合
ディストリビューションを生成する
$ minil build
もっぱらデバッグ用
tarballを生成
$ minil dist
$ minil dist --no-test 事故防止のため ./Build dist は殺されています
開発中のディストリビューションをインストールする
$ minil install
$ minil install --no-test
• v0.8.0の時点ではデフォルトで二度テストが走ってしまう
→修正を取り込んでもらったので次版からは大丈夫
• ./Build install でも可
リリースの前に…
• buildtool_not_executable問題
• core.autocrlf
• Windowsでも使えますが、リリー
スだけは別の環境でするのがおすすめ
CPANにリリースする
$ minil release
$ minil release --trial
• 書きかけのファイルが残っているとリリースできません
• ひとまず.gitignoreに追加するか、ファイルの存在自体隠蔽したい場合はファイル名に.bakをつけるなどしてください
Githubにのみリリースする
(CPANにリリースしない)
$ FAKE_RELEASE=1 minil release
この辺、名前と実態があっていない気もします
CPANにもGithubにもリリースしたくない場合は--dry-run
$ minil release --dry-run
既存のモジュールをMinilla化する
$ minil migrate
• subversionのリポジトリなどは先にgitのリポジトリに変換しておくこと
• gitリポジトリになっていない場合、v0.8.0の段階では自前でgit init必要
→これも修正を取り込んでもらえました
• 隠しファイルなどがあるとパーミッションエラーで変換が止まることも
• v0.8.0 時点ではMakefile.PLからの移行時に多少ゴミが残るので、気になる場合は削除
もう少し高度な使い方?
• tokuhiromさんの流儀にしたがう、という大きなメリットが消えてしまうので、あまりおすすめしません
• Minillaで頑張るよりは、Dist::Zillaに移行した方が楽かと
XSモジュールを新規作成する
$ minil new -p XS Foo-XS
XSモジュールのmigrateの場合は-pオプション不要
設定ファイルを編集する
• XSを書くのでなければ通常不要
• Minillaのユースケース上はINIファイルとほぼ同じ書き方
• デフォルトの設定が上書きされるものと、そうでないものがあるので注意
Module::Buildの拡張機能を使う
• よほど特殊なことをしたいのでなければDist::Zillaに…
• ディストリビューションのルートにbuilder/MyBuilder.pmというファイルを作成すると、Minillaが内部でModule::Build
を利用する際に拡張があたります
Questions?