Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
All I learned
while working on a Scala
OSS project
for over six years
Kazuhiro Sera
@seratch
1
Scala OSS project を 6 年以上続け...
In 2011, I started a Scala open source project named ScalikeJDBC.
Thanks to many contributors, I am still working on the p...
Agenda
Who Am I?
My “Hello World” in Scala (2009)
ScalikeJDBC, My Long-lived Scala Project
Tips for Continuation
Avoiding ...
Who Am I?
まずは自己紹介から。 4
Kazuhiro Sera @seratch
Software Engineer, VPoE at SmartNews, Inc.
We’re a samurai sponsor 👏
Server-side software engineer ...
Star as an endorsement
Increment the number of stargazers 🙇
好きなライブラリのスター数を increment しましょう。
スターが増えるの、かなり励みになるのです.. 🙇  6
My “Hello World” in Scala
(2009)
私の OSS について話す前に、私の Scala との出会いから
Scala のこれまでの変遷についてお話ししたいと思います。 7
Scala 2.7.3 (9 yrs ago)
Scala 2.7.3 は 2009 年頭にリリースされています。
何ともう 9 年も前ですね!
2009-01-14
8
My “Hello World” in Scala
In 2009, I was a Java developer at the time
Looking for a new one / unsatisfied with Groovy
At th...
Let’s try Scala 2.7.3
Scala 2.7.3 を試してみましょう。.. と、Java 8 で.. 動きませ
んね。sbt から REPL の起動ができません。
$ java -version
java version "1...
Let’s try 2.8.0.. 👀
Scala 2.8.0 ならどうか.. エラー内容違いますが
こちらも残念から動作しないようです。
$ sbt ++2.8.0 console
[info] 'compiler-interface' no...
Let’s try 2.9.0.. 👀
2.9.0 も.. 動かない.. .. だと.. ..
$ sbt ++2.9.0 console
[info] 'compiler-interface' not yet compiled for Sca...
2.10.2+ runs on JDK 8 ☺
2.10.2 から Java 8 で動くようになり、それまでのバージョ
ンは動きませんでした。今後も似たようなことは起きるかも。
$ sbt ++2.10.2 console
[info] 'co...
2.7.3 on JDK7.. 👀
ということで 2.7.3 を試したければ Java 7 を使わないと.. ..
おや、これも動かないのでしょうか??
$ export JAVA_HOME=`/usr/libexec/java_home -v...
2.7.3 without sbt ☺
実は現行 sbt で当時の Scala を動かすことができません。
sbt を使わずに起動すれば Java 7 で当然動作します。
$ export JAVA_HOME=`/usr/libexec/jav...
Scala 2.7 and beyond
9 年経って Scala はどれくらい変わったのでしょうか?
これは以降のメジャーバージョンリリースの年表です。
Scala 2.8 2010-07-15
Scala 2.9 2011-05-12
Sc...
Missing parts (2.8, 2.9)
Named and default arguments (2.8+)
Package objects (2.8+)
The App trait (2.9+)
JavaConverters/Jav...
Missing parts (2.10)
2.x binary compatibility (2.10+)
Value classes (2.10+)
Implicit classes (2.10+)
String Interpolation ...
Missing parts (2.11, 2.12)
Blackbox/whitebox macros (2.11+)
Quasiquotes (2.11+)
Java 8 SAM types compatibility (2.12.+)
Us...
Moderate changes recently
このように 2.10 以降の言語の変更はあまり多くありません。
OSS を始めるタイミングとしてはよいかもしれませんね。
Scala 2.8 2010-07-15
Scala 2.9 2011...
ScalikeJDBC,
My Long-lived Scala Project
では、そろそろ本題、まず私の Scala OSS について開発に
至った背景や大事にしている思想など、簡単に説明します。21
Why I Started My Project
I needed a practical DB library in 2011
I was going to start using Scala for real projects
Twitte...
History of DB Libraries
Scala の RDB access library の変遷です。
今はメンテされていないものもいくつかあります。 23
Non-practical Libraries
In return for fancy APIs
Not designed to solve real-world business problems
New team members need ...
Philosophy of ScalikeJDBC
“Just write SQL and get things done!”
Easy-to-understand
Requires only Scala basics + JDBC basic...
Tips for Continuation
次に長く続けるために必要だった考え方や工夫
についてお話ししたいと思います。 26
More than 6 Years
6 年以上特定の library の開発を継続してきました。
これは Scala community の中でも長い方でしょう。
I’ve been working on it for more than 6 ...
Tips for Continuation
KISS (Keep It Simple, Stupid) Principle
Keep it Contributors Friendly
Avoiding Depending on Scala Li...
Avoiding Depending on
Scala Libraries
Scala library への依存を避けるべき:残念なことですが
library を長くメンテするには大事なことです。 29
Common reasons to do that
Await their releases every Scala major upgrade
If you depend on short-lived libraries..
When bec...
Fetters for Cross-building
So difficult to do cross-building while depending on
other Scala libraries
All depending Scala l...
Depending on Java libraries
Depending on well-maintained Java libraries is a
reasonable way to reduce your efforts
No extr...
Cross-building Tips
特に ScalikeJDBC は古い Scala を使うユーザにも配慮してき
ました。そのために必要な工夫について説明します。 33
Supported Versions
ScalikeJDBC は @xuwei-k の尽力のおかげもあり
クロスビルドをかなり頑張っているライブラリです。
ScalikeJDBC Release date Scala binary versio...
CI Build Configuration
Properly configuring CI builds
is the most important practice
for cross-building
If you don’t configur...
src/main/scala-2.x
Dealing with deprecated APIs between Scala major
versions / 3rd party libraries’ upgrades
src/main/scal...
Ensuring binary-compatibility
(MiMa)
次にバイナリ互換性を守る方法について紹介します。Scala で
はバイナリ互換性を仕組みによって守ることができます。 37
Are Java Libraries Safe?
Java language itself is binary compatible between
major versions
Great efforts for backward compa...
How to Ensure It
Use “MiMa”
MiMa = Migration Manager
lightbend/migration-manager
Using it via the sbt plugin is convenient...
When to Be Strict About It
Up to the type of your library
If you provide a low-level library that other libraries
may depe...
ScalikeJDBC’s Policy
Bump major/minor version when introducing some
binary incompatibilities
All patch version releases ar...
MiMa Configuration
ScalikeJDBC の設定例:クロスビルドで stable major のみを
チェック、すべての patch versions との突き合わせ
Skipping unstable Scala versi...
Building a Community of
Friends 🙌
OSS を続けることは一人でできることではありません。
コミュニティの中で仲間を見つけ、一緒に歩みましょう。 43
Scala Ninja @xuwei-k
Kenji Yoshida さんは「文字通り Scala 忍者」として知られて
いる、まさに日本を代表するコミュニティ貢献者です。 44
Not only the “Scala Ninja”
私の OSS は Yoshida さんの尽力はもちろんですが、多くの
方々の貢献のおかげで継続することができています。 45
OSS Open/Closed Principle
Open/Closed Principle
Open for extension, but closed for modification
OSS Open/Closed Principle
O...
Just Keep Working on It
Library maintainers must overcome upgrades
Scala major upgrades / Cross-building
sbt build setting...
Let’s build our long-lived
Scala community

together! 😀
みんなで長く続く Scala コミュニティを作っていきましょう!
この発表でご紹介したことがそのお役に立てば幸いです。 48
Prochain SlideShare
Chargement dans…5
×

All I learned while working on a Scala OSS project for over six years #ScalaMatsuri

167 vues

Publié le

* http://2018.scalamatsuri.org/index_en.html
* https://www.youtube.com/watch?v=y7BxvT-Jm6w

In 2011, I started a Scala open source project named ScalikeJDBC. Thanks to many contributors, I am still working on the project after six years. In the meantime, the Scala community has been growing sharply, and the trends have been continuously changing. Despite the fact that the number of developers who work on OSS projects has increased, there are not many developers who have been working on a Scala project for several years. In this talk, I will share my experiences and pieces of knowledge through maintaining the OSS project for more than six years.

Publié dans : Ingénierie
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Soyez le premier à aimer ceci

All I learned while working on a Scala OSS project for over six years #ScalaMatsuri

  1. 1. All I learned while working on a Scala OSS project for over six years Kazuhiro Sera @seratch 1 Scala OSS project を 6 年以上続けるために必要なこと というテーマで、瀬良 和弘 @seratch_ja がお話しします。
  2. 2. In 2011, I started a Scala open source project named ScalikeJDBC. Thanks to many contributors, I am still working on the project after six years. In the meantime, the Scala community has been growing sharply, and the trends have been continuously changing. Despite the fact that the number of developers who work on OSS projects has increased, there are not many developers who have been working on a single Scala project for several years. In this talk, I will share my experiences and pieces of knowledge through maintaining a single OSS project for more than six years. 2011 年から取り組んできた ScalikeJDBC をはじめとする Scala OSS 開発から得た知見などをお話しします。 2
  3. 3. Agenda Who Am I? My “Hello World” in Scala (2009) ScalikeJDBC, My Long-lived Scala Project Tips for Continuation Avoiding Depending on Scala Libraries Cross-building Tips Ensuring binary-compatibility (MiMa) Building a Community of Friends このような内容についてお話しします。上級者の方にはちょっ と物足りない内容かもしれませんが、ご容赦を。 3
  4. 4. Who Am I? まずは自己紹介から。 4
  5. 5. Kazuhiro Sera @seratch Software Engineer, VPoE at SmartNews, Inc. We’re a samurai sponsor 👏 Server-side software engineer (Scala, Java, Ruby) Love coding, open-source community A Scala enthusiast for 7+ years Creator of ScalikeJDBC, Skinny Framework One of the maintainers of Scalate, json4s, Scalatra SmartNews で働いています。サーバサイドエンジニア、 ScalikeJDBC、Skinny などの Scala OSS をやっています。5
  6. 6. Star as an endorsement Increment the number of stargazers 🙇 好きなライブラリのスター数を increment しましょう。 スターが増えるの、かなり励みになるのです.. 🙇  6
  7. 7. My “Hello World” in Scala (2009) 私の OSS について話す前に、私の Scala との出会いから Scala のこれまでの変遷についてお話ししたいと思います。 7
  8. 8. Scala 2.7.3 (9 yrs ago) Scala 2.7.3 は 2009 年頭にリリースされています。 何ともう 9 年も前ですね! 2009-01-14 8
  9. 9. My “Hello World” in Scala In 2009, I was a Java developer at the time Looking for a new one / unsatisfied with Groovy At the beginning, I tried with Scala 2.7.3 My first impression of Scala “IDE integration was still very poor. It’s a bit early to seriously use it at work.” Excited with hybrid paradigms, actors, concise syntax I started learning it seriously in the following year 初めて使ったのは 2.7.3 で当時は Java エンジニアでした。 仕事にはまだ使えないけど面白い言語だなと思いました。 9
  10. 10. Let’s try Scala 2.7.3 Scala 2.7.3 を試してみましょう。.. と、Java 8 で.. 動きませ んね。sbt から REPL の起動ができません。 $ java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode) $ sbt ++2.7.3 console [info] 'compiler-interface' not yet compiled for Scala 2.7.3.final. Compiling... error: error while loading Consumer, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/util/function/Consumer.class)' is broken (bad constant pool tag 18 at byte 15) one error found 
 On JDK 8+, it fails to run the REPL… 10
  11. 11. Let’s try 2.8.0.. 👀 Scala 2.8.0 ならどうか.. エラー内容違いますが こちらも残念から動作しないようです。 $ sbt ++2.8.0 console [info] 'compiler-interface' not yet compiled for Scala 2.8.0.final. Compiling... error: error while loading CharSequence, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/lang/CharSequence.class)' is broken (bad constant pool tag 18 at byte 10) error: error while loading AnnotatedElement, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)' is broken (bad constant pool tag 18 at byte 76) error: error while loading Arrays, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/util/Arrays.class)' is broken (bad constant pool tag 18 at byte 765) error: error while loading Comparator, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/util/Comparator.class)' is broken (bad constant pool tag 18 at byte 20) /var/folders/vl/bxx80tvs2gd8tzrtyd_b0p9r0000gp/T/sbt_6e129fa2/xsbt/ExtractAPI.scala:549: error: java.util.Comparator does not take type parameters private[this] val sortClasses = new Comparator[Symbol] { ^ 5 errors found 11 On JDK 8+, it fails to run the REPL…
  12. 12. Let’s try 2.9.0.. 👀 2.9.0 も.. 動かない.. .. だと.. .. $ sbt ++2.9.0 console [info] 'compiler-interface' not yet compiled for Scala 2.9.0.final. Compiling... error: error while loading CharSequence, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/lang/CharSequence.class)' is broken (bad constant pool tag 18 at byte 10) error: error while loading AnnotatedElement, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)' is broken (bad constant pool tag 18 at byte 76) error: error while loading Arrays, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/util/Arrays.class)' is broken (bad constant pool tag 18 at byte 765) error: error while loading Comparator, class file '/Library/Java/JavaVirtualMachines/ jdk1.8.0_151.jdk/Contents/Home/jre/lib/rt.jar(java/util/Comparator.class)' is broken (bad constant pool tag 18 at byte 20) /var/folders/vl/bxx80tvs2gd8tzrtyd_b0p9r0000gp/T/sbt_a0025195/xsbt/ExtractAPI.scala:549: error: java.util.Comparator does not take type parameters private[this] val sortClasses = new Comparator[Symbol] { ^ 5 errors found 12 On JDK 8+, it fails to run the REPL…
  13. 13. 2.10.2+ runs on JDK 8 ☺ 2.10.2 から Java 8 で動くようになり、それまでのバージョ ンは動きませんでした。今後も似たようなことは起きるかも。 $ sbt ++2.10.2 console [info] 'compiler-interface' not yet compiled for Scala 2.10.2. Compiling... [info] Compilation completed in 7.522 s [info] Starting scala interpreter... [info] Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151). Type in expressions to have them evaluated. Type :help for more information. scala> 13 Scala 2.10.2+ works on Java 8 ☺
  14. 14. 2.7.3 on JDK7.. 👀 ということで 2.7.3 を試したければ Java 7 を使わないと.. .. おや、これも動かないのでしょうか?? $ export JAVA_HOME=`/usr/libexec/java_home -v 1.7` $ java -version java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) $ sbt ++2.7.3 console [info] 'compiler-interface' not yet compiled for Scala 2.7.3.final. Compiling... /var/folders/vl/bxx80tvs2gd8tzrtyd_b0p9r0000gp/T/sbt_7f1250db/ CompilerInterface.scala:9: error: value interactive is not a member of package scala.tools.nsc import scala.tools.nsc.interactive.RangePositions ^ (omitted) 42 errors found [error] (run-main) Error compiling sbt component 'compiler-interface' 
 14 Somehow, it fails to boot on Java7 .. 😢
  15. 15. 2.7.3 without sbt ☺ 実は現行 sbt で当時の Scala を動かすことができません。 sbt を使わずに起動すれば Java 7 で当然動作します。 $ export JAVA_HOME=`/usr/libexec/java_home -v 1.7` $ java -version java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) $ bin/scala Welcome to Scala version 2.7.3.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_80). Type in expressions to have them evaluated. Type :help for more information. 15 “sbt console” supports only Scala 2.9.0+. You have to use the scala script instead.
  16. 16. Scala 2.7 and beyond 9 年経って Scala はどれくらい変わったのでしょうか? これは以降のメジャーバージョンリリースの年表です。 Scala 2.8 2010-07-15 Scala 2.9 2011-05-12 Scala 2.10 2012-12-20 Scala 2.11 2014-05-20 Scala 2.12 2016-10-29 Scala 2.13.0-M3 2018-01-31 Scala 3.0 (with Dotty) ??? 16
  17. 17. Missing parts (2.8, 2.9) Named and default arguments (2.8+) Package objects (2.8+) The App trait (2.9+) JavaConverters/JavaConversions (2.9+) 2.8 と 2.9 ではこれらの機能が追加されました。 当時は 2.x.0 と 2.x.1 に互換性がありませんでした。 17
  18. 18. Missing parts (2.10) 2.x binary compatibility (2.10+) Value classes (2.10+) Implicit classes (2.10+) String Interpolation (2.10+) Futures and Promises (2.10+) Dynamic (2.10+) Macros (2.10+) 2.10 はターニングポイントとなるリリースでした。 バイナリ互換性の改善 + 多くの機能が追加されました。 18
  19. 19. Missing parts (2.11, 2.12) Blackbox/whitebox macros (2.11+) Quasiquotes (2.11+) Java 8 SAM types compatibility (2.12.+) Using invokeDynamic for lambda (2.12+) 2.11, 2.12 はマクロの改善と内部的な最適化が主でした。 言語の利用者としては新しい機能はあまりありません。 19
  20. 20. Moderate changes recently このように 2.10 以降の言語の変更はあまり多くありません。 OSS を始めるタイミングとしてはよいかもしれませんね。 Scala 2.8 2010-07-15 Scala 2.9 2011-05-12 Scala 2.10 2012-12-20 Scala 2.11 2014-05-20 Scala 2.12 2016-10-29 Scala 2.13.0-M3 2018-01-31 Scala 3.0 (with Dotty) ??? 20
  21. 21. ScalikeJDBC, My Long-lived Scala Project では、そろそろ本題、まず私の Scala OSS について開発に 至った背景や大事にしている思想など、簡単に説明します。21
  22. 22. Why I Started My Project I needed a practical DB library in 2011 I was going to start using Scala for real projects Twitter’s querulous looked reasonable, but it supported MySQL only ScalaQuery looked hard to master for me For Fun / To learn new things At the time, I was new to both Scala and OSS I wanted to try something exciting by myself 😎 2011 年当時、実用的な DB library を必要としていたのと、 新しいことをやってみたいという気持ちから始めました。 22
  23. 23. History of DB Libraries Scala の RDB access library の変遷です。 今はメンテされていないものもいくつかあります。 23
  24. 24. Non-practical Libraries In return for fancy APIs Not designed to solve real-world business problems New team members need long time to catch up Troubleshooting can be bothersome Insufficient information for debugging Frequently breaking API compatibilities Author suddenly stopped maintaining the library.. カッコいい API だが現実の問題に対応できない・学習コスト 高い。デバッグしにくい 。互換性をよく崩す。メンテが突然止 まる。これらに該当しないことが私の「実用的」の基準です。24
  25. 25. Philosophy of ScalikeJDBC “Just write SQL and get things done!” Easy-to-understand Requires only Scala basics + JDBC basics No steep learning curve! (except for Scala 😜) Well-considered flexibility to deal with edge cases No breaking API changes as much as possible ScalikeJDBC が大事にしていること:すぐに理解し使える、 特殊ケースに対応できる、互換性を極力崩さない 25
  26. 26. Tips for Continuation 次に長く続けるために必要だった考え方や工夫 についてお話ししたいと思います。 26
  27. 27. More than 6 Years 6 年以上特定の library の開発を継続してきました。 これは Scala community の中でも長い方でしょう。 I’ve been working on it for more than 6 years Scala 2.9 ~ 2.10 ~ 2.11 ~ 2.12 ~ 2.13 27
  28. 28. Tips for Continuation KISS (Keep It Simple, Stupid) Principle Keep it Contributors Friendly Avoiding Depending on Scala Libraries Knowledge on Important Factors Cross-building Binary-compatibilities Building a Community of Friends You’re not alone! 🙌 継続で大事なこと:シンプルに保つこと、重要な要素(えwク ロスビルド / バイナリ互換)の理解、コミュニティの形成 28
  29. 29. Avoiding Depending on Scala Libraries Scala library への依存を避けるべき:残念なことですが library を長くメンテするには大事なことです。 29
  30. 30. Common reasons to do that Await their releases every Scala major upgrade If you depend on short-lived libraries.. When becoming unmaintained, you’ll have to fork and maintain them by yourself May bring binary compatibility issues Scala major upgrade の度に release 待ち、短命 library を 最悪 fork する羽目、バイナリ互換性の問題などありえます。30
  31. 31. Fetters for Cross-building So difficult to do cross-building while depending on other Scala libraries All depending Scala libraries must do the exactly same cross-building (unrealistic..) If you give cross-building high priority, you should consider to depend on not Scala libraries but Java libraries (or no dependencies..) クロスビルドで他の Scala library への依存は相当な足かせで す。全ての依存がクロスビルドをしなければ成立しません。31
  32. 32. Depending on Java libraries Depending on well-maintained Java libraries is a reasonable way to reduce your efforts No extra efforts when Scala major upgrade Stability (well-tested by large number of users) Downside of using Java libraries? Have to understand Java interoperability tips Have to completely encapsulate Java world which brings you lots of null 😢 Java library 依存は悪くない選択肢で色々楽になりますが Java な世界観を隠蔽するなどのケアは必要になるでしょう。32
  33. 33. Cross-building Tips 特に ScalikeJDBC は古い Scala を使うユーザにも配慮してき ました。そのために必要な工夫について説明します。 33
  34. 34. Supported Versions ScalikeJDBC は @xuwei-k の尽力のおかげもあり クロスビルドをかなり頑張っているライブラリです。 ScalikeJDBC Release date Scala binary versions sbt versions 1.0 2012-05 2.9.0 2.9.1 2.9.2 - 2.0 2014-05 2.10 2.11 0.13.x 3.0 2017-06 2.10 2.11 2.12 0.13.x 3.2 2018-01 2.10 2.11 2.12 0.13.x 1.x 34
  35. 35. CI Build Configuration Properly configuring CI builds is the most important practice for cross-building If you don’t configure CI to check cross-building automatically, it’ll be very annoying to manually check the validity of pull requests CI ビルドを適切に設定して運用することが最も大事です。クロ スビルドを気にしながら PR を受け付けるには必須です。 35
  36. 36. src/main/scala-2.x Dealing with deprecated APIs between Scala major versions / 3rd party libraries’ upgrades src/main/scala-{Scala binary version} 非推奨となった API を使い分ける場合 src/main の配下に binary version 毎に違うソースコードを置いて対処します。36
  37. 37. Ensuring binary-compatibility (MiMa) 次にバイナリ互換性を守る方法について紹介します。Scala で はバイナリ互換性を仕組みによって守ることができます。 37
  38. 38. Are Java Libraries Safe? Java language itself is binary compatible between major versions Great efforts for backward compatibilities 🙂 However, it’s not true for 3rd party Java libraries Even famous libraries sometimes break their binary compatibilities between releases (e.g) Jackson 2.x are basically binary incompatible Java ライブラリでバイナリ互換性を気にしたことがないあな たは幸運な人です。非互換はしばしば発生しているのです。38
  39. 39. How to Ensure It Use “MiMa” MiMa = Migration Manager lightbend/migration-manager Using it via the sbt plugin is convenient MiMa(ミーマ)というツールがバイナリ非互換を検知してく れるのでこれを sbt プラグイン経由で使うのが一般的です。39
  40. 40. When to Be Strict About It Up to the type of your library If you provide a low-level library that other libraries may depend on it you should be very careful As for directly used libraries / in-house libraries you don’t need to be so strict 社内や他の library が依存する library を提供しないなら、必 ずしもバイナリ互換性に厳密に取り組む必要性はありません。40
  41. 41. ScalikeJDBC’s Policy Bump major/minor version when introducing some binary incompatibilities All patch version releases are bin-compatible GitHub branch strategies Having a corresponding git branch for each bin- compatible minor version (e.g. 3.2.x, 3.1.x, .. ) master branch: the latest (3.3.x as of March 2018) ポリシー:バイナリ非互換は major/minor ver、patch ver 間 はバイナリ互換を保証、git branch を minor 単位で運用 41
  42. 42. MiMa Configuration ScalikeJDBC の設定例:クロスビルドで stable major のみを チェック、すべての patch versions との突き合わせ Skipping unstable Scala versions such as 2.13.0-M3 42
  43. 43. Building a Community of Friends 🙌 OSS を続けることは一人でできることではありません。 コミュニティの中で仲間を見つけ、一緒に歩みましょう。 43
  44. 44. Scala Ninja @xuwei-k Kenji Yoshida さんは「文字通り Scala 忍者」として知られて いる、まさに日本を代表するコミュニティ貢献者です。 44
  45. 45. Not only the “Scala Ninja” 私の OSS は Yoshida さんの尽力はもちろんですが、多くの 方々の貢献のおかげで継続することができています。 45
  46. 46. OSS Open/Closed Principle Open/Closed Principle Open for extension, but closed for modification OSS Open/Closed Principle Open for contribution, Friendly for new contributors; easy-to-.. but closed for confusion (to be long-lived) CI / test suites which detect common mistakes Clearly stipulated rules (CONTRIBUTING.md) 貢献に開いているプロジェクトの条件:動かしやすさ、理解し やすさ、安全な変更、テストコード、明記されたルール 46
  47. 47. Just Keep Working on It Library maintainers must overcome upgrades Scala major upgrades / Cross-building sbt build settings upgrades I’m still taking time to adapt sbt 1.x .. It’s like a battle of patience.. Keep it simple, avoid hacky code/configuration Keep working on it at your own pace Library メンテナは Scala や sbt の更新に対応し続けなけれ ばいけません。凝ったことはせず、コツコツ持久戦で.. 47
  48. 48. Let’s build our long-lived Scala community
 together! 😀 みんなで長く続く Scala コミュニティを作っていきましょう! この発表でご紹介したことがそのお役に立てば幸いです。 48

×