Upload
nabedge-watanabe
View
1.050
Download
3
Embed Size (px)
Citation preview
#ccc_l9
俺のコードがどこで使われてい
るのかわからない問題- あるいはマイナーOSSの生存戦略 -
Japan Java Users GroupCross Community Conference 2016 Fall
#ccc_l9Dec 3, 2016
#ccc_l9Who?
● わたなべ
● (株)ビズリーチ
● twitter: @nabedge
● github: nabedge
2
#ccc_l9Your motivation ?
1. OSSってやつを作ってみたいなと思ってる。
2. すでにOSSを作って公開しているが、
このセッションのタイトルと似たような悩みがある。
3. なんとなく来てみた。
3
#ccc_l9 4
#ccc_l9
言うは簡単
5
#ccc_l9http://mixer2.org
6
#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>
#ccc_l9What Mixer2 ?
● XHTML専用テンプレートエンジン
● M,V,CのViewを、テンプレート用拡張言語ではなく
Javaで書く
○ Javaで書く = ビューをタイプセーフに書ける
○ Javaで書く = 学習コストが低め
○ Javaで書く = ビューをJUnitでテストできる
8
#ccc_l9My motivation ? - 作った動機? -
● やってみたかっただけ。
● 野望/ワンチャン狙いみたいのは皆無。
● 昔の仕事で、本来はXMLとJavaオブジェクトの
マッピングで使うべきJAXBを、
HTMLテンプレートエンジン的に使う試みが
案外うまく行った。
9
#ccc_l9ちなみに
● JavaのJAXB-APIを作ったのは
Jenkinsの川口さん(サン・マイクロの従業員だった)
10
#ccc_l92011年2月 Mixer2 公開
11
https://twitter.com/nabedge/status/33580740033642496
#ccc_l9 12
● 鳴かず飛ばず
● そして翌月...
#ccc_l9アプリケーションとライブラリ
● アプリケーション
○ 学習コスト低め
○ ハマるとすぐ広がる
○ Jenkins, GitBucket
13
● ライブラリ
○ 学習コスト高め
○ 普及に時間がかかる
○ SpringMVC,
Thymeleaf, Mixer2
#ccc_l9 14
● Mixer2が、どこの開発現場/プロダクトで
ライブラリとして使われているのか、を知る術が無い。
#ccc_l9やれることなんて しれてる
● Googleをエゴサーチ
● ツイッターをエゴサーチ
● StackOverflowをエゴサーチ
○ ついでに自作自演w
● ヒマなとき自分でブログ書いて宣伝。
15
#ccc_l9大した反響が見つからないまま1,2年たった頃
16
オフショアの外注先から納品された
コードに
import org.mixer2.xhtml.*っていう記述が大量にある。
コードレビューしてるんだが、
ちょっと意見をくれ。
とある知人からの連絡:
#ccc_l9どうやら導入事例
● どこかの大学/研究機関の図書購買システムっぽい
● Seasar2 + SAStruts + Mixer2
● Mixer2の公式サイトに書いておいたSAStrutsサンプルとよく似
たコードがあちこちにあったらしい。
17
#ccc_l9反省ポイント
● 公式サイトのHelloWorld的なサンプルが
そのままコピペされていた(本格アプリにするには雑)
● Mixer2はアプリケーションではなくライブラリ。
○ そもそも学習コスト高め。
○ 精緻かつ種類豊富なサンプルコードが大事!
○ HelloWorld, やや複雑なサンプル, 本格なサンプル...
18
#ccc_l9やっておいてよかったポイント
● 初めから英語、日本語、両方で
公式サイトをつくっておいた。
● JavaDocも英語。
19
#ccc_l9
ちょこちょことプルリクエストも来るように
20
#ccc_l9 21
#ccc_l9初期にプルリクくれた人の最近のツイート
22
#ccc_l9とにかく
● エゴサーチはほどほどに。
● 英語ドキュメント、大事。
● プルリクはなんであれ嬉しい。
● サンプルorエントリーポイントとなるコードの充実
は大事。
23
#ccc_l9
● さらに数年後に、「サンプルは大事」の
傍証を目にすることになろうとは...
24
#ccc_l9
※このへんで10分くらいの予定
25
● 水を飲む
#ccc_l9Mavenセントラルリポジトリとは
26
https://oss.sonatype.org
#ccc_l9ある時期、異常なトラフィックが?!
27
2016-07
2000<groupId>org.mixer2</groupId>全体のダウンロード数
#ccc_l9
モテ期 ?!
28
#ccc_l9あれ?Mixer2本体じゃない...
29
<groupId>org.mixer2</groupId><artifactId>mixer2</atfifactId>に絞ったダウンロード数
#ccc_l9mixer2-springmvc-archetype おまえだったのか
30
#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
#ccc_l9Download数ではなくユニークIPアドレスで見ると
32
2016-07
2016-09
2016-10
#ccc_l9何が起きていたのだろう?
● どこかの特定の誰か or 特定の開発チームが、
● Mixer2を検証していた。2016年7月ごろに集中的に。
● その過程で、Mixer2+SpringMVC用の
アーキタイプを土台/サンプルにして
アレコレいじっていた。
● 検証が終わり、そのノウハウが外部に伝えられた?
33
#ccc_l9この冬、モテ期到来か?!
しかし、
● oss.sonatype.org のバグ
● なんらかのロボット的なものの仕業
である可能性も大いにある。
34
#ccc_l9
結論:よくわからない
35
#ccc_l9
マイナーOSSライブラリ 生存の最終手段
36
#ccc_l9
自分の半径5m以内のプロジェクトに導入する
37
#ccc_l9
ただし失敗すると
1. 自分のOSSの評判
2. 仕事場でのエンジニアとしての自分の評判
この二つが同時に大打撃を食らう、諸刃の刃。
素人にはおすすめできない。
38
#ccc_l9https://bizreach.biz の特徴
● マーケティング用サイト
● ただし営業情報との連携やデモ用求人検索もあるのでがっつ
りWebアプリケーション的な作り。
● マーケ担当とWebデザイナーによる
コンテンツ追加&デザイン変更が日常茶飯事。
40
#ccc_l9BEFORE
● Seasar2 + SAStruts + JSP
● WebデザイナーがJSPをいじる前提で運用。
● 当然、事故りやすいので、
テストとビルドだけはエンジニアが担当。
○ ↑エンジニアの負荷が高くなってしまう。
41
#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デザイナーがいじる
#ccc_l9AFTER
43
biz-backend-1.x.jar
biz-design-1.y.jar
biz-boot-1.z.jar依存関係
最終的に spring-boot の”fully-executable-jar” 形式に
ビルドしてデプロイする。
#ccc_l9AFTER
● バックエンドのソースはあらかじめjarにビルド済みなのでテス
トの必要なし。
● Webデザイナーは好きなように *.html をいじってJenkinsをポ
チるとdesign.jar が出来上がる。
● さらにJenkinsをポチるとサーバにデプロイ可能。
● エンジニアは完全に手放し。
44
#ccc_l9
まとめ
45
#ccc_l9
● ライブラリとアプリケーションに大別される
○ Webサービスとして何か作る、という方法もアリ。
● OSSとして作るならアプリケーションの方が
(使う側の)ハードルは低く、当たれば爆発的。
● サンプルコードの充実は必須。
● 英語ドキュメントも必須。
46
まとめ1
#ccc_l9
● Javaライブラリだとセントラルリポジトリに
乗せれば ダウンロード数くらいは分かる
● 自分の周囲のプロジェクトにぶっこむのは
諸刃の刃なので慎重に
47
まとめ2
#ccc_l9まとめ3
● 「プルリクエストをしても一人」の状態は長い。
● 気長に、楽しもう。
48