Slide 1

Slide 1 text

Kotlin 向け OSS に貢献してきて感じたアレコレ 1

Slide 2

Slide 2 text

お詫び 月曜から体調を崩しており、まだ咳・鼻水が残っています (先に資料作っといて良かった……!) お聞き苦しい所が有るかも知れませんがご容赦下さいm(_ _)m 2

Slide 3

Slide 3 text

自己紹介 宮田 木織 株式会社justInCaseTechnorogiesバックエンドエンジニア 業務ではここ1年程 Kotlin で Spring WebFlux している アウトプットしているアカウント Qiita: @wrongwrong GitHub: k163377 3

Slide 4

Slide 4 text

OSS への Kontribute 歴 外部 OSS への貢献を強く意識するようになったのは大体2020年末から Kotlin 関係を中心に取り組んでいる Kotlin 引数に value class を含む関数の Reflection 呼び出し時のエラー修正 この問題のせいで kotlin-reflect は実質 value class 非対応だった 上記のためのテストケース追加(3,000行弱) KCallable.callBy の高速化 kotlin-reflect でデフォルト引数を有効にして関数呼び出しする機能 最大5倍弱高速化した 他コードで貢献したリポジトリ: jackson-module-kotlin , moshi , ktlint など 4

Slide 5

Slide 5 text

宣伝 jackson-module-kotlin のリライトプロジェクト始めました ProjectMapK/jackson-module-kogera jackson-module-kotlin 2.16 になるかも?(最新は 2.14 ) 現時点で以下のような利点が有ります kotlin-reflect 無しで軽量 デシリアライズ処理が高速 value class のデシリアライズが可能(条件付き) 興味の有る方は是非使ってみて下さい スター・バグ報告もお待ちしています 1/24の Kotlin 愛好会で詳しい話をする予定です 5

Slide 6

Slide 6 text

今日話すこと OSS 活動を始めたきっかけ OSS 活動をやっていて感じたこと 貢献を続けるモチベーションの話 6

Slide 7

Slide 7 text

OSS 活動を始めたきっかけ 7

Slide 8

Slide 8 text

自作 OSS の開発 元々は職場に Kotlin を導入した際の Java ツールの代替として作ったもの 内容は kotlin-reflect を使ったマッピングツール 公開後、1年弱の間改良にハマった 高速化、機能追加、etc... 取り組む内に kotlin-reflect や他諸々への理解が深まった kotlin-reflect の機能と裏側の仕組み、抱える課題 gradle 周り、 JMH によるベンチマーク作成 etc... コロナ禍に入ったことも有り余計に力が入った 8

Slide 9

Slide 9 text

いつの間にか有名 OSS にも貢献できるスキルを得ていた 自作 OSS の開発で得た知見で多くの有名 OSS も改良できそうなことに気付いた 特に kotlin-reflect を使う処理の高速化 元々有名 OSS に貢献してみたいという意欲は有った 何度か挫折していたので、できそうと分かってからは頑張って取り組めた いくつかのリポジトリにPRを送る内に慣れていった moshi ( reflection 版)のデシリアライズ高速化 jackson-module-kotlin のデシリアライズ高速化や機能追加など etc... 9

Slide 10

Slide 10 text

OSS 活動をやっていて感じたこと 10

Slide 11

Slide 11 text

自分で作り込んでみる経験は全方面に役立つ 関連するありとあらゆる技能が伸びる コーディング・コードリーディング力 IDE や周辺ツールの操作力 特定ライブラリや機能を扱うノウハウ etc... 得られる知識は業務に役立てられるものも多い 環境構築など、業務では鍛えにくい部分も伸びる 11

Slide 12

Slide 12 text

ある程度フックが無いと有名 OSS に貢献するのは難しい 自分も有名 OSS に貢献しようとして挫折していた 最初はまず問題点・改善点の探し方が分からなかった 修正の仕方も当然思いつかなかった "専門分野"ができた途端に多くのリポジトリに貢献できるようになった 自分は特に kotlin-reflect を使い込んでノウハウや課題を把握したこと 自分にとって解決可能かつ意義の有る課題に出会えるかは運も絡む 何かを自作してみたり、使い込んで行く程チャンスは増える 12

Slide 13

Slide 13 text

余談: OSS 活動目指すなら Kotlin x Reflection がオススメ! Reflection は業務から入る形で取り組みやすい ボイラープレートを消せるような付加価値の高いコードを作れる 数百行書くだけで今後の数千行とバグを無くせる 自作→ OSS 化というルートが取りやすい 他 OSS への貢献にも繋げやすい印象有り value class のせいで Java Reflection を使うライブラリが Kotlin 互換失いがち Kotlin を書ける人口も言うほど多くはないためチャンスは沢山あるはず 13

Slide 14

Slide 14 text

「完璧」じゃなくてもなんとかなる 有名 OSS に貢献しているのは分野全体に精通した超人ばかりと思ったが違った 必要なのは狭くても深い知見 全知じゃなくとも一点さえ突破できればPRを出せる 攻略法を一つ見出せれば色々なリポジトリに貢献できる 英語力はそんなに要らない 機械翻訳を多少直すだけで十分やっていける 必要だったのは DeepL と正しいコードだけ 14

Slide 15

Slide 15 text

貢献を続けるモチベーションの話 15

Slide 16

Slide 16 text

外部 OSS への貢献で直接的に得をすることはあまり無い気がする 時間はかなり使うのに金にならず、感謝されることも少ない 翻訳やエビデンスの用意でコミュニケーションコストも結構かかる 貢献によって直接業務に適用できるスキルが得られるとは限らない 例えば Kotlin だけやってても AWS を使えるようにはならない 対応が既知の範囲で完結してしまい、勉強にならないことも有る 副業した方が報酬有りで市場価値を上げられる気がする 特定のことが超できるより広範囲を一定やった経験の方が評価されそう(偏見) 16

Slide 17

Slide 17 text

有名 OSS への貢献を始める・継続するハードルは結構高い それなりに高いスキルが求められる割に外部から報われることは少ない 誰に教えてもらえるでも、やる義務がある訳でもない 意外とメンタルに来ることもある 対応されないまま数ヶ月待つこともザラ 待っている間に不安になってしまうことも このPRには価値が無かった? プロジェクトに設定されたプロトコルを守れてる? 不慣れな英語で無礼なコミュニケーションになっていない? モチベ的なハードルはそれなりに高い 17

Slide 18

Slide 18 text

自分が OSS への貢献を続ける理由 優れたコードを書けると楽しい コードが綺麗になったり、問題を解決することで大きな達成感が有る 特にベンチマークで優れた結果が出た時は非常に嬉しい PCだけで世界に影響できるのはとても面白い 「PC・スマホに触れる全員が自分のコードから利益を得てる」と言える 「世界中で自分だけが解決できた」という達成感がある 自分の名前とコードは上手いこと行けば自分の死後も残り続ける 他の何をやってもこういった気分は味わえない Kotlin を使わない理由が減ってくれると嬉しい!! 18

Slide 19

Slide 19 text

OSS に関する個人的なスタンス 何事も初めてやったり挑戦する時に得るものは多い OSS を作ったり軽く貢献することに挑戦するのはオススメ 自分が困った時、コードから問題を深掘りしてみるのもオススメ ただし、深入りし過ぎるのは一般にオススメしない 使う時間に比べて名誉以外のリターンが小さくなる どれだけの成果を出しても見合ったお金にはならない それでも作りたいので自分はやってます 19

Slide 20

Slide 20 text

We are hiring! ジャストインケースグループでは、さまざまな職種を採用中です Kotlin x Spring Webflux で保険 API サーバーを開発しませんか? ご興味がある方はぜひ、採用ページよりお気軽にご応募ください! 採用全般 エンジニア求人一覧 20