O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
クローズドソースから始
めるオープンソース
2017-05-23
Speee Cafe Meetup #07
大仲 能史 a.k.a. @onk
自己紹介
• 大仲 能史 a.k.a. @onk
• 株式会社ドリコム スペシャリスト
• Railsエンジニア歴8年ぐらい
• ドリコムには開発ラインが十数本あるので
それらから共通化可能な部分をくくりだして
社内gemにする仕事をしています
今日の話
• タイトル「クローズドソースから始めるオープンソース」
• すとうさんに怒られそうなタイトルなのであまりこの順番で話
したくないんですが(
• どのようにオープンソースの「障壁」を取っ払う文化を作って
きたかという話をします。
前回のあらすじ!
• RubyKaigi2014でも似たような話をしました(by mitaku)
http://rubykaigi.org/2014/presentation/S-TakumiMiura
前回のあらすじ!
• プロジェクトがいっぱいあると
https://speakerdeck.com/mitaku/rubykaigi-2014-gem-of-this-week
前回のあらすじ!
• チェリーピック(orコピペ)が生まれる
前回のあらすじ!
• 僕らはweb/ゲームという競争の激しい市場で戦っているので
前回のあらすじ!
• 俊敏さを維持する必要がある! (コピペはAgilityが足りない)
社内gemという文化を作った
社内gem
• geminabox gemを利用して社内gemサーバを立てている
社内gem
• 5/23時点で173個
• aからzまで大体埋まるぐらい
• ドリコムの「d」から始まるgemだらけでキツい
• タブ補完を利かせるためには1文字目を変える方が望ましいという教訓
社内gemが文化になるまでのアジェンダ
• 共通コードをgemにする
• gemを作る、アップデートすることが日常であることを伝える
• 誰もがgemを作れる、更新できる雰囲気を醸成する
社内gemが文化になるまでのアジェンダ
• 共通コードをgemにする
• gemを作る、アップデートすることが日常であることを伝える
• 誰もがgemを作れる、更新できる雰囲気を醸成する
共通コードをgemにする
• こんなのをgemにしました紹介
• komachi_heartbeat
• Speeeさんでも使われてるみたい?
• ヘルスチェックを行うMountable Engine
• dpoint
• 30分で導入できる仮...
共通コードをgemにする
• こんなのをgemにしました紹介
• gstb
• gistub(社内gist)に投稿するためのCLIツール
• 設定レスでgem installするだけで使えるよう、公開せず社内gemに
• capistrano-...
共通コードをgemにする
• 僕らの開発組織体制
• プロダクトと別に開発基盤部が存在
• 開発基盤メンバーがプロダクトに
アサインされることもある
• 横のつながりが担保され、共通部分に
気づきやすい
• 外でgemを作ってるメンバーが居た、...
社内gemが文化になるまでのアジェンダ
• 共通コードをgemにする
• gemを作る、アップデートすることが日常であることを伝える
• 誰もがgemを作れる、更新できる雰囲気を醸成する
gemを作る、アップデートすることが日
常であることを伝える
• 毎週、全プロダクトのリードエンジニアを集めた共有会を開催
している
• 今後追加しようと思っている機能の報告や、トラブル共有等を
行っている
• 目的は車輪の再発明の防止と、人の...
gemを作る、アップデートすることが日
常であることを伝える
• 共有会のコンテンツに「今週のgem」というコーナーを作った
• 1週間の間に作ったgem、バージョンアップしたgemと
そのREADME、CHANGELOGを報告する
• 作者の...
gemを作る、アップデートすることが日
常であることを伝える
• 量が増えたので、社内gemが偏在する
ようになった
• 社内gemのある風景こそが日常
• 普通に作るし普通に使う
• Gemfileがこうなっている→
source "http...
社内gemが文化になるまでのアジェンダ
• 共通コードをgemにする
• gemを作る、アップデートすることが日常であることを伝える
• 誰もがgemを作れる、更新できる雰囲気を醸成する
誰もがgemを作れる、更新できる雰囲気
を醸成する
• drecom_gemというgemを作った
• drecom_gem gem [gem_name]で雛型作成
• rake drecom:releaseで社内gemサーバにリリースできる
•...
誰もがgemを作れる、更新できる雰囲気
を醸成する
• dcmdというgemを作った
• 社内gemに関するgemをまとめて入れられる
• コマンド体系を変更して覚える量を減らし、タブ補完が効くように
• drecom_gem gem -> d...
誰もがgemを作れる、更新できる雰囲気
を醸成する
• drecom_gemを使ってgemをリリースするとリリース情報が全体
チャットに流れる
• 初めてのgemリリースのときはみんなで祝福する
• gemを作ってorアップデートして初めて一人...
誰もがgemを作れる、更新できる雰囲気
を醸成する
• 更新したら使って欲しい
• gemはなるべく最新を使い続けるよう心掛ける
誰もがgemを作れる、更新できる雰囲気
を醸成する
• gemicomという社内サービスがある
• gemnasiumクローン?
• どのプロジェクトが、どのバージョンのgemを使っているかを管理
• 最新バージョンじゃなかったら警告される
社内gemが文化になるまでのアジェンダ
• 共通コードをgemにする
• gemを作る、アップデートすることが日常であることを伝える
• 誰もがgemを作れる、更新できる雰囲気を醸成する
社内gemが文化になるまでのアジェンダ
• 共通コードをgemにする
• gemを作る、アップデートすることが日常であることを伝える
• 誰もがgemを作れる、更新できる雰囲気を醸成する
• これらを練習に適した場所で行いたい
社内のイメージ ...
クローズドソースから始める理由
• ライブラリとして成立するまでの抽象化の壁
• ライブラリとして体裁が整っているかの心理的な壁
• これらの障壁をできるかぎり下げて、「ライブラリを作るって
難しそう」から「やったことがある」に遷移させる
これを許容する
• 社内のアウトプット量を最大化させるが、世界のアウトプット
量は最大化していない。まずはそれで良いんです
ベルセルク 24巻 三浦建太郎/白泉社
そ
れ
と
も
お
前
何
十
年
も
修
行
し
て
達
人
に
で
も
な
...
クローズドソースをオープンにする
• とはいえクローズドのままじゃなく、隙あれば公開したい
• 公開するキッカケ
• 辞めた人から「あれ欲しい」って言われる
• 社内gemを社外の自分のプロダクトで使いたい
• 懇親会等で「こんなのあればなぁ」...
自分の管理対象のコードを広げていく
• 社内gemにPRを投げることに慣れたら、外のgemも社内gemと同
じように扱えるようになる
• Gemfileに加えた瞬間からフィードバックする義務を負う
• 覚悟を持ってOSSと相対していく
外に出ていく障壁もできるだけ下げる
• 社内gemとはいえ、PRのdescriptionはしっかり書く
• 社内gemとはいえ、READMEやCHANGELOG、CIを完備する
• 普段からIssue/PR駆動の開発フローに親しむ
• 普段から...
OSSパッチ会 檄文
一般にスタートアップ企業はOSSの利用者であることが多く、積
極的に貢献することは少ないですが、営利団体が「使うだけ使っ
て何の貢献もフィードバックもしないフリーライダー」というの
は倫理観が少し欠如しているとみなされても...
まとめ
まとめ
• ライブラリを作ったり貢献したりするまでの障壁は「ある」
• 障壁を下げるために手を尽くす。そのためのクローズドソース
• とはいえ、OSSが実は怖くないのも事実なので積極的に参加し
ていく
• 「この修正でとりあえず動くけど、正しい...
Próximos SlideShares
Carregando em…5
×

クローズドソースから始めるオープンソース

27.344 visualizações

Publicada em

2017-05-23 Speee Cafe Meetup #07

Publicada em: Tecnologia
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

クローズドソースから始めるオープンソース

  1. 1. クローズドソースから始 めるオープンソース 2017-05-23 Speee Cafe Meetup #07 大仲 能史 a.k.a. @onk
  2. 2. 自己紹介 • 大仲 能史 a.k.a. @onk • 株式会社ドリコム スペシャリスト • Railsエンジニア歴8年ぐらい • ドリコムには開発ラインが十数本あるので それらから共通化可能な部分をくくりだして 社内gemにする仕事をしています
  3. 3. 今日の話 • タイトル「クローズドソースから始めるオープンソース」 • すとうさんに怒られそうなタイトルなのであまりこの順番で話 したくないんですが( • どのようにオープンソースの「障壁」を取っ払う文化を作って きたかという話をします。
  4. 4. 前回のあらすじ! • RubyKaigi2014でも似たような話をしました(by mitaku) http://rubykaigi.org/2014/presentation/S-TakumiMiura
  5. 5. 前回のあらすじ! • プロジェクトがいっぱいあると https://speakerdeck.com/mitaku/rubykaigi-2014-gem-of-this-week
  6. 6. 前回のあらすじ! • チェリーピック(orコピペ)が生まれる
  7. 7. 前回のあらすじ! • 僕らはweb/ゲームという競争の激しい市場で戦っているので
  8. 8. 前回のあらすじ! • 俊敏さを維持する必要がある! (コピペはAgilityが足りない)
  9. 9. 社内gemという文化を作った
  10. 10. 社内gem • geminabox gemを利用して社内gemサーバを立てている
  11. 11. 社内gem • 5/23時点で173個 • aからzまで大体埋まるぐらい • ドリコムの「d」から始まるgemだらけでキツい • タブ補完を利かせるためには1文字目を変える方が望ましいという教訓
  12. 12. 社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える • 誰もがgemを作れる、更新できる雰囲気を醸成する
  13. 13. 社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える • 誰もがgemを作れる、更新できる雰囲気を醸成する
  14. 14. 共通コードをgemにする • こんなのをgemにしました紹介 • komachi_heartbeat • Speeeさんでも使われてるみたい? • ヘルスチェックを行うMountable Engine • dpoint • 30分で導入できる仮想通貨システム • client_app • User-Agentをパースして、必要だったらApp Storeに飛ばすヤツ • game_date • ゲーム内では午前4時が日付変更線になってる的なヤツ
  15. 15. 共通コードをgemにする • こんなのをgemにしました紹介 • gstb • gistub(社内gist)に投稿するためのCLIツール • 設定レスでgem installするだけで使えるよう、公開せず社内gemに • capistrano-drecom-deploy • ドリコムのインフラ事情に合わせたcapレシピ集 • drecomssh • ec2ssh gem(mirakuiware)の社内版 • ホスト名が補完できるようになる • komachi_foundation-drecom • 社内標準のrails app template
  16. 16. 共通コードをgemにする • 僕らの開発組織体制 • プロダクトと別に開発基盤部が存在 • 開発基盤メンバーがプロダクトに アサインされることもある • 横のつながりが担保され、共通部分に 気づきやすい • 外でgemを作ってるメンバーが居た、 共通化して加速するのが当然だよねという 空気が先に存在した影響は大きい
  17. 17. 社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える • 誰もがgemを作れる、更新できる雰囲気を醸成する
  18. 18. gemを作る、アップデートすることが日 常であることを伝える • 毎週、全プロダクトのリードエンジニアを集めた共有会を開催 している • 今後追加しようと思っている機能の報告や、トラブル共有等を 行っている • 目的は車輪の再発明の防止と、人の振り見て我が振り直せ • 事実・負債・挑戦&見える化、横展開 • ツラみやドヤりの共有
  19. 19. gemを作る、アップデートすることが日 常であることを伝える • 共有会のコンテンツに「今週のgem」というコーナーを作った • 1週間の間に作ったgem、バージョンアップしたgemと そのREADME、CHANGELOGを報告する • 作者の顔が見えるし、作者が「めっちゃ便利なので入れてくだ さい」とアピールする場になる • 便利gemがプロダクトに取り入れられ、要望が上がってきて バージョンアップして、バージョンアップ内容が次の共有会で 報告され、便利になったので別のプロダクトに取り入れられ ……という非常に良いループが回った
  20. 20. gemを作る、アップデートすることが日 常であることを伝える • 量が増えたので、社内gemが偏在する ようになった • 社内gemのある風景こそが日常 • 普通に作るし普通に使う • Gemfileがこうなっている→ source "http://gem.drecom.co.jp" do gem "acts_as_mysql_partition" gem "blue_pencil" gem "client_app" gem "client_version" gem "compression_serializer-msgpack" gem "dmaster" gem "dpoint" gem "dpoint_web" gem "drecom-unicorn", require: "unicorn" gem "drecom-unicorn-worker-killer" gem "drecom_ldap" gem "dsearch" gem "egg" gem "game_date" gem "kpi-logger" gem "lock_with_user" gem "retryable_action" gem "scatter_swappable" gem "taboo" gem "un_resource_list_info" gem "una10_controller" gem "unavro" gem "unicorn-timeout_logging" gem "unicorn_manager" gem "user_id_tagged_logger" end
  21. 21. 社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える • 誰もがgemを作れる、更新できる雰囲気を醸成する
  22. 22. 誰もがgemを作れる、更新できる雰囲気 を醸成する • drecom_gemというgemを作った • drecom_gem gem [gem_name]で雛型作成 • rake drecom:releaseで社内gemサーバにリリースできる • drecom_gemdiffというgemを作った • gemdiffの社内版 • CHANGELOGに対して気軽にアクセスできる
  23. 23. 誰もがgemを作れる、更新できる雰囲気 を醸成する • dcmdというgemを作った • 社内gemに関するgemをまとめて入れられる • コマンド体系を変更して覚える量を減らし、タブ補完が効くように • drecom_gem gem -> dcmd gem generate • drecomssh update -> dcmd ssh update • drecom_gemdiff compare -> dcmd gemdiff compare • awesome_releaseというgemを作った • コントリビュータに感謝を伝えることができるgem • octorelease gem(mizzyware)の社内版 • Issue/PRからCHANGELOGを自動生成できる • Issue/PRに「vX.Y.Zでリリースしたよ、ありがとう!」とコメント
  24. 24. 誰もがgemを作れる、更新できる雰囲気 を醸成する • drecom_gemを使ってgemをリリースするとリリース情報が全体 チャットに流れる • 初めてのgemリリースのときはみんなで祝福する • gemを作ってorアップデートして初めて一人前な空気になる • 共通化チャンスを見つけたら新入社員に優先的に割り振る
  25. 25. 誰もがgemを作れる、更新できる雰囲気 を醸成する • 更新したら使って欲しい • gemはなるべく最新を使い続けるよう心掛ける
  26. 26. 誰もがgemを作れる、更新できる雰囲気 を醸成する • gemicomという社内サービスがある • gemnasiumクローン? • どのプロジェクトが、どのバージョンのgemを使っているかを管理 • 最新バージョンじゃなかったら警告される
  27. 27. 社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える • 誰もがgemを作れる、更新できる雰囲気を醸成する
  28. 28. 社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える • 誰もがgemを作れる、更新できる雰囲気を醸成する • これらを練習に適した場所で行いたい 社内のイメージ OSS界のイメージ
  29. 29. クローズドソースから始める理由 • ライブラリとして成立するまでの抽象化の壁 • ライブラリとして体裁が整っているかの心理的な壁 • これらの障壁をできるかぎり下げて、「ライブラリを作るって 難しそう」から「やったことがある」に遷移させる
  30. 30. これを許容する • 社内のアウトプット量を最大化させるが、世界のアウトプット 量は最大化していない。まずはそれで良いんです ベルセルク 24巻 三浦建太郎/白泉社 そ れ と も お 前 何 十 年 も 修 行 し て 達 人 に で も な る の を 待 っ て か ら 戦 場 に 出 る つ も り か ? 気 の 長 げ ェ 話 だ な
  31. 31. クローズドソースをオープンにする • とはいえクローズドのままじゃなく、隙あれば公開したい • 公開するキッカケ • 辞めた人から「あれ欲しい」って言われる • 社内gemを社外の自分のプロダクトで使いたい • 懇親会等で「こんなのあればなぁ」という声を聞く • Tech Blogのネタが尽きる • これだけ(173個)あると、「月に1個必ずオープンにする ぞ!」という上意下達もアリですね
  32. 32. 自分の管理対象のコードを広げていく • 社内gemにPRを投げることに慣れたら、外のgemも社内gemと同 じように扱えるようになる • Gemfileに加えた瞬間からフィードバックする義務を負う • 覚悟を持ってOSSと相対していく
  33. 33. 外に出ていく障壁もできるだけ下げる • 社内gemとはいえ、PRのdescriptionはしっかり書く • 社内gemとはいえ、READMEやCHANGELOG、CIを完備する • 普段からIssue/PR駆動の開発フローに親しむ • 普段からGitHubのUIに親しむ • OSSパッチ会の開催 (Inspired by OSS Gate)
  34. 34. OSSパッチ会 檄文 一般にスタートアップ企業はOSSの利用者であることが多く、積 極的に貢献することは少ないですが、営利団体が「使うだけ使っ て何の貢献もフィードバックもしないフリーライダー」というの は倫理観が少し欠如しているとみなされても文句を言えない状態 です。 実際、僕らは問題を見つけてバージョンを固定して凌いだり、モ ンキーパッチを書いたりをしながらサービスを運営しているので、 フィードバックを「できるのにやらない」という、コミュニティ に還元しない選択をしてしまっています。 この理由を解消し、ふつうの会社にしたいなと思ってこの会を企 画しました。
  35. 35. まとめ
  36. 36. まとめ • ライブラリを作ったり貢献したりするまでの障壁は「ある」 • 障壁を下げるために手を尽くす。そのためのクローズドソース • とはいえ、OSSが実は怖くないのも事実なので積極的に参加し ていく • 「この修正でとりあえず動くけど、正しいかどうか分からない のでupstreamに投げるのが怖い」←正しくなかったら指摘して くれるからええんやで • 男は度胸!何でもためしてみるのさ きっといい気持ちだぜ

×