Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2019-01-24 業務でのOSSとの関わり方

kamijin_fanta
January 24, 2019

2019-01-24 業務でのOSSとの関わり方

kamijin_fanta

January 24, 2019
Tweet

More Decks by kamijin_fanta

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. OSSを中⼼に掘り下げる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. OSSの世界

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. ライセンス

    View Slide

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

    View Slide

  25. ライセンス⽂
    弁護⼠雇いたくないので、使い回しができるようになっている 以下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.

    View Slide

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

    View Slide

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

    View Slide

  28. GPL(GNU General Public License)
    ソフトを利⽤して作られた制作物もGPLで配布する必要がある
    ソフトへの改良内容・ソフトを含めた制作物のコードを公開する必要がある

    家電にGPLのライブラリ使った→ユーザにコードの提供を⾏う義務が発⽣
    GPLのソフトを改良して製品に組み込んだ→改良の内容も含めて全部

    View Slide

  29. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. OSSとの関わり⽅

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. 簡単な⼿順紹介

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  45. とは⾔いつつも…

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  56. 各ロゴ・製品は商標や著作権で保護されています 詳細は以下をご確認ください
    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

    View Slide