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

4e842bca931f66f9cf29b3fdbd2cc4d8?s=47 kamijin_fanta
January 24, 2019

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

4e842bca931f66f9cf29b3fdbd2cc4d8?s=128

kamijin_fanta

January 24, 2019
Tweet

Transcript

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

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

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

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

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

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

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

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

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

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

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

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

  13. そして現在… OSSはソフトウェア開発に⽋かせない⽂化として根付いた 業務内容で書いていた技術スタックはすべてOSS React Vue.js Elasticsearch Scala ⼀般の⼈も知らずにOSSを使っている Chrome Firefox

    Android WordPress ⾃由にソースコードを読める・改変できる・改善の提案をできる
  14. OSSの世界

  15. Visual Studio Code Visual Studioではない テキストエディタ ⾔語サポートが多い HTML JS PHP

    Java Ruby Rust Scala etc... 799 contributors! Microsoft (貢献者≒コードを書いた⼈)
  16. Nodejs JavaScriptをサーバ・PCで実⾏ パッケージマネージャなどのエ コシステムが成⻑しており、開 発が⾏いやすい 2,391 contributors! IBM RedHat ソフトウェア開発会社

    ⼤学教授 ソフトウェアアーキテクト コンサル OSSコンサル
  17. Clang C/C++のコンパイラ gccよりモダンに拡張が⾏える 526 contributors! Apple Google Intel

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

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

  20. OSSの世界 Visual Studio Code: 799 contributors Clang: 526 contributors Nodejs:

    2,391 contributors Linux: ∞ contributors 使っているライブラリやツール等を合わせると更に多い… OSSはOSSで⽀えられている(分担) 1つのOSSは莫⼤な数の開発者で⽀えられている OSSはコミュニティ・企業に⽀えられている(意外にも企業に⽀えられている)
  21. 実はこのスライドも… https://github.com/marp-team/marpit

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

  23. ライセンス

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

  25. ライセンス⽂ 弁護⼠雇いたくないので、使い回しができるようになっている 以下MIT例 // 誰々がいつに作ったやつだよ Copyright <YEAR> <COPYRIGHT HOLDER> // 以下の事守れば利⽤・コピー・変更・許可・複製・出版・頒布・再利⽤許諾・販売を許可するよ

    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.
  26. ライセンス種類 ライセンス名 著作者の明記 ソースの開⽰ 特許利⽤ 備考 MIT 必須 不要 ⾔及なし

    ゆるふわ BSD 必須 不要 ⾔及なし ゆるふわ Apache 必須 不要 利⽤可能 Apache Foundation GPL 必須 必須 利⽤可能 制約が厳しい SUSHI-WARE 不要 不要 ⾔及なし 寿司を奢れる 改変・利⽤・配布・商⽤利⽤はOSSライセンスなので許可されている ※本資料は法的に正しいと保証するものでは無いです
  27. スマホアプリにも Kingfisherは画像の読み込み・ キャッシュを⾏うライブラリ 設定 > このアプリについて > 著作 権表⽰ 出典:

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

  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

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

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

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

  33. OSSとの関わり⽅

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

    別枠: ⾃分でソフトウェアを公開する いきなりパッチ送るとか難しそう
  35. コーディング中に… ライブラリのバグ⾒つけたこと無いですか? CLIに何故この機能が無いのかと思ったことは無いですか? ライブラリの速度が遅かったので書き直した事ないですか?

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

  37. 簡単な⼿順紹介

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

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

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

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

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

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

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

  45. とは⾔いつつも…

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

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

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

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

  50. TiKV 特殊⽤途⽤のRustで実装された データベース 実装されていないAIP OK→ 1 2 3 4 5

    6 7 9 ←NG 3リポジトリにPRを出した API定義 サーバ本体 クライアントコード レビューも受けた 199コメント 70修正
  51. React Icons Web Appのアイコンライブラリ 業務で使⽤予定だった 結構問題が多かった… 容量肥⼤化 依存ライブラリが古い ビルドが壊れている ほぼ全部書き直すPRを送信

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

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

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

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

  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