Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,798 views

Published on

Japan Java Users Group Cross Community Conference 2016 Fall
Tokkyo, Japan

Published in: Software
  • Be the first to comment

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

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

×