SlideShare une entreprise Scribd logo
1  sur  65
Télécharger pour lire hors ligne
和田 卓人 @t_wada
Oct 5, 2015 at #java_ja_oss
OSS についてあれこれ
和田 卓人
id: t-wada
@t_wada
github: twada
assert(typeof item.id === 'strong')
| | | |
| | | false
| | "foo"
| Item{id:"foo",name:"bar"}
"string"
--- [string] 'strong'
+++ [string] typeof item.id
@@ -1,6 +1,6 @@
str
-o
+i
ng
power-assert
https://github.com/power-assert-js/power-assert
スタンド名は「ワイルド・サバンナ」
よろしくお願いします
第一部 OSSとして
この先生きのこるために
http://t-wada.hatenablog.jp/entry/active-oss-development-vs-simplicity
発端はモリスさんの講演の感想エントリ
例えば上手く設計できたソフトウェアが
あるとして、「これ以上減らすところがな
く、実質的に完成していて、手を入れると
ころもほとんどない」ことによって「開発
が活発ではなく、メンテナンスされていな
い」というイメージを与えてしまい、それ
が悪い評価につながりかねないのは、不
幸なことではないだろうか
http://t-wada.hatenablog.jp/entry/active-oss-development-vs-simplicity
http://tagomoris.hatenablog.com/entry/2015/08/31/101025
戦略1:
地道な更新
https://twitter.com/tmtms/status/635743856714055680
http://rebuild.fm/106/
https://github.com/power-assert-js/power-assert/commit/7d6552c5
戦略2:
最終コミット以外も
見てもらう
https://twitter.com/kurehajime/status/635041257400569856
https://twitter.com/nazoking/status/635216180886679552
コミット以外にダウンロード数等を見せる試み
戦略3:
プラグイン機構
https://twitter.com/kazuho/status/635009225026961408
https://twitter.com/sonots/status/634978258878988288
https://www.gitbook.com/book/azu/javascript-plugin-architecture/details
http://aosabook.org/en/index.html
http://aosabook.org/en/index.html
戦略4:
適者生存の法則
https://twitter.com/Dryad/status/635841558932099072
http://d.hatena.ne.jp/essa/20140330/p1
しかし、今の業界は、「エコシステム」の時代だ。
熱帯雨林のように、食いあいつつ共生しあうさまざな
タイプのプレイヤーが、自分の為だけの個別の意思決
定をして、その相互作用で技術が発展していく。「エ
コシステム」は矛盾だらけで、ある技術が発展するの
と同時に、そのアンチテーゼとなる技術も伸びる
「ロードマップ」が指し示す未来の方向と違う方向
に進むことは致命的な間違いだが、「エコシステム」
はむしろ中心部がレッドオーシャンで、周辺部に生き
残りが容易なブルーオーシャンがある
http://d.hatena.ne.jp/essa/20140330/p1
普通の人は「ロードマップ」
の中では真ん中を進むべきで、
「エコシステム」の中では真ん
中を避けるべきだ
http://d.hatena.ne.jp/essa/20140330/p1
第二部
自己鍛錬としての
OSS
• 週末に自分のプロダクトを頑張る作戦、失敗
• 平日と同じ馬力では書けない
• 全ての週末が空いているわけではない
• 一週間 (あるいは二週間) は長い。コード
を忘れてしまう
• そこで John Resig が行ったことは……
あの jresig でもうまくいかないこと
http://ejohn.org/blog/write-code-every-day/
1.毎日コードを書くこと。ブログ、ドキュメン
ト、その他はコードを書いたらやってよい。
2.意味のあるコードを書くこと。インデント
やフォーマットの修正、可能ならばリファク
タリングもコード書きにはカウントしない。
3.深夜 24 時前に終わらせること。
4.書いたコードを github で全て OSS にする
こと。
四つのルール
http://ejohn.org/blog/write-code-every-day/
現在の @jresig の github profile
https://github.com/jeresig
• 必要最小限のコードへの集中: 一日30分∼1時間程度で意
味のあるコードを書くことが強いられる (休日にはもっと
かけられる)
• プログラミングの習慣化: github に草を生やすのが目的で
はない。自分で自分自身のために生活習慣を変えるのが大
事
• 不安との戦い: 以前は「十分に」進んでいるか、「十分
に」完成しているか、不安があった。毎日コードを書いて
みて、進んでいるという実感は、実際の進 と同じくらい
重要だという気づきを得た
jresig に起こった変化 (1)
• 週末の過ごしかた: 以前は開発の全てを週末に けて失
敗していたが、いまや週末はそれほど重要でなくなり、
リアルライフを充実できるようになった
• バックグラウンド処理: 散歩中、シャワー中、常にコー
ドのことをバックグラウンドで考えるようになり、良
いアイデアが浮かぶようになった
• コンテクストスイッチ: 以前は週に一回の開発だったの
でコンテクストスイッチのコストがあったが、いまは
毎日なのでそれがない
jresig に起こった変化 (2)
• ワークライフバランス: 仕事/生活/自分のプロジェクト
のバランスの取り方が分かったのが最大の収穫だった。
毎日やるということは、バランスを取るということ
• まわりからの理解: 「毎日コードを書く」という習慣を
公言したことで、パートナーからの理解も得られるよ
うになった
• どれだけコードを書いたか: この習慣を続けると書く
コードやアウトプットは自分でも覚えられないくらい
の量になり、充実感を得られる
jresig に起こった変化 (3)
要するに筋トレのようなものか
http://hrnabi.com/2015/09/17/9372/
トレーニングが継続可能であるように意識しながら
仕事をしていくと、運動や食事、あとは生活習慣とい
うものの重要性に気づくことができると思います
ちゃんと目的を持つこと。記録を伸ばすようにやら
ないと効果がないように思うんです。記録を伸ばした
いと思えるかどうかって、「好きのバロメーター」の
1つです
http://hrnabi.com/2015/09/28/9411/
握力王も仰っている
自分もやってみた
https://github.com/twada
自分もやってみた
受託開発をやっている時期
ど忘れ(くやしい)
○ 毎日コードを書くこと。ブログ、ドキュメン
ト、その他はコードを書いたらやってよい。
△ 意味のあるコードを書くこと。インデントや
フォーマットの修正、可能ならばリファクタ
リングもコード書きにはカウントしない。
△ 深夜 24 時前に終わらせること。
△ 書いたコードを github で全て OSS にする
こと。
達成度
実際にやってみて
•小モジュールを沢山作るようになる
•リリース回数が思ったより多い
•年間 100 リリースくらい
•CHANGELOG 作りにコストが掛かる
•リリース作業を省力化したい
https://github.com/ajoslin/conventional-changelog
conventional-changelog
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
特定形式のコミットログからCHANGELOGを出してくれる
https://github.com/ajoslin/conventional-changelog/blob/master/conventions/angular.md
feat(pencil): add 'graphiteWidth' option
fix(graphite): stop graphite breaking when width < 0.1
Closes #28
perf(pencil): remove graphiteWidth option
BREAKING CHANGE: The graphiteWidth option has been removed.
The default graphite width of 10mm is always used for
performance reason.
第三部
semver 重要
http://semver.org/lang/ja/
http://codelunch.fm/16/
#codelunchfm でもしゃべっています
1.4.3
semantic versioning
1.4.3
major minor patch
semantic versioning
1.4.3
major minor patch
semantic versioning
下位互換性のあるバグ修正は patch を上げる
1.4.3
major minor patch
semantic versioning
下位互換性のある機能追加は minor を上げる
1.4.3
major minor patch
semantic versioning
バグ修正だろうが、機能追加だろうが、
下位互換性が無ければ major を上げる
1.4.3
major minor patch
semantic versioning
個人的にはデフォルトの挙動を変えるときに major を上げることが多い
^1.4.3
semver は作者と利用者の約束と信頼関係
~1.4.3
下位互換性のある機能追加もどんどんダウンロードする
下位互換性のあるバグ修正だけダウンロードする
完全密着
semver 警察24時
https://github.com/jashkenas/underscore/issues/1684
https://github.com/jashkenas/underscore/issues/1805
https://github.com/mozilla/source-map/issues/99
semver に
従わないと燃える
🔥 🔥 🔥 🔥 🔥
semver 警察24時
見出し
http://book.impress.co.jp/books/1113101014
では下位互換性とは何か
三つの下位互換性
•ソース互換性
•バイナリ互換性
•機能互換性
機能互換性: アメーバ効果
| Q | A
| ------------- | ---
| Bug fix? | [yes|no]
| New feature? | [yes|no]
| BC breaks? | [yes|no]
| Deprecations? | [yes|no]
| Tests pass? | [yes|no]
| Fixed tickets | [tickets fixed by the PR]
| License | MIT
| Doc PR | [ref to the documentation PR if any]
Symfony の PR 形式が る
http://symfony.com/doc/master/contributing/code/patches.html#make-a-pull-request
semver 過激派
1 commit, 1 release
ご清聴ありがとうございました

Contenu connexe

Tendances

オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 

Tendances (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 
Airflow 2.0 migration ガイド
Airflow 2.0 migration ガイドAirflow 2.0 migration ガイド
Airflow 2.0 migration ガイド
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 

En vedette

DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
Terui Masashi
 

En vedette (20)

リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介
 
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
unassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in productionunassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
power-assert, mechanism and philosophy
power-assert, mechanism and philosophypower-assert, mechanism and philosophy
power-assert, mechanism and philosophy
 
現在のDNNにおける未解決問題
現在のDNNにおける未解決問題現在のDNNにおける未解決問題
現在のDNNにおける未解決問題
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
俺のtensorが全然flowしないのでみんなchainer使おう by DEEPstation
俺のtensorが全然flowしないのでみんなchainer使おう by DEEPstation俺のtensorが全然flowしないのでみんなchainer使おう by DEEPstation
俺のtensorが全然flowしないのでみんなchainer使おう by DEEPstation
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
The monad fear
The monad fearThe monad fear
The monad fear
 
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
Rails5 Action Cableの紹介
Rails5 Action Cableの紹介Rails5 Action Cableの紹介
Rails5 Action Cableの紹介
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
 
TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)
 

Plus de Takuto Wada

Plus de Takuto Wada (19)

テスト用ライブラリ power-assert
テスト用ライブラリ power-assertテスト用ライブラリ power-assert
テスト用ライブラリ power-assert
 
Reviewing RESTful Web Apps
Reviewing RESTful Web AppsReviewing RESTful Web Apps
Reviewing RESTful Web Apps
 
power-assert in JavaScript
power-assert in JavaScriptpower-assert in JavaScript
power-assert in JavaScript
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
 
愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い
 
ペアプログラミング ホントのところ
ペアプログラミング ホントのところペアプログラミング ホントのところ
ペアプログラミング ホントのところ
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
TDDBC お題
TDDBC お題TDDBC お題
TDDBC お題
 
DevLOVE DDDBC
DevLOVE DDDBCDevLOVE DDDBC
DevLOVE DDDBC
 
TDDBC Fukuoka Day1
TDDBC Fukuoka Day1TDDBC Fukuoka Day1
TDDBC Fukuoka Day1
 
js テスト放浪記
js テスト放浪記js テスト放浪記
js テスト放浪記
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
 
xUTP Chapter27 Generated Value
xUTP Chapter27 Generated ValuexUTP Chapter27 Generated Value
xUTP Chapter27 Generated Value
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should know
 
10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing10+1 Things you should know about JavaScript testing
10+1 Things you should know about JavaScript testing
 
Tochigi Test-no-Kaigi position paper
Tochigi Test-no-Kaigi position paperTochigi Test-no-Kaigi position paper
Tochigi Test-no-Kaigi position paper
 

OSS についてあれこれ