SlideShare a Scribd company logo
Submit Search
Upload
クローズドソースから始めるオープンソース
Report
Takafumi ONAKA
Follow
•
10 likes
•
33,402 views
1
of
36
クローズドソースから始めるオープンソース
•
10 likes
•
33,402 views
Download Now
Download to read offline
Report
Technology
2017-05-23 Speee Cafe Meetup #07
Read more
Takafumi ONAKA
Follow
Recommended
ふつうのRailsアプリケーション開発
Takafumi ONAKA
30.8K views
•
90 slides
RSpecしぐさ
Takafumi ONAKA
12.7K views
•
38 slides
ApplicationTemplateのススメ
Takafumi ONAKA
1.4K views
•
82 slides
Sprocketsを捨てたい
Masato Noguchi
12.6K views
•
30 slides
Hatena::Letの式年遷宮
Takafumi ONAKA
6.2K views
•
45 slides
「速」を落とさないコードレビュー
Takafumi ONAKA
55.4K views
•
62 slides
More Related Content
What's hot
すこやかRails
Takafumi ONAKA
19.4K views
•
64 slides
Application Bootstrap
Takafumi ONAKA
2.6K views
•
47 slides
僕はどうしてもLibsassが使いたかったんだ!
Masato Noguchi
4.4K views
•
44 slides
Spring bootで学ぶ初めてのwebアプリ開発
terahide
12.7K views
•
43 slides
Ruby on Rails でつくるアタシ好みの愛され Web サービス
Yoji Shidara
11.7K views
•
163 slides
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
89K views
•
72 slides
What's hot
(20)
すこやかRails
Takafumi ONAKA
•
19.4K views
Application Bootstrap
Takafumi ONAKA
•
2.6K views
僕はどうしてもLibsassが使いたかったんだ!
Masato Noguchi
•
4.4K views
Spring bootで学ぶ初めてのwebアプリ開発
terahide
•
12.7K views
Ruby on Rails でつくるアタシ好みの愛され Web サービス
Yoji Shidara
•
11.7K views
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
•
89K views
Rubyの仕事で食べていくために僕らは!
Ouka Yuka
•
9.4K views
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Kenji Mori
•
21K views
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
•
2.4K views
request-specを利用していい感じにモックデータを作ってフロントエンド開発を楽にしたい!
Masato Noguchi
•
3.1K views
師弟登壇・新米サムライの集い 2013
hiboma
•
8.1K views
2015 07-04-ruby rails
Hiroshi Oyamada
•
2.3K views
2015 12-19-ruby rails
Hiroshi Oyamada
•
1.3K views
Railsチュートリアル(second)を終えて
Hirata Tomoko
•
913 views
2016 02-09-co-edo lt
Hiroshi Oyamada
•
2.1K views
Railsのフロントエンド開発を考える
Hirata Tomoko
•
1.6K views
2016 02-25-crawler-study-01
Hiroshi Oyamada
•
2K views
Riot.jsとフォームのデータバインディング
Keisuke Imai
•
3K views
0から学んだポストモダンPerl @ YAPC::Asia Tokyo 2013
Tasuku Suenaga
•
8.3K views
BootstrapとRailsで、 高速にWebサイトを作ってみた
BeMarble
•
11.3K views
Similar to クローズドソースから始めるオープンソース
What's Cooking In Ruby 2.7
Akinori Musha
103 views
•
28 slides
MF GeeksNight pplogの話
Naoto Koshikawa
3.8K views
•
44 slides
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
38.1K views
•
37 slides
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
Kazuhiro Serizawa
4.1K views
•
22 slides
PHPでWebSocketを実装してみてわかったこと
ksimoji
12.5K views
•
33 slides
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜サービスデザイン編 先生:増井 雄一郎
schoowebcampus
1.3K views
•
30 slides
Similar to クローズドソースから始めるオープンソース
(20)
What's Cooking In Ruby 2.7
Akinori Musha
•
103 views
MF GeeksNight pplogの話
Naoto Koshikawa
•
3.8K views
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
•
38.1K views
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
Kazuhiro Serizawa
•
4.1K views
PHPでWebSocketを実装してみてわかったこと
ksimoji
•
12.5K views
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜サービスデザイン編 先生:増井 雄一郎
schoowebcampus
•
1.3K views
イベント企画運営の経験と実際 / The history of organizing events by me
whywaita
•
248 views
mod_perlで動くアプリをどう置くか #hachiojipm
鉄次 尾形
•
2.2K views
Ltfes2010 opening
Taku Yajima
•
816 views
aozorahack hackathon #1
masayoshi takahashi
•
1.9K views
DevOps Conference #1
Hiroshi Morotomi
•
1.4K views
コミュニティのある風景
Ryunosuke SATO
•
2.7K views
アジャイルサムライ他流試合 - 道場紹介
Kiichi Kajiura
•
1.3K views
C#とRubyをつなぐ
107steps
•
159 views
Rでを作る
Nagi Teramo
•
3.6K views
Ojag naha vol13
Seiei Higa
•
437 views
Ojag naha vol13
hanachin
•
680 views
goog.require()を手書きしていいのは小学生まで
Teppei Sato
•
5.6K views
Browser oh browser browser
Teppei Sato
•
2.4K views
Emscriptenと不思議のダンジョン
兎 伊藤
•
2.5K views
More from Takafumi ONAKA
不正のトライアングルとコードベースの治安維持
Takafumi ONAKA
569 views
•
17 slides
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
9.3K views
•
38 slides
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
11.8K views
•
41 slides
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
23.3K views
•
40 slides
pt-query-digest は Perl!!
Takafumi ONAKA
1.3K views
•
21 slides
アプリケーションを作るときに考える25のこと
Takafumi ONAKA
24.1K views
•
80 slides
More from Takafumi ONAKA
(17)
不正のトライアングルとコードベースの治安維持
Takafumi ONAKA
•
569 views
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
•
9.3K views
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
•
11.8K views
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
•
23.3K views
pt-query-digest は Perl!!
Takafumi ONAKA
•
1.3K views
アプリケーションを作るときに考える25のこと
Takafumi ONAKA
•
24.1K views
cpanfileがRubyでパースできることに気づいた俺たちは
Takafumi ONAKA
•
3.5K views
Perl使いの国のRubyist
Takafumi ONAKA
•
8.6K views
短期間で新技術を学ぶ技術
Takafumi ONAKA
•
26.8K views
ドリコム×ピクシブ 社会人交換留学説明資料
Takafumi ONAKA
•
8.7K views
マジカルsvnとキュアgit
Takafumi ONAKA
•
17.8K views
Github Enterprise じゃなくてもいいじゃん
Takafumi ONAKA
•
23.4K views
ターミナルで画像確認するヤツ作った
Takafumi ONAKA
•
1.7K views
Webアプリケーションは難しい
Takafumi ONAKA
•
136.1K views
Rails3.2ってどう変わるの?
Takafumi ONAKA
•
4.5K views
ドリコム的Railsアプリ開発流儀
Takafumi ONAKA
•
10.2K views
とあるアプリの開発運用(トラブルシュート)
Takafumi ONAKA
•
34.6K views
Recently uploaded
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
157 views
•
63 slides
JJUG CCC.pptx
Kanta Sasaki
6 views
•
14 slides
概念モデリングワークショップ 基礎編
Knowledge & Experience
19 views
•
71 slides
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
208 views
•
33 slides
01Booster Studio ご紹介資料
ssusere7a2172
209 views
•
19 slides
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
6 views
•
34 slides
Recently uploaded
(8)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
157 views
JJUG CCC.pptx
Kanta Sasaki
•
6 views
概念モデリングワークショップ 基礎編
Knowledge & Experience
•
19 views
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
208 views
01Booster Studio ご紹介資料
ssusere7a2172
•
209 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
•
6 views
さくらのひやおろし2023
法林浩之
•
76 views
概念モデリングワークショップ 設計編
Knowledge & Experience
•
10 views
クローズドソースから始めるオープンソース
1.
クローズドソースから始 めるオープンソース 2017-05-23 Speee Cafe Meetup
#07 大仲 能史 a.k.a. @onk
2.
自己紹介 • 大仲 能史
a.k.a. @onk • 株式会社ドリコム スペシャリスト • Railsエンジニア歴8年ぐらい • ドリコムには開発ラインが十数本あるので それらから共通化可能な部分をくくりだして 社内gemにする仕事をしています
3.
今日の話 • タイトル「クローズドソースから始めるオープンソース」 • すとうさんに怒られそうなタイトルなのであまりこの順番で話 したくないんですが( •
どのようにオープンソースの「障壁」を取っ払う文化を作って きたかという話をします。
4.
前回のあらすじ! • RubyKaigi2014でも似たような話をしました(by mitaku) http://rubykaigi.org/2014/presentation/S-TakumiMiura
5.
前回のあらすじ! • プロジェクトがいっぱいあると https://speakerdeck.com/mitaku/rubykaigi-2014-gem-of-this-week
6.
前回のあらすじ! • チェリーピック(orコピペ)が生まれる
7.
前回のあらすじ! • 僕らはweb/ゲームという競争の激しい市場で戦っているので
8.
前回のあらすじ! • 俊敏さを維持する必要がある! (コピペはAgilityが足りない)
9.
社内gemという文化を作った
10.
社内gem • geminabox gemを利用して社内gemサーバを立てている
11.
社内gem • 5/23時点で173個 • aからzまで大体埋まるぐらい •
ドリコムの「d」から始まるgemだらけでキツい • タブ補完を利かせるためには1文字目を変える方が望ましいという教訓
12.
社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える •
誰もがgemを作れる、更新できる雰囲気を醸成する
13.
社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える •
誰もがgemを作れる、更新できる雰囲気を醸成する
14.
共通コードをgemにする • こんなのをgemにしました紹介 • komachi_heartbeat •
Speeeさんでも使われてるみたい? • ヘルスチェックを行うMountable Engine • dpoint • 30分で導入できる仮想通貨システム • client_app • User-Agentをパースして、必要だったらApp Storeに飛ばすヤツ • game_date • ゲーム内では午前4時が日付変更線になってる的なヤツ
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.
共通コードをgemにする • 僕らの開発組織体制 • プロダクトと別に開発基盤部が存在 •
開発基盤メンバーがプロダクトに アサインされることもある • 横のつながりが担保され、共通部分に 気づきやすい • 外でgemを作ってるメンバーが居た、 共通化して加速するのが当然だよねという 空気が先に存在した影響は大きい
17.
社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える •
誰もがgemを作れる、更新できる雰囲気を醸成する
18.
gemを作る、アップデートすることが日 常であることを伝える • 毎週、全プロダクトのリードエンジニアを集めた共有会を開催 している • 今後追加しようと思っている機能の報告や、トラブル共有等を 行っている •
目的は車輪の再発明の防止と、人の振り見て我が振り直せ • 事実・負債・挑戦&見える化、横展開 • ツラみやドヤりの共有
19.
gemを作る、アップデートすることが日 常であることを伝える • 共有会のコンテンツに「今週のgem」というコーナーを作った • 1週間の間に作ったgem、バージョンアップしたgemと そのREADME、CHANGELOGを報告する •
作者の顔が見えるし、作者が「めっちゃ便利なので入れてくだ さい」とアピールする場になる • 便利gemがプロダクトに取り入れられ、要望が上がってきて バージョンアップして、バージョンアップ内容が次の共有会で 報告され、便利になったので別のプロダクトに取り入れられ ……という非常に良いループが回った
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.
社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える •
誰もがgemを作れる、更新できる雰囲気を醸成する
22.
誰もがgemを作れる、更新できる雰囲気 を醸成する • drecom_gemというgemを作った • drecom_gem
gem [gem_name]で雛型作成 • rake drecom:releaseで社内gemサーバにリリースできる • drecom_gemdiffというgemを作った • gemdiffの社内版 • CHANGELOGに対して気軽にアクセスできる
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.
誰もがgemを作れる、更新できる雰囲気 を醸成する • drecom_gemを使ってgemをリリースするとリリース情報が全体 チャットに流れる • 初めてのgemリリースのときはみんなで祝福する •
gemを作ってorアップデートして初めて一人前な空気になる • 共通化チャンスを見つけたら新入社員に優先的に割り振る
25.
誰もがgemを作れる、更新できる雰囲気 を醸成する • 更新したら使って欲しい • gemはなるべく最新を使い続けるよう心掛ける
26.
誰もがgemを作れる、更新できる雰囲気 を醸成する • gemicomという社内サービスがある • gemnasiumクローン? •
どのプロジェクトが、どのバージョンのgemを使っているかを管理 • 最新バージョンじゃなかったら警告される
27.
社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える •
誰もがgemを作れる、更新できる雰囲気を醸成する
28.
社内gemが文化になるまでのアジェンダ • 共通コードをgemにする • gemを作る、アップデートすることが日常であることを伝える •
誰もがgemを作れる、更新できる雰囲気を醸成する • これらを練習に適した場所で行いたい 社内のイメージ OSS界のイメージ
29.
クローズドソースから始める理由 • ライブラリとして成立するまでの抽象化の壁 • ライブラリとして体裁が整っているかの心理的な壁 •
これらの障壁をできるかぎり下げて、「ライブラリを作るって 難しそう」から「やったことがある」に遷移させる
30.
これを許容する • 社内のアウトプット量を最大化させるが、世界のアウトプット 量は最大化していない。まずはそれで良いんです ベルセルク 24巻
三浦建太郎/白泉社 そ れ と も お 前 何 十 年 も 修 行 し て 達 人 に で も な る の を 待 っ て か ら 戦 場 に 出 る つ も り か ? 気 の 長 げ ェ 話 だ な
31.
クローズドソースをオープンにする • とはいえクローズドのままじゃなく、隙あれば公開したい • 公開するキッカケ •
辞めた人から「あれ欲しい」って言われる • 社内gemを社外の自分のプロダクトで使いたい • 懇親会等で「こんなのあればなぁ」という声を聞く • Tech Blogのネタが尽きる • これだけ(173個)あると、「月に1個必ずオープンにする ぞ!」という上意下達もアリですね
32.
自分の管理対象のコードを広げていく • 社内gemにPRを投げることに慣れたら、外のgemも社内gemと同 じように扱えるようになる • Gemfileに加えた瞬間からフィードバックする義務を負う •
覚悟を持ってOSSと相対していく
33.
外に出ていく障壁もできるだけ下げる • 社内gemとはいえ、PRのdescriptionはしっかり書く • 社内gemとはいえ、READMEやCHANGELOG、CIを完備する •
普段からIssue/PR駆動の開発フローに親しむ • 普段からGitHubのUIに親しむ • OSSパッチ会の開催 (Inspired by OSS Gate)
34.
OSSパッチ会 檄文 一般にスタートアップ企業はOSSの利用者であることが多く、積 極的に貢献することは少ないですが、営利団体が「使うだけ使っ て何の貢献もフィードバックもしないフリーライダー」というの は倫理観が少し欠如しているとみなされても文句を言えない状態 です。 実際、僕らは問題を見つけてバージョンを固定して凌いだり、モ ンキーパッチを書いたりをしながらサービスを運営しているので、 フィードバックを「できるのにやらない」という、コミュニティ に還元しない選択をしてしまっています。 この理由を解消し、ふつうの会社にしたいなと思ってこの会を企 画しました。
35.
まとめ
36.
まとめ • ライブラリを作ったり貢献したりするまでの障壁は「ある」 • 障壁を下げるために手を尽くす。そのためのクローズドソース •
とはいえ、OSSが実は怖くないのも事実なので積極的に参加し ていく • 「この修正でとりあえず動くけど、正しいかどうか分からない のでupstreamに投げるのが怖い」←正しくなかったら指摘して くれるからええんやで • 男は度胸!何でもためしてみるのさ きっといい気持ちだぜ