株式会社クリアコード

: 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'))

  1. そのライブラリーを直す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'))

  1. 継続的に開発

* フリーソフトウェア開発では\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