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

オープンソースのベストプラクティスを企業内で実践/How to implement InnerSource

B071a1ec264ea9d6acbb1f9163885dbf?s=47 Yuichi Tanaka
February 18, 2021
2.2k

オープンソースのベストプラクティスを企業内で実践/How to implement InnerSource

Developers Summit 2021の「オープンソースのベストプラクティスを企業内で実践 ~インナーソースのすすめ」というセッションの発表資料です。
https://event.shoeisha.jp/devsumi/20210218/session/3044/

B071a1ec264ea9d6acbb1f9163885dbf?s=128

Yuichi Tanaka

February 18, 2021
Tweet

Transcript

  1. 田中裕一 (@yuichielectric), 2021/02/18 Developers Summit 2021 オープンソースのベストプラクティスを企業内で実践 〜インナーソースのすすめ 服部佑樹 (@yuhattor)

    2021/02/18
  2. Developers Summit 2021 • Microsoft における InnerSource – Open Source

    プラクティスの社内実装 • GitHubを使ってどのようにInnerSourceを実践するか Agenda
  3. Developers Summit 2021 どのようにインナーソースを実践するか 服部 佑樹 @yuhattor Azure AppDev Specialist,

    Microsoft
  4. Azure DevOps と GitHub は 同じチームが開発しています。 Microsoft にいる10万⼈以上の エンジニアの標準ツールです GitHub

    Actions をはじめとす る機能開発と認証連携
  5. 田中裕一 (@yuichielectric), 2021/02/18 Developers Summit 2021 InnerSource とは

  6. InnerSource is ... “Applying the concepts and lessons of successful

    open source ecosystems to how a company develops software internally” “成功したオープンソース・エコシステムのコンセプトと学びを、 企業が社内でソフトウェアを開発する⽅法に適⽤する" GitHub innersourcecommons.org
  7. InnerSourceは、企業⽂化や企業の制限を尊重しつつ、オープンソースに似た内部の シェアリングエコノミー に向けて⽂化的に変⾰していく旅です。 à 開発効率を上げ、より良い顧客満⾜度と成果につなげることが⽬的です。

  8. 田中裕一 (@yuichielectric), 2021/02/18 Developers Summit 2021 Microsoft が InnerSource を始めた背景と

    InnerSource の効果 服部 佑樹 (@yuhattr), 2021/02/18
  9. http://www.bonkersworld.net/images/2011.06.27_organizational_charts.png 柔軟でない組織 - 規模拡⼤に伴う官僚制組織化 コラボレーションの低下 - 部⾨間の競争激化や政治 モノリシックで、⼤きくなりすぎたソースコード - コンウェイの法則により、ソースコードも⼀枚岩に

    - コンポーネントの共有も難しく開発の難易度があがる
  10. Mission Our mission is to enable the world's best engineering

    teams with world-class tools and systems that help them ship products their customer love. 私たちの使命は、世界最⾼のエンジニアリングチームが顧客に愛される製品を出荷するための ワールドクラスのツールとシステムを利⽤できるようにすることです。 #開発基盤の整備 #開発者のサポート #GitHub 推進 #社内StackOverflowの整備 #OpenSourceの促進 #Inclusiveデザインの適⽤(アクセシビリティ) #プラクティスの社内共有 #インナーソースの適⽤
  11. コントリビューションの可視化 • 63,000 Pull Request • 3,000 Repository • 11,000

    Contributor • 35,000 Reviewer *FY18時点 コラボレーションの増加 オープンソースコミュニティと同じプロセス とプラクティスを使⽤して、組織内でチーム が共同作業します サイロを壊す チーム間でのコラボレーションの簡素化、知 識の共有、コードの再利⽤の改善、安全な ワークフロー 開発者の満⾜度向上 インナーソースとオープンソースのプラクティ スを活⽤することで、開発者の満⾜度が⾼まり、 興味のあるプロジェクトに取り組み、スキルを 向上させることができます
  12. InnerSource を実現する 4 ポイント 発⾒可能性 パートナーチームがコードベース、ドキュメント、およびその他の関連資料を すべて検索し、事前のドメイン知識なしでプロジェクトを探索すること 実⾏可能性 パートナーチームがソースコードを迅速かつ簡単にコンパイルおよび実⾏できる、または別プロ ジェクトの⼀部としてソースコードを簡単に使⽤できること。カプセル化されており、即実⾏で

    きる。 貢献性 パートナーチームが問題を簡単に報告し、質問し、新しい機能を提案し、障壁なく前向きな⽅法 でコミットをアップストリームすること 継続性 すべてのチームがコードをメンテナンスし続けること
  13. InnerSource をドライブするということは GitHub • コラボレーションを妨げたり、 遅らせたりする障壁を取り除く/減らす • オープン/協⼒的な⾏動を奨励する • 客観的な尺度で現状を評価し、伝える

    • ステータスと進捗状況を測定するための データを提供する • ⽂化的変化を促進する • ⼈の働き⽅を決める • 新しい統制プロセスの追加 • 活動を抑制する • コードベースのキュレーション • 新しいツールを⾃前で構築 • 新しいタイプのリポジトリを作成 以下である。 以下でない。
  14. InnerSource をドライブするということは GitHub • 特定の⽬的のための、複雑なソリューション • 貢献 = 気晴らし •

    ⾃分のコード • ⾞輪の再発明 • 製品 = コード • よりシンプルなモジュール式コンポーネント • 貢献 = コラボレーションとコミュニティへの投資 • 私たちのコード • 再利⽤し構築 • 製品 != コード Product Product Product Product インナーソースの狙い Product Product Product Product 最⼤化を狙う 少ない共有部分 かつての運⽤
  15. 田中裕一 (@yuichielectric), 2021/02/18 Developers Summit 2021 Microsoft の InnerSource プラクティス

  16. 1. 発⾒ 2. デザイン 3. 開発 4. デプロイ 5. メンテナンス

    • PMが新機能のリクエストを持ち込 む • PMが要件の検証(顧客インタ ビュー、既存のバックログに対す る機能の検証)を⾏い、 InnerSourcing のための機能の優 先順位を決定 • PMが要件ドキュメントを作成 • PMは、製品の⼀貫性(ユーザーエ クスペリエンス、ルック&フィー ル、製品ロードマップの整合性な ど)を確保するための要件をレ ビューします。 • Dev/PM が要件をレビューし、設 計ソリューションを議論します。 • PMは、必要に応じてさらなる顧 客検証を実施します。 • Dev は、作業を開始する前に、サ ポートしている開発者と設計計画 を議論します。 • 開発者は、開発チームの延⻑線 上で働きます (すなわち、該当 プロダクトのコードベースで機 能を構築、PR をチェック、機 能をテスト、バグバッシュをホ スト、デモ、ドキュメントの作 成を⾏います)。 • Dev は必要に応じてガイダンス を提供し、ブロッカーを取り除 きますます。 • PMが機能を有効にする前にコ ミュニティに新機能のリリース を送信します。 • 顧客に影響を与える機能は、混 乱を防ぐために Feature Flag を ⽤います。 • コードは通常、プルリクエスト を完了してから 4 時間以内に本 番環境にデプロイされます。 • インナーソース中は、開発 者が開発した機能を⽀援し たり、デバッグしたりしま す。 • 最終的には、開発チームが 製品の責任者となり、開発 終了後も機能のメンテナン スを⾏います。 • Weekly PM シンク • Weekly Dev/PM シンク PM toolkit • インタビューのテンプレート • サンプル要件テンプレート • 製品ビジョン - スライド7 • 機能バックログ PM toolkit • 新機能リリーステンプレート 早めに、オープンに、書⾯でコミュニケーションをとる 貢献者をチームの ⼀員として扱う ⽂書化して実験を簡単に ex: 共通の要件 ex: 30⽇間保証 メンターシップ 貢献の Recognition Best Practices Microsoft の InnerSource フレームワーク
  17. 役割 タスク

  18. Microsoft の収集する Customer Metrics (Customer = 社内ユーザー) メトリクスの収集をし、社内での InnerSource 促進の管理をします。

    • Contributor が複数いるリポジトリ • CONTRIBUTING.md が存在するリポジトリ • README.md が存在するリポジトリ • Fork の数 例) 1ヶ⽉の開発状況の変化: (+3%) (+0.1%) (+0.9%) Contributor が複数いるリポジトリ CONTRIBUTING.md ファイルが存在するリポジトリ README.md ファイルが存在するリポジトリ
  19. Microsoft の収集する Customer Metrics (Customer = 社内ユーザー) 期中のプルリクエストの数と、チームを越えたプルリクエストの数をトラックします プルリクエスト チームを越えたPR

    % Q1 FY19 852k 37k 5.6% Q2 FY19 810k 35k 4.2% Q3 FY19 912K 39k 4.8% Q4 FY19 1.0M 46k 4.1% Q1 FY20 1.2M 43k 3.6%
  20. Microsoft 開発チームの OKRs の例 Object コードオーナーが、⾃分たちのソフトウェアがどのよう に使われているかを理解し、コントリビューターを募集 する⽅法を理解している Key Result

    • InnerSourceの貢献パイプラインのメトリクスを定義 し、消費しやすい⽅法で提供する (使⽤状況、インタラクション、および貢献の追跡) • InnerSourceの貢献パイプラインMVPが、関連する2 つのチームで採⽤されていること Action Item • チームが使⽤できるInnerSourceモデルとダッシュ ボードMVPの開発 • モデルとダッシュボードを公開 • ファネルを改善するためのアクション指向のガイダン スとワークフローを開発し、提供します。 InnerSource OKR Object マイクロソフトのエンジニアがコードの共同作業を可能 にする Key Result • Microsoftのすべてのアクティブなアカウントで、 InnerSourceガイドラインが導⼊されたForksプロ ジェクトがある(〇〇%から◯ポイント増加) Action Item • アカウント所有者のために Fork プロジェクトを作成 するためのワークフローを作成する • Fork プロジェクトをまだ持っていない関連するすべて のMicrosoftアカウントにバナーを作成/ロールアウト する InnerSource OKR
  21. 田中裕一 (@yuichielectric), 2021/02/18 Developers Summit 2021 プロダクト開発チーム以外の InnerSource

  22. ⾃社プロダクト以外の InnerSource Practice: Microsoft サービス部⾨

  23. プロダクト開発と同⼀の開発フロー Azure Boards UserVoice IdeaFarm IP Council SI Field BP

    Field Component Library IPKit 1801 1804 1807 1808 Aka.ms Link Publish Content Update Library Portfolio IPForum 1804 1807 1808 vNext 1801 Offering Sales Content Scoping Content Delivery Content Aka.ms Link
  24. ここまでのまとめ GitHub InnerSource は⽂化変⾰の旅。 継続的に社内で⽂化を育てましょう。 発⾒可能性 / 実⾏可能性 / 貢献性

    / 継続性 が重要。 InnerSource のメトリクスをとってみましょう。 Fun! InnerSource の活動は社内統制や標準化の活動の⼀環としてでは なく、“投資” として⾏いましょう。 そして、何よりも楽しんでコラボレーションをしよう。
  25. ాத ༟Ұ (@yuichielectric), 2021/02/18 Developers Summit 2021 (JU)VCΛ࢖ͬͯͲͷΑ͏ʹ ΠϯφʔιʔεΛ࣮ફ͢Δ͔

  26. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ాத ༟Ұ γχΞιϦϡʔγϣϯζΤϯδχΞ yuichielectric yuichielectric

  27. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͲͷϓϩδΣΫτΛ ΠϯφʔιʔεԽ ͢Δ͔ʁ ϓϩδΣΫτΛ Ͳ͏ݟ͚ͭͯ΋Β͏͔ʁ Ͳ͏΍ͬͯ

    ίϯτϦϏϡʔτ ͯ͠΋Β͏͔ʁ ͏·͍͍ͬͯ͘Δ͔Λ Ͳ͏ଌΔʁ
  28. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͲͷϓϩδΣΫτΛ ΠϯφʔιʔεԽ ͢Δ͔ʁ ϓϩδΣΫτΛ Ͳ͏ݟ͚ͭͯ΋Β͏͔ʁ Ͳ͏΍ͬͯ

    ίϯτϦϏϡʔτ ͯ͠΋Β͏͔ʁ ͏·͍͍ͬͯ͘Δ͔Λ Ͳ͏ଌΔʁ
  29. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͍͖ͳΓΈΜͳ͓ޓ͍ίϯτϦϏϡʔτ͠߹͍·͠ΐ͏ʂ ͱݴͬͯ΋޿·Βͳ͍ ͲͷϓϩδΣΫτΛΠϯφʔιʔεԽ͢Δ͔ʁ

  30. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ Ϣʔβʔ ίϯτϦϏϡʔλʔ ϝϯςφʔ

  31. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ wطଘͷϓϩδΣΫτͰࣾ಺Ͱ޿͘࢖ΘΕ͍ͯΔ࢖ΘΕΔ΋ͷ w ϓϥοτϑΥʔϜɺϥΠϒϥϦɺϑϨʔϜϫʔΫɺ4%,ͳͲ w Ϗϧυɺ$*ج൫౳ͷ։ൃπʔϧ w

    શࣾతͳ'"2 w ࣾ಺ن໿౳ͷυΩϡϝϯτ ͲͷϓϩδΣΫτΛΠϯφʔιʔεԽ͢Δ͔ʁ
  32. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͲͷϓϩδΣΫτΛ ΠϯφʔιʔεԽ ͢Δ͔ʁ ϓϩδΣΫτΛ Ͳ͏ݟ͚ͭͯ΋Β͏͔ʁ Ͳ͏΍ͬͯ

    ίϯτϦϏϡʔτ ͯ͠΋Β͏͔ʁ ͏·͍͍ͬͯ͘Δ͔Λ Ͳ͏ଌΔʁ
  33. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ Enterprise Organization Repository Repository Organization Repository

    ϓϩδΣΫτΛͲ͏ݟ͚ͭͯ΋Β͏͔ʁ wࣾ಺ϝϯόʔ͕ϦϙδτϦʹΞΫηε Ͱ͖Δඞཁ͕͋Δ w*OUFSOBMϦϙδτϦ&OUFSQSJTF಺શମ͔Β 3FBEͰ͖ΔϦϙδτϦ
  34. https://github.com/sap/project-portal-for-InnerSource

  35. https://github.com/helaili/enterprise-showcase

  36. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ w1SJWBUF(JU)VC1BHFT (JU)VC"DUJPOTͰɺ(JU)VC͚ͩͰࣾ಺ݶఆͷ ΠϯφʔιʔεϙʔλϧαΠτΛߏங͢Δ͜ͱ΋Մೳ w දࣔ͢ΔϦϙδτϦͷ৘ใ͸"DUJPOTͰఆظతʹߋ৽ w

    ͦͷ಺༰Λ(JU)VC1BHFTʹσϓϩΠ ϙʔλϧαΠτͷσϓϩΠઌ
  37. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͲͷϓϩδΣΫτΛ ΠϯφʔιʔεԽ ͢Δ͔ʁ ϓϩδΣΫτΛ Ͳ͏ݟ͚ͭͯ΋Β͏͔ʁ Ͳ͏΍ͬͯ

    ίϯτϦϏϡʔτ ͯ͠΋Β͏͔ʁ ͏·͍͍ͬͯ͘Δ͔Λ Ͳ͏ଌΔʁ
  38. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ॳΊͯίϯτϦϏϡʔτ ͢Δਓͷෆ҆Λ औΓআ͘͜ͱ͕େࣄ w Ͳ͏͍͏ίϯτϦϏϡʔτ͕ ड͚ೖΕΒΕΔͷ͔ʁ

    w Ͳ͏͍͏ྲྀΕͰίϯτϦϏϡʔτ ͨ͠Βྑ͍ͷ͔ʁ w Θ͔Βͳ͍͜ͱ͕͋ͬͨΒ୭ʹ ฉ͚͹Α͍ͷ͔ʁ w ԿΛຬͨͨ͠ΒϓϧϦΫΤετ͕ Ϛʔδ͞ΕΔͷ͔ʁ
  39. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ 3&"%.&NE νʔϜ֎͔ΒͷίϯτϦϏϡʔτΛ ׻ܴ͍ͯ͠Δ͜ͱ Ͳ͏͍͏छྨͷίϯτϦϏϡʔτΛ ड͚෇͚͍ͯΔͷ͔ ίϯτϦϏϡʔτͷ۩ମతͳखॱ

    https://github.com/asciidwango/js-primer
  40. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ $0/53*#65*/(NE όάใࠂͷ࢓ํ ػೳཁ๬ͷใࠂͷ࢓ํ ϓϧϦΫΤετͷ࡞Γํ ϓϧϦΫΤετͷϚʔδ৚݅ ϨϏϡʔϓϩηε

  41. https://github.com/asciidwango/js-primer/blob/master/CONTRIBUTING.md

  42. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ΠγϡʔɾϓϧϦΫΤετ ςϯϓϨʔτ ొ࿥͢ΔΠγϡʔ΍ϓϧϦΫΤετ ͷछྨ͝ͱʹඞཁͳ৘ใͷ߲໨Λ ςϯϓϨʔτʹؚΊ͓ͯ͘ɻ

  43. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ $0%&08/&34 ϑΝΠϧͷछྨ΍ύεຖʹΦʔφʔ Λࢦఆ ϓϧϦΫΤετ࡞੒࣌ʹ มߋ͞ΕͨϑΝΠϧͷΦʔφʔʹ ϨϏϡΞʔΛࣗಈઃఆ͢Δ͜ͱ͕

    Մೳ # Φʔφʔ͸ݸਓͰ΋νʔϜͰ΋ྑ͍ * @global-owner1 @global-owner2 *.js @frontend-team *.go @backend-team *.css @design-team /build/logs/ @infra-team docs/* @mr-document
  44. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ Ϛʔδ͞ΕΔ৚݅ͷ໌֬Խ $0%&08/&34ʹΑΔϨϏϡʔඞਢ $*δϣϒ͕੒ޭ͍ͯ͠Δ͜ͱ ʜ

  45. https://github.com/todogroup/repolinter

  46. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͲͷϓϩδΣΫτΛ ΠϯφʔιʔεԽ ͢Δ͔ʁ ϓϩδΣΫτΛ Ͳ͏ݟ͚ͭͯ΋Β͏͔ʁ Ͳ͏΍ͬͯ

    ίϯτϦϏϡʔτ ͯ͠΋Β͏͔ʁ ͏·͍͍ͬͯ͘Δ͔Λ Ͳ͏ଌΔʁ
  47. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ wνʔϜ֎ͷϝϯόʔ͕࡞੒ͨ͠Πγϡʔͷׂ߹ w࡞੒͞ΕͨΠγϡʔʹฦ౴͢Δ·Ͱͷ࣌ؒ wνʔϜ֎ͷϝϯόʔ͕࡞੒ͨ͠ϓϧϦΫΤετͷׂ߹ wνʔϜ֎ͷϝϯόʔ͕࡞੒ͨ͠ϓϧϦΫΤετ͕Ϛʔδ͞Εׂͨ߹ wνʔϜ֎ͷϝϯόʔ͕ϨϏϡʔͨ͠ϓϧϦΫΤετͷׂ߹ wύοέʔδͷμ΢ϯϩʔυ਺

    ɾɾɾ ͏·͘ߦ͍ͬͯΔ͔Ͳ͏͔ΛͲ͏΍ͬͯ೺Ѳ͢Δʁ
  48. https://github.com/Autodesk/hubble

  49. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ ͲͷϓϩδΣΫτΛ ΠϯφʔιʔεԽ ͢Δ͔ʁ ϓϩδΣΫτΛ Ͳ͏ݟ͚ͭͯ΋Β͏͔ʁ Ͳ͏΍ͬͯ

    ίϯτϦϏϡʔτ ͯ͠΋Β͏͔ʁ ͏·͍͍ͬͯ͘Δ͔Λ Ͳ͏ଌΔʁ
  50. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ πʔϧ͸จԽΛม͑Δ৮ഔ Πϯφʔιʔε ͸จԽ จԽΛม͑Δ ͷ͸ͱͯ΋େม Ͱ΋ɺπʔϧͷ

    ಋೖͰਓͷߦಈ ͕มΘΔ ߦಈͷมԽ͕ จԽ͕มΘΔ ͖͔͚ͬͱͳΔ
  51. Developers Summit 2021 ͲͷΑ͏ʹΠϯφʔιʔεΛ࣮ફ͢Δ͔ w*OOFS4PVSDF$PNNPOT*OOFS4PVSDFͷίϛϡχςΟ w IUUQTJOOFSTPVSDFDPNNPOTPSH w*OOFS4PVSDF1BUUFOT*OOFS4PVSDFΛ࣮ફ͢Δ্Ͱͷύλʔϯू w IUUQTHJUIVCDPN*OOFS4PVSDF$PNNPOT

    *OOFS4PVSDF1BUUFSOT wΠϯφʔιʔε༻ϙʔλϧαΠτ࣮૷ w IUUQTHJUIVCDPNPDUPEFNPQSPKFDUQPSUBMGPS JOOFSTPVSDF w IUUQTHJUIVCDPNIFMBJMJFOUFSQSJTFTIPXDBTF ࢀߟ৘ใ wSFQPMJOUFSϦϙδτϦʹඞཁͳ৘ใ͕ஔ͔Ε͍ͯΔ͔Ͳ͏͔ͷ νΣοΫπʔϧ w IUUQTHJUIVCDPNUPEPHSPVQSFQPMJOUFS w֤ϦϙδτϦͷΞΫςΟϏςΟͷՄࢹԽπʔϧ w IUUQTHJUIVCDPN"VUPEFTLIVCCMF w IUUQTHJUIVCDPNDIBPTTHSJNPJSFMBC
  52. None