株式会社クリアコード¶ ↑
: author
須藤功平
: content-source
関西Ruby会議2017
: date
2017-05-27
: allotted-time
50m
: theme
clear-code
テーマ¶ ↑
コミュニティーn とn ビジネス
実行委員長曰く¶ ↑
# blockquote コミュニティーとビジネスは\n いい関係でまわると思うんで\n そのための情報を共有する場\n になるといいな (('tag:right')) (('note:実行委員長'))
内容¶ ↑
* 一本のストーリーではなく\n テーマに関する話の詰め合わせ * 聞く人それぞれへの期待: * 参考になる何かが見つかるといいな
題材¶ ↑
# image # src = images/clear-code.svg # relative_width = 100 # reflect_ratio = 0.5
スライドプロパティー¶ ↑
: enable-title-on-image
false
クリアコード¶ ↑
* 設立11年目の会社 * 業務:受託開発と技術サポート * 小さな会社:9人(('note:(募集してはいる)'))
大事にしていること¶ ↑
(('tag:center')) (('tag:large')) フリーソフトウェアの推進n (('note:(Rubyも多くのgemもフリーソフトウェア)'))
(('tag:center')) と
(('tag:center')) (('tag:large')) 稼ぐこと
(('tag:center')) の
(('tag:center')) (('tag:x-large')) 両立
推進するだけだとダメ¶ ↑
* 稼がないと継続できない * そうなると推進し続けられない
稼ぐだけだとダメ¶ ↑
* クリアコードをやっている\n 意味がない * 他の開発会社でいいよね
両立の実現に向けて¶ ↑
* クリアコードが活用するもの * フリーソフトウェア開発で学んだ事\n (('note:理念:https://www.clear-code.com/philosophy/')) * コミュニティーで学んだことを\n ビジネスに活かしている\n (('note:関西Ruby会議2017のテーマにあっていそう!'))
学んだこと1¶ ↑
問題はn upstreamで直す
考えてみよう¶ ↑
(('tag:center')) (('tag:margin-bottom * 2')) 使用ライブラリーに問題発見!n (('note:(たとえばRailsとかActiveなんとかとか)'))n あなたならどうする!?
(1) 手元で回避 (2) 別のライブラリーを探す (3) そのライブラリーを直す
クリアコードのスタイル¶ ↑
(('tag:center'))
-
そのライブラリーを直すn
(('note:(そうじゃないときもあるけど基本的にはそう)'))
* 自コードのメンテ性アップ * 回避コードの独自メンテが不要 * 回避コードの共有が不要\n (('note:(使っているプロジェクト全部で回避が必要)')) * 他の人も困らなくなる
フリーソフトウェア開発の世界¶ ↑
* そのライブラリーを直すのは\n 当たり前 * フリーソフトウェアが大事にしていることの1つは「直せること」! * クリアコードはここで学んだ\n ことを実践しているだけ
コミュニティーとビジネス¶ ↑
* ビジネスでの知見を\n コミュニティーへ * ユースケースを元に改良・修正 * なぜやるの? * クリアコードのポリシーだし! * 「メンテしやすい」は普通に\n ビジネス的に割に合う
クリアコードでの実例¶ ↑
(('tag:center')) Rubyにメモリーリークあり
* Ruby製のデーモンで問題に * 調査→パッチ作成→Rubyを修正 * 定期的に再起動という回避策もあるだろうけど、本家で修正
(('note:これで社員がコミット権をもらっていた'))
(('note:技術的な詳細:デバッグ力: よく知らないプログラムの直し方'))n (('note:www.clear-code.com/blog/2011/12/6.html'))
学んだこと2¶ ↑
開発をn 続けられるn コードを書く
考えてみよう¶ ↑
(('tag:center')) (('tag:margin-bottom * 2')) ファーストリリース完了!n その後は?
(1) 納品して終わり (2) 運用チームにバトンタッチ (3) 継続的に開発
クリアコードのスタイル¶ ↑
(('tag:center')) (('tag:margin-bottom * 2'))
-
継続的に開発
* フリーソフトウェア開発では\n リリースを重ねつつ改良が普通\n (('note:(Rubyも20年以上も改良を続けている)')) * 最初から完璧な状態はわからない * 使ってフィードバックを得て\n よりよい状態を探していく * よい状態の維持にも継続は必要\n (('note:(よい状態は時間が経つと変わる)'))
継続的に開発とビジネス¶ ↑
* 長期間一緒にやれる仕事を優先 * ビジネス的にもよい: * 安定収入 * 知識が増えてよりうまく開発できる
うまく開発¶ ↑
(('tag:center')) (('tag:x-large')) (('tag:margin-bottom * 5')) 開発効率がn 上がる
(('wait')) (('tag:center')) (('tag:x-large')) だけじゃない!
クリアコードのうまく開発¶ ↑
* よりよい提案をできる * お客さんもうれしいし\n クリアコードもうれしい、そんな案 * お客さんのうれしい * よりよい成果(儲かるとか) * クリアコードのうれしい * フリーソフトウェアの推進
クリアコードと提案¶ ↑
* 既存の実現方法は\n フリーソフトウェアの推進が\n 弱いことが多い * それはしょうがない * 推進も加えるところが\n クリアコードの存在意義 * 両立する提案に必要なもの * お客さんの目的の理解
フリーソフトウェア開発の世界¶ ↑
* ユーザーがパッチ提供 * 開発者:目的(ユースケース)確認\n (('note:(Rubyへの機能提案時もユースケースは?と聞かれる)')) * 開発者:提供されたパッチ以外の\n 方法での実現もありえる * ユーザーとプロジェクトで\n メリットの両立を目指す * クリアコードも同様にしているだけ
クリアコードでの実例¶ ↑
(('tag:center')) Groongaサポートn (('note:(Groonga:フリーソフトウェアな全文検索エンジン)'))n (('note:(商用パッケージに組み込み)'))
* 改良はGroongaへマージを提案 * お客さん専用ブランチは作らない * mrubyのバグはmruby修正を提案\n (('note:(Groongaはmrubyを組み込んでいる)')) * 独自パッチを抱えない
Groongaサポートと提案¶ ↑
* 変更はupstreamへ * →成果がフリーソフトウェアに\n (('note:(クリアコードのメリット)')) * メンテナンスコストが下がる\n (('note:(クリアコードのメリット)')) * →サポート費用を抑えられる\n (('note:(お客さんのメリット)'))
学んだこと3¶ ↑
相手がn 想像しなくてもn わかるようにn 説明する
学んだこと4¶ ↑
楽しく開発する
学んだこと5¶ ↑
非難するよりもn 手を動かす
学んだこと6¶ ↑
回避策よりもn 根本解決
主な業務内容¶ ↑
* 受託開発 * FLOSSサポート\n (('note:歴史的な経緯でFLOSSのまま'))\n (('note:昔は「フリーソフトウェア」か「OSS」かで迷っていた')) * OSS開発支援\n (('note:サービス名ではフリーソフトウェアではなくOSSにしている'))
受託開発¶ ↑
* 優先度 (1) フリーソフトウェアを\n 直接的に推進できる仕事\n (('note:例:成果をフリーソフトウェアにできる仕事'))\n (('note:事例:SMSさんの基盤ソフトウェア開発')) (2) フリーソフトウェアを\n 間接的に推進できる仕事\n (('note:例:利用フリーソフトウェアの改良も含む仕事'))\n (('note:事例:Groongaクライアント用gem各種を使う仕事')) (3) いずれ推進につながりそうな仕事
FLOSSサポート¶ ↑
導入支援とn 障害調査n (('note:よくあるやつ'))
導入支援¶ ↑
* 事例:Firefox/Thunderbirdの\n 企業導入(('note:(Ruby関係ないけど…)')) * インストーラー作成キット開発\n (('note:https://github.com/clear-code/fx-meta-installer')) * アドオン開発(('note:(機能制限・一括設定)'))\n (('note:https://github.com/clear-code/')) * ↑はフリーソフトウェアとして公開 * ノウハウはFAQとして公開\n (('note:https://github.com/mozilla-japan/enterprise/blob/master/FAQ.md'))
障害調査¶ ↑
* "ソースがあればなんとかなる" * フリーソフトウェアが大事にしていることの1つは「調べられること」! * 調査対象のバグとわかったら\n upstreamにフィードバック * フリーソフトウェアの推進
OSS開発支援¶ ↑
* お客さんのOSSの開発に参加 * 事例:\n Treasure DataさんのFluentd関連 * お客さんのOSS開発を支援 * 事例:SpeeeさんのWebapp Revieee
お客さんのOSSの開発に参加¶ ↑
ダイレクトに大事なことを両立
(('tag:margin-top * 2')) クリアコードの大事なこと:
* フリーソフトウェアの推進 * 稼ぐこと
どうして仕事になるか¶ ↑
* OSSで稼いでいる企業が増えた * ちゃんとOSSを開発できることを\n OSSを開発することで示せている * OSSの開発が営業活動になっている * コミュニティー活動がビジネスへ
お客さんのOSS開発を支援¶ ↑
ダイレクトに大事なことを両立
(('tag:margin-top * 2')) クリアコードの大事なこと:
* フリーソフトウェアの推進 * 稼ぐこと
どうして仕事になるか¶ ↑
* OSSの活用が当たり前になった * OSSのエコシステムに参加する\n メリットが認知されつつある * 支援してくれそう感が出ている * OSSの開発や発表などが営業活動 * コミュニティー活動がビジネスへ
OSSのエコシステムに参加¶ ↑
どういうことn だろう?
OSSのエコシステムに参加¶ ↑
# blockquote 自分たちのソフトウェアと\n OSSを同じように扱う (('tag:right')) (('note:須藤功平'))
同じように扱う¶ ↑
* 問題があれば直す * 気になるところがあれば共有
(('wait')) (('tag:center')) いつも通りでいい!n OSSは身近なもの
仕事の作り方¶ ↑
お客さんにn 見つけてもらう
お客さん探しを頑張らない¶ ↑
* クリアコードは大衆受けする\n ことをやっていない * マッチするお客さんは少ない * 少ないお客さんを探し回る\n パワーはない * そこに力を入れるよりも\n 得意なことを伸ばしたい
諦めることは大事¶ ↑
* クリアコードは小さな会社 * すべてに全力投球はできない * なにを諦めるかを決断 * なにかに力を入れるということは\n なにかを諦めるということでもある
決断¶ ↑
* 社長職の面白いところでもあり難しいところでもある * 決断する基準があると楽しめる\n (('note:(自分の中で基準がはっきりしていないうちは大変だった)')) * クリアコードの基準 * フリーソフトウェアの推進と * 稼ぐことの両立
お客さん探しと稼ぐこと¶ ↑
* 単に探す事をやめては稼げない * 探さないで稼げないか考える * 基本的にまずは両取りを狙う * さっきは諦めるっていったけどさー * 探す事は諦めるが稼ぐ事は諦めない * トレードオフっぽく見えるやつでも\n トレードオフじゃないかも!?\n と考えてみる
推進と稼ぐことの両取り¶ ↑
* フリーソフトウェアの推進を\n がんばる * 開発・パッチ提供・レビュー * 情報公開:ブログ・発表 * ↑で見つけてもらいやすくなる * 見つけてもらう→仕事→稼げる! * 両取り!
推進→見つけてもらった例¶ ↑
* milter manager開発・発表\n (('note:(Rubyを組み込んだ迷惑メール対策ツール)')) * →問い合わせ * →大規模システムへの導入支援\n (('note:(Rubyで独自メールフィルターも開発)'))
推進→見つけてもらう¶ ↑
* フリーソフトウェア推進自体が\n 営業活動 * 推進と稼ぐの両取りの一例 * コミュニティー活動が\n ビジネスにつながる例
最近の推進兼営業活動¶ ↑
Apache Arrow
Apache Arrow¶ ↑
* データ分析システム用\n 次世代データフォーマット * RubyもApache Arrowを扱えると\n データ分析できそう! * なので扱えるように開発に参加 * Rubyでデータ分析する仕事に\n つながるといいな
おしらせ¶ ↑
* Apache Arrow勉強会開催! * (('note:Apache Arrowが早くデファクトになるとRubyでデータ分析しやすくなる日も近づくはずなので普及活動中')) * 明日の午前に大阪で
(('tag:center')) (('tag:small')) classmethod.connpass.com/event/56478/
採用¶ ↑
* マッチする人は少なそう\n (('note:(仕事と同じ傾向な気がしている)')) * RailsでWebアプリ!とか\n 自社プロダクト○○を開発!とか\n とは違いそう * 業務内容ではなくポリシーでマッチ
採用活動¶ ↑
* フリーソフトウェアの推進 * 見つけてもらう * 一緒にフリーソフトウェアを開発\n →よさそうな人を誘う * RubyKaigiにスポンサー * Rubyを応援したいので始めた * 採用は期待していなかった
まとめ1¶ ↑
# blockquote コミュニティーとビジネスは\n いい関係でまわると思うんで\n そのための情報を共有する場\n になるといいな (('tag:right')) (('note:実行委員長'))
まとめ2¶ ↑
* 一本のストーリーではなく\n テーマに関する話の詰め合わせ * 聞く人それぞれへの期待: * 参考になる何かがあったならいいな
コミュニティーとビジネス¶ ↑
(('tag:center')) この話をしたことがn 仕事につながるとn すごくキレイなのでぜひ!
# image # src = images/clear-code.svg # relative_width = 100 # reflect_ratio = 0.5