Slide 1

Slide 1 text

業務でのOSSとの関わり⽅ 2019-01-24 hakata-tech-juku by kamijin-fanta

Slide 2

Slide 2 text

(公開時追記) 対象 学⽣・若⼿エンジニアを対象に、こういった仕事も有るという紹介です すべての業界に当てはまる話ではないです 注意点 正確性を保証しません 参考程度でお願いします

Slide 3

Slide 3 text

⾃⼰紹介 さくらインターネット from ⼤阪 2016年卒 23歳 フロントエンド/バックエンド JS/TS/Scala/C#/PHP/Go

Slide 4

Slide 4 text

話すこと 業務で作っているもの OSSとは ライセンス OSSとの関わり⽅

Slide 5

Slide 5 text

⾃分が業務で作っているもの

Slide 6

Slide 6 text

ウェブアクセラレータ WP等で⼿軽に使えるCDNサービス コントロールパネル JavaScript Vue.js d3js

Slide 7

Slide 7 text

ウェブアクセラレータ 社員側管理画⾯ コントロールパネル JavaScript Vue.js d3js

Slide 8

Slide 8 text

sakura.io IoT機器に組み込むモジュール・デー タの蓄積/監視等を⾏うプラットフォ ーム コントロールパネル JavaScript Vue.js データ蓄積 Scala elasticsearch

Slide 9

Slide 9 text

さくらのレンタルサーバ ⼿軽にウェブサイトを公開 コントロールパネル React mobx grpc-web

Slide 10

Slide 10 text

OSSを中⼼に掘り下げる

Slide 11

Slide 11 text

OSS オープンソースソフトウェア(英: Open Source Software、略称: OSS)とは、 利⽤者の⽬的を問わずソースコードを使⽤、調査、再利⽤、修正、拡張、再配布 が可能なソフトウェアの総称である。 出典: フリー百科事典『ウィキペディア(Wikipedia)』 無料で使えて改変もできるソフトウェア

Slide 12

Slide 12 text

1950年代 学術機関・研究機関の間でソフトウェアのソースコードはパブリックドメインで共有 1970年代 ソフトウェア開発は徐々に商業となり、ソフトウェアの公開・再頒布を禁⽌する⽂化 が出来上がった 1980年代 ソースコードを⾃由に利⽤できないことをストレスに感じた⼈たちがオープンソース のコミュニティ・⽂化を作る

Slide 13

Slide 13 text

そして現在… OSSはソフトウェア開発に⽋かせない⽂化として根付いた 業務内容で書いていた技術スタックはすべてOSS React Vue.js Elasticsearch Scala ⼀般の⼈も知らずにOSSを使っている Chrome Firefox Android WordPress ⾃由にソースコードを読める・改変できる・改善の提案をできる

Slide 14

Slide 14 text

OSSの世界

Slide 15

Slide 15 text

Visual Studio Code Visual Studioではない テキストエディタ ⾔語サポートが多い HTML JS PHP Java Ruby Rust Scala etc... 799 contributors! Microsoft (貢献者≒コードを書いた⼈)

Slide 16

Slide 16 text

Nodejs JavaScriptをサーバ・PCで実⾏ パッケージマネージャなどのエ コシステムが成⻑しており、開 発が⾏いやすい 2,391 contributors! IBM RedHat ソフトウェア開発会社 ⼤学教授 ソフトウェアアーキテクト コンサル OSSコンサル

Slide 17

Slide 17 text

Clang C/C++のコンパイラ gccよりモダンに拡張が⾏える 526 contributors! Apple Google Intel

Slide 18

Slide 18 text

Linux OS(Windowsみたいな) Android・ルータ・家電に利⽤ http… から始まるURLの向こう 側には9割以上Linuxが居る ∞ contributors Intel RedHat SUSE IBM

Slide 19

Slide 19 text

OSSを使うメリット ⾃由にソースコードの利⽤・改変が⾏える ⾞輪の再発明を避ける事ができる 世界中の⼈が分担してソフトウェアを作ることができる

Slide 20

Slide 20 text

OSSの世界 Visual Studio Code: 799 contributors Clang: 526 contributors Nodejs: 2,391 contributors Linux: ∞ contributors 使っているライブラリやツール等を合わせると更に多い… OSSはOSSで⽀えられている(分担) 1つのOSSは莫⼤な数の開発者で⽀えられている OSSはコミュニティ・企業に⽀えられている(意外にも企業に⽀えられている)

Slide 21

Slide 21 text

実はこのスライドも… https://github.com/marp-team/marpit

Slide 22

Slide 22 text

OSS開発に参加する意義 なぜ無料で公開する? なぜ開発に参加する? 企業: ⾃分達の使っている技術がデファクトになる・知名度・社会貢献 社員: 技術⼒が向上・アーキテクチャ等に詳しく 趣味: 就職/転職に有利(?)・たのしい!

Slide 23

Slide 23 text

ライセンス

Slide 24

Slide 24 text

ライセンス=OSSを利⽤する上でのルール ソースコードは著作物 本来は書いた⼈が1回1回使⽤許諾を出す ⾯倒なので利⽤ルールを書いておく→ライセンス ほとんどすべてのOSSにライセンス⽂が付属する ライセンス⽂に則ったソフトウェアの利⽤が必須 間違っていると訴訟に発展することも…

Slide 25

Slide 25 text

ライセンス⽂ 弁護⼠雇いたくないので、使い回しができるようになっている 以下MIT例 // 誰々がいつに作ったやつだよ Copyright // 以下の事守れば利⽤・コピー・変更・許可・複製・出版・頒布・再利⽤許諾・販売を許可するよ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: // このライセンス⽂をすべてのコピーに含める必要がある The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // 動かなかったりバグ有っても責任取らないよ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Slide 26

Slide 26 text

ライセンス種類 ライセンス名 著作者の明記 ソースの開⽰ 特許利⽤ 備考 MIT 必須 不要 ⾔及なし ゆるふわ BSD 必須 不要 ⾔及なし ゆるふわ Apache 必須 不要 利⽤可能 Apache Foundation GPL 必須 必須 利⽤可能 制約が厳しい SUSHI-WARE 不要 不要 ⾔及なし 寿司を奢れる 改変・利⽤・配布・商⽤利⽤はOSSライセンスなので許可されている ※本資料は法的に正しいと保証するものでは無いです

Slide 27

Slide 27 text

スマホアプリにも Kingfisherは画像の読み込み・ キャッシュを⾏うライブラリ 設定 > このアプリについて > 著作 権表⽰ 出典: Yahoo 乗換案内

Slide 28

Slide 28 text

GPL(GNU General Public License) ソフトを利⽤して作られた制作物もGPLで配布する必要がある ソフトへの改良内容・ソフトを含めた制作物のコードを公開する必要がある 例 家電にGPLのライブラリ使った→ユーザにコードの提供を⾏う義務が発⽣ GPLのソフトを改良して製品に組み込んだ→改良の内容も含めて全部

Slide 29

Slide 29 text

GPLで裁判も… プレイステーション2ゲーム『ICO』にGPL違反発覚 https://japanese.engadget.com/2007/11/29/ico-gpl/ 独のGPL違反訴訟、オープンソースプログラマが勝訴 https://japan.cnet.com/article/20082820/ https://ja.wikipedia.org/wiki/Gpl-violations.org

Slide 30

Slide 30 text

何故GPL ⽬的を問わず、プログラムを実⾏する⾃由(第0の⾃由) プログラムの動作を研究し、必要に応じて改変を加える⾃由(第1の⾃由) コピーを再頒布する⾃由(第2の⾃由) プログラムを改良し、コミュニティー全体がその恩恵を受けられるよう改良点を 公衆に発表する⾃由(第3の⾃由) GPLは利⽤者の権利・⾃由を定義している https://www.gnu.org/philosophy/free-sw.ja.html

Slide 31

Slide 31 text

GPLライセンスのOSS Linux, Busybox, MySQL, OpenJDK, WordPress... 広く普及しているソフトウェアの多くがGPL 改良・組み込んで使⽤する際は、ライセンスに従ってコードの公開を!

Slide 32

Slide 32 text

ライセンス 信条によって、様々なライセンスが定義されている MIT: 著作権表⽰を⾏うだけで良い GPL: 派⽣した制作物のソースコード公開が必要 SUSHI-WARE: とりあえず寿司が⾷べたい OSSを利⽤する際は、しっかりとライセンスを理解しよう

Slide 33

Slide 33 text

OSSとの関わり⽅

Slide 34

Slide 34 text

OSSプロジェクトとの関わり⽅ 使う ブログに使い勝⼿・アーキテクチャを書く 募⾦ Twitterで感謝のツイート Issueを作る/コメント ドキュメントの作成/翻訳 Pull Requestを送る(パッチコードを送る) コントリビューター/オーナーとして継続的にメンテナンスする 別枠: ⾃分でソフトウェアを公開する いきなりパッチ送るとか難しそう

Slide 35

Slide 35 text

コーディング中に… ライブラリのバグ⾒つけたこと無いですか? CLIに何故この機能が無いのかと思ったことは無いですか? ライブラリの速度が遅かったので書き直した事ないですか?

Slide 36

Slide 36 text

コントリビュートチャンス! ⾃分が困っていることを解決するというモチベーションでOSSに貢献する 他の⼈も困っていたりする この⼿順踏めばバグの解決もできる

Slide 37

Slide 37 text

簡単な⼿順紹介

Slide 38

Slide 38 text

Githubでプロジェクトを探す (なかったらごめんなさい)

Slide 39

Slide 39 text

Githubで関連Issueが存在するかを確認 (英語の掲⽰板みたいなやつ)

Slide 40

Slide 40 text

ワークアラウンドの紹介や、設定の不備などが既に指摘されている場合も

Slide 41

Slide 41 text

Issueが無ければ作る(省略可能) 新機能ほしい!実は既に有った・バグだと思ってたけど仕様 よくある

Slide 42

Slide 42 text

Issueの反応が良さそうならコードを書いてPullRequestを送信 最初は難しいのでIssue作るくらいまででOK

Slide 43

Slide 43 text

レビューされたりするので修正を経てマージ(取り込み)

Slide 44

Slide 44 text

UIポチポチ・好きなエディタでのコード編集で完了! 慣れれば意外と簡単

Slide 45

Slide 45 text

とは⾔いつつも…

Slide 46

Slide 46 text

https://twitter.com/satoru_takeuchi/status/1088227827860684800

Slide 47

Slide 47 text

https://twitter.com/about_hiroppy/status/1088232184517779456

Slide 48

Slide 48 text

さくらインターネットはOSSできます!!!!

Slide 49

Slide 49 text

実際に業務で取り組んだ内容 TiKV (読:たいでぃーびー) ReactIcons

Slide 50

Slide 50 text

TiKV 特殊⽤途⽤のRustで実装された データベース 実装されていないAIP OK→ 1 2 3 4 5 6 7 9 ←NG 3リポジトリにPRを出した API定義 サーバ本体 クライアントコード レビューも受けた 199コメント 70修正

Slide 51

Slide 51 text

React Icons Web Appのアイコンライブラリ 業務で使⽤予定だった 結構問題が多かった… 容量肥⼤化 依存ライブラリが古い ビルドが壊れている ほぼ全部書き直すPRを送信 Ownerを譲ってもらった

Slide 52

Slide 52 text

PRを経て… TiKV Rustが多少分かる気がする 内部設計を詳しく理解した React Icons Webpackのコンパイル時の最適化の仕様について詳しくなった 2.5kスターが付いているリポジトリのオーナーになった

Slide 53

Slide 53 text

コードを書くモチベーション 業務/趣味で困ったことを解決 https://hacktoberfest.digitalocean.com/ 10⽉にPRを5個以上おくろう https://issuehunt.io/ ⾦を出すから誰か直してくれ 無理にやらず、楽しいと思えた時にやればいい

Slide 54

Slide 54 text

まとめ ソフトウェア開発はOSSで⽀えられている OSSは莫⼤な数の開発者で⽀えられている ライセンスは適切に扱おう バグを⾒つけたときに、Githubを覗くところから始めよう 社内のコードを書くだけが業務じゃない

Slide 55

Slide 55 text

業務でのOSSとの関わり⽅ 2019-01-24 hakata-tech-juku by kamijin-fanta

Slide 56

Slide 56 text

各ロゴ・製品は商標や著作権で保護されています 詳細は以下をご確認ください Visual Studio Code https://github.com/Microsoft/vscode Node.js https://nodejs.org/en/about/resources/ LLVM https://llvm.org/Logo.html Linux https://www.linuxfoundation.org/trademark-usage/ ReactIcons https://github.com/react-icons/react-icons