49
#ccc_l9 俺のコードがどこで使われてい るのかわからない問題 - あるいはマイナーOSSの生存戦略 - Japan Java Users Group Cross Community Conference 2016 Fall #ccc_l9 Dec 3, 2016

俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

Embed Size (px)

Citation preview

Page 1: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

俺のコードがどこで使われてい

るのかわからない問題- あるいはマイナーOSSの生存戦略 -

Japan Java Users GroupCross Community Conference 2016 Fall

#ccc_l9Dec 3, 2016

Page 2: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9Who?

● わたなべ

● (株)ビズリーチ

● twitter: @nabedge

● github: nabedge

2

Page 3: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9Your motivation ?

1. OSSってやつを作ってみたいなと思ってる。

2. すでにOSSを作って公開しているが、

このセッションのタイトルと似たような悩みがある。

3. なんとなく来てみた。

3

Page 4: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9 4

Page 5: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

言うは簡単

5

Page 6: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9http://mixer2.org

6

Page 7: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9What Mixer2 ?

7

Template = 100% pure HTML & CSS

View = Plain Java

Hello <span id=”name”>foo bar</span>

Span span = html.getById(“name”, Span.class);span.replaceInner(“World !”);// You get // Hello <span id=”name”>World !</span>

Page 8: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9What Mixer2 ?

● XHTML専用テンプレートエンジン

● M,V,CのViewを、テンプレート用拡張言語ではなく

Javaで書く

○ Javaで書く = ビューをタイプセーフに書ける

○ Javaで書く = 学習コストが低め

○ Javaで書く = ビューをJUnitでテストできる

8

Page 9: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9My motivation ? - 作った動機? -

● やってみたかっただけ。

● 野望/ワンチャン狙いみたいのは皆無。

● 昔の仕事で、本来はXMLとJavaオブジェクトの

マッピングで使うべきJAXBを、

HTMLテンプレートエンジン的に使う試みが

案外うまく行った。

9

Page 10: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9ちなみに

● JavaのJAXB-APIを作ったのは

Jenkinsの川口さん(サン・マイクロの従業員だった)

10

Page 11: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l92011年2月 Mixer2 公開

11

https://twitter.com/nabedge/status/33580740033642496

Page 12: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9 12

● 鳴かず飛ばず

● そして翌月...

Page 13: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9アプリケーションとライブラリ

● アプリケーション

○ 学習コスト低め

○ ハマるとすぐ広がる

○ Jenkins, GitBucket

13

● ライブラリ

○ 学習コスト高め

○ 普及に時間がかかる

○ SpringMVC,

Thymeleaf, Mixer2

Page 14: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9 14

● Mixer2が、どこの開発現場/プロダクトで

ライブラリとして使われているのか、を知る術が無い。

Page 15: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9やれることなんて しれてる

● Googleをエゴサーチ

● ツイッターをエゴサーチ

● StackOverflowをエゴサーチ

○ ついでに自作自演w

● ヒマなとき自分でブログ書いて宣伝。

15

Page 16: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9大した反響が見つからないまま1,2年たった頃

16

オフショアの外注先から納品された

コードに

import org.mixer2.xhtml.*っていう記述が大量にある。

コードレビューしてるんだが、

ちょっと意見をくれ。

とある知人からの連絡:

Page 17: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9どうやら導入事例

● どこかの大学/研究機関の図書購買システムっぽい

● Seasar2 + SAStruts + Mixer2

● Mixer2の公式サイトに書いておいたSAStrutsサンプルとよく似

たコードがあちこちにあったらしい。

17

Page 18: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9反省ポイント

● 公式サイトのHelloWorld的なサンプルが

そのままコピペされていた(本格アプリにするには雑)

● Mixer2はアプリケーションではなくライブラリ。

○ そもそも学習コスト高め。

○ 精緻かつ種類豊富なサンプルコードが大事!

○ HelloWorld, やや複雑なサンプル, 本格なサンプル...

18

Page 19: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9やっておいてよかったポイント

● 初めから英語、日本語、両方で

公式サイトをつくっておいた。

● JavaDocも英語。

19

Page 20: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

ちょこちょことプルリクエストも来るように

20

Page 21: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9 21

Page 22: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9初期にプルリクくれた人の最近のツイート

22

Page 23: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9とにかく

● エゴサーチはほどほどに。

● 英語ドキュメント、大事。

● プルリクはなんであれ嬉しい。

● サンプルorエントリーポイントとなるコードの充実

は大事。

23

Page 24: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

● さらに数年後に、「サンプルは大事」の

傍証を目にすることになろうとは...

24

Page 25: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

※このへんで10分くらいの予定

25

● 水を飲む

Page 26: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9Mavenセントラルリポジトリとは

26

https://oss.sonatype.org

Page 27: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9ある時期、異常なトラフィックが?!

27

2016-07

2000<groupId>org.mixer2</groupId>全体のダウンロード数

Page 28: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

モテ期 ?!

28

Page 29: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9あれ?Mixer2本体じゃない...

29

<groupId>org.mixer2</groupId><artifactId>mixer2</atfifactId>に絞ったダウンロード数

Page 30: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9mixer2-springmvc-archetype おまえだったのか

30

Page 31: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9Mavenアーキタイプとは

$ mvn archetype:generate \

-DarchetypeGroupId=org.mixer2 \

-DarchetypeArtifactId=mixer2-springmvc-archetype \

-DarchetypeVersion=0.5.5 \

-DgroupId=com.mycompany \

-DartifactId=myproject \

-Dversion=1.0-SNAPSHOT \

これでプロジェクトの雛形ができる。

31

Page 32: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9Download数ではなくユニークIPアドレスで見ると

32

2016-07

2016-09

2016-10

Page 33: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9何が起きていたのだろう?

● どこかの特定の誰か or 特定の開発チームが、

● Mixer2を検証していた。2016年7月ごろに集中的に。

● その過程で、Mixer2+SpringMVC用の

アーキタイプを土台/サンプルにして

アレコレいじっていた。

● 検証が終わり、そのノウハウが外部に伝えられた?

33

Page 34: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9この冬、モテ期到来か?!

しかし、

● oss.sonatype.org のバグ

● なんらかのロボット的なものの仕業

である可能性も大いにある。

34

Page 35: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

結論:よくわからない

35

Page 36: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

マイナーOSSライブラリ 生存の最終手段

36

Page 37: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

自分の半径5m以内のプロジェクトに導入する

37

Page 38: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

ただし失敗すると

1. 自分のOSSの評判

2. 仕事場でのエンジニアとしての自分の評判

この二つが同時に大打撃を食らう、諸刃の刃。

素人にはおすすめできない。

38

Page 39: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9https://bizreach.biz は全面的にMixer2+SpringMVC

39

Page 40: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9https://bizreach.biz の特徴

● マーケティング用サイト

● ただし営業情報との連携やデモ用求人検索もあるのでがっつ

りWebアプリケーション的な作り。

● マーケ担当とWebデザイナーによる

コンテンツ追加&デザイン変更が日常茶飯事。

40

Page 41: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9BEFORE

● Seasar2 + SAStruts + JSP

● WebデザイナーがJSPをいじる前提で運用。

● 当然、事故りやすいので、

テストとビルドだけはエンジニアが担当。

○ ↑エンジニアの負荷が高くなってしまう。

41

Page 42: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9AFTER

42

biz-backend-1.x.jar

biz-design-1.y.jar依存関係

SpringMVCアプリ。Viewのテンプレは*.htmlとして design.jarのほうに存在する前提。

src/main/resources/static/

● 画像, css, js

src/main/resources/m2static/

● Mixer2用 *.html

src/test/java/

● htmlが予定のタグを含んでいるかテス

トするJUnit

ここをWebデザイナーがいじる

Page 43: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9AFTER

43

biz-backend-1.x.jar

biz-design-1.y.jar

biz-boot-1.z.jar依存関係

最終的に spring-boot の”fully-executable-jar” 形式に

ビルドしてデプロイする。

Page 44: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9AFTER

● バックエンドのソースはあらかじめjarにビルド済みなのでテス

トの必要なし。

● Webデザイナーは好きなように *.html をいじってJenkinsをポ

チるとdesign.jar が出来上がる。

● さらにJenkinsをポチるとサーバにデプロイ可能。

● エンジニアは完全に手放し。

44

Page 45: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

まとめ

45

Page 46: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

● ライブラリとアプリケーションに大別される

○ Webサービスとして何か作る、という方法もアリ。

● OSSとして作るならアプリケーションの方が

(使う側の)ハードルは低く、当たれば爆発的。

● サンプルコードの充実は必須。

● 英語ドキュメントも必須。

46

まとめ1

Page 47: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

● Javaライブラリだとセントラルリポジトリに

乗せれば ダウンロード数くらいは分かる

● 自分の周囲のプロジェクトにぶっこむのは

諸刃の刃なので慎重に

47

まとめ2

Page 48: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9まとめ3

● 「プルリクエストをしても一人」の状態は長い。

● 気長に、楽しもう。

48

Page 49: 俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略

#ccc_l9

Thank you !

49

see http://mixer2.org