50
2013年のCPAN モジュール作成事情 Kenichi Ishigaki (@charsbar) Fukuoka Perl Workshop #24 Oct 26, 2013 (Happy CPAN birthday)

2013年のCPANモジュール作成事情

Embed Size (px)

DESCRIPTION

talked at Fukuoka Perl Workshop on 18th CPAN birthday

Citation preview

Page 1: 2013年のCPANモジュール作成事情

2013年のCPAN

モジュール作成事情

Kenichi Ishigaki

(@charsbar)

Fukuoka Perl Workshop #24

Oct 26, 2013

(Happy CPAN birthday)

Page 2: 2013年のCPANモジュール作成事情

例によってCPANTSネタです

• 昨年こちらで話した分析の元ネタ

• この一年で、いろんなことがありました

• YAPC本編でもその一部について話してきました

• 今日はその続きとして、papixさんが話すはずだったネタについて話します

Page 3: 2013年のCPANモジュール作成事情

まずは軽く昨年のおさらいを

Page 4: 2013年のCPANモジュール作成事情

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-)

Page 5: 2013年のCPANモジュール作成事情

日本人の新規作者数 (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

Page 6: 2013年のCPANモジュール作成事情

日本人作者のリリース数 (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

Page 7: 2013年のCPANモジュール作成事情

それから1年

Page 8: 2013年のCPANモジュール作成事情

採点基準の変化

• 春のQA Hackathon以降、採点基準が7増12減しています(YAPC後に1増しました)

• 実装の方もだいぶ修正しました

• が、今日もまた例外的なディストリビューションの作者氏からバグレポートが…

• 明日にでもまた1つ基準を増やそうと思っています

Page 9: 2013年のCPANモジュール作成事情

日本人のデータにもかなりの脱落が…

0.130307 2013/03/07

- turned out to have long ignored authors

whose emails are CENSORED;

added nearly hundred people to the list.

Page 10: 2013年のCPANモジュール作成事情

実は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++)

Page 11: 2013年のCPANモジュール作成事情

最終的に今年のグラフはこんな感じになっています

Page 12: 2013年のCPANモジュール作成事情

日本人の新規作者数 (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

Page 13: 2013年のCPANモジュール作成事情

日本人作者のリリース数 (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

Page 14: 2013年のCPANモジュール作成事情

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-)

Page 15: 2013年のCPANモジュール作成事情

若者の台頭、

すばらしいですね

• でも、この急激な変化の理由は?

• もちろん採点基準が変わった影響はあるでしょうが、それだけ?

Page 16: 2013年のCPANモジュール作成事情

リリース年とスコアの関係

- 年々着実に向上している

- 経験値の向上

- 啓蒙活動の成果?

- 優秀な若者が増えた?

- のかもしれないけれど、判定不能

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

国内

全世界

Page 17: 2013年のCPANモジュール作成事情

リリース年とリリース数の関係

- 年々着実に向上している

- 経験値の向上

- 啓蒙活動の成果?

- 優秀な若者が増えた?

- のかもしれないけれど、判定不能

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

国内

全世界

Page 18: 2013年のCPANモジュール作成事情

ディストリビューションを作成するツールの変化?

• ひな形を作成するツールの分析はなかなか大変

• 生成されたドキュメントに痕跡が残っていることもありますが…

• インストールまわりのツールについてはCPAN

Meta filesを見ればある程度分析可能

Page 19: 2013年のCPANモジュール作成事情

CPAN Meta files

• META.yml/META.json

• いちいちMakefile.PL/Build.PLを実行しなくてもいいように

• 本格的な普及は2005年くらいから

• どんなツールで生成したかの情報が記録されている

Page 20: 2013年のCPANモジュール作成事情

Stats on META Generator

http://cpants.cpanauthors.org/stats/meta_generator

Page 21: 2013年のCPANモジュール作成事情

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

Page 22: 2013年のCPANモジュール作成事情

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と平均スコア(国内版)

Page 23: 2013年のCPANモジュール作成事情

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

Page 24: 2013年のCPANモジュール作成事情

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

Page 25: 2013年のCPANモジュール作成事情

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

Page 26: 2013年のCPANモジュール作成事情

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

Page 27: 2013年のCPANモジュール作成事情

満点に注目してみた

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

Page 28: 2013年のCPANモジュール作成事情

満点に注目してみた

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

Page 29: 2013年のCPANモジュール作成事情

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

Page 30: 2013年のCPANモジュール作成事情

これからモジュールを書くなら、Minillaがおすすめ

• Minillaを使うと初心者でも形式的な問題を起こしづらい

• 最初はpmsetupとかModule::Setupでもいいんですが、継続的なメンテを考えるとMinillaが有利

• いまもメンテナンスが続いている

• Module::Installは時代に取り残されつつある

• 大量の依存モジュールを気にしないならDist::ZillaやMillaでも

• 知識があるならお好きなように

Page 31: 2013年のCPANモジュール作成事情

Minilla: CPANモジュールを書く人のツール

• (M::I - inc) + shipit + (dzil - plugins)

• ひな形の作成からリリースまで、基本的なことはひと通りできる

• ほかのツールの使い方を覚える必要がない

• tokuhiromさんの流儀にしたがえば設定も不要

• 依存モジュールが少なくインストールが楽

• Windowsでも問題なくインストールできる

Page 32: 2013年のCPANモジュール作成事情

インストールには関与しない

• CPANモジュールを使うだけならインストール不要

• インストールは既存のツール(Module::Build)にまかせる

• 依存モジュールの制約が少ない

Page 33: 2013年のCPANモジュール作成事情

基本的な使い方

Page 34: 2013年のCPANモジュール作成事情

新規の場合はまずひな形を用意

$ minil new Foo-Bar

$ cd Foo-Bar

minil new Foo::Bar でも大丈夫

Page 35: 2013年のCPANモジュール作成事情

お好みで初期状態をコミットしておく

$ git commit -m "initial import"

git init && git add . はひな形作成時に済んでいます。

Page 36: 2013年のCPANモジュール作成事情

.pmファイルやテストファイルを編集する

• 依存モジュールが増えたら cpanfile も更新すること

• gitの管理下にないファイルは無視されます

• prove派の人はaddのし忘れに注意

• META.jsonやBuild.PLなどへの修正は無効

minil dist (minil release) 時に上書きされます

• Changesの日付やバージョンは更新不要

• リリース前の変更は常に{{$NEXT}}の下に書いていく

Page 37: 2013年のCPANモジュール作成事情

テストを実行する

$ minil test

$ minil test --all リリース時に自動実行されるテストも試したい場合

Page 38: 2013年のCPANモジュール作成事情

ディストリビューションを生成する

$ minil build

もっぱらデバッグ用

Page 39: 2013年のCPANモジュール作成事情

tarballを生成

$ minil dist

$ minil dist --no-test 事故防止のため ./Build dist は殺されています

Page 40: 2013年のCPANモジュール作成事情

開発中のディストリビューションをインストールする

$ minil install

$ minil install --no-test

• v0.8.0の時点ではデフォルトで二度テストが走ってしまう

→修正を取り込んでもらったので次版からは大丈夫

• ./Build install でも可

Page 41: 2013年のCPANモジュール作成事情

リリースの前に…

• buildtool_not_executable問題

• core.autocrlf

• Windowsでも使えますが、リリー

スだけは別の環境でするのがおすすめ

Page 42: 2013年のCPANモジュール作成事情

CPANにリリースする

$ minil release

$ minil release --trial

• 書きかけのファイルが残っているとリリースできません

• ひとまず.gitignoreに追加するか、ファイルの存在自体隠蔽したい場合はファイル名に.bakをつけるなどしてください

Page 43: 2013年のCPANモジュール作成事情

Githubにのみリリースする

(CPANにリリースしない)

$ FAKE_RELEASE=1 minil release

この辺、名前と実態があっていない気もします

Page 44: 2013年のCPANモジュール作成事情

CPANにもGithubにもリリースしたくない場合は--dry-run

$ minil release --dry-run

Page 45: 2013年のCPANモジュール作成事情

既存のモジュールをMinilla化する

$ minil migrate

• subversionのリポジトリなどは先にgitのリポジトリに変換しておくこと

• gitリポジトリになっていない場合、v0.8.0の段階では自前でgit init必要

→これも修正を取り込んでもらえました

• 隠しファイルなどがあるとパーミッションエラーで変換が止まることも

• v0.8.0 時点ではMakefile.PLからの移行時に多少ゴミが残るので、気になる場合は削除

Page 46: 2013年のCPANモジュール作成事情

もう少し高度な使い方?

• tokuhiromさんの流儀にしたがう、という大きなメリットが消えてしまうので、あまりおすすめしません

• Minillaで頑張るよりは、Dist::Zillaに移行した方が楽かと

Page 47: 2013年のCPANモジュール作成事情

XSモジュールを新規作成する

$ minil new -p XS Foo-XS

XSモジュールのmigrateの場合は-pオプション不要

Page 48: 2013年のCPANモジュール作成事情

設定ファイルを編集する

• XSを書くのでなければ通常不要

• Minillaのユースケース上はINIファイルとほぼ同じ書き方

• デフォルトの設定が上書きされるものと、そうでないものがあるので注意

Page 49: 2013年のCPANモジュール作成事情

Module::Buildの拡張機能を使う

• よほど特殊なことをしたいのでなければDist::Zillaに…

• ディストリビューションのルートにbuilder/MyBuilder.pmというファイルを作成すると、Minillaが内部でModule::Build

を利用する際に拡張があたります

Page 50: 2013年のCPANモジュール作成事情

Questions?