= 株式会社クリアコード : author 須藤功平 : content-source 関西Ruby会議2017 : date 2017-05-27 : allotted-time 60m : 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')) 3. そのライブラリーを直す\n (('note:(そうじゃないときもあるけど基本的にはそう)')) * 自コードのメンテ性アップ * 回避コードの独自メンテが不要 * 回避コードの共有が不要\n (('note:(使っているプロジェクト全部で回避が必要)')) * 他の人も困らなくなる = フリーソフトウェア開発の世界 * そのライブラリーを直すのは\n 当たり前 * フリーソフトウェアが大事にしていることの1つは「直せること」! * クリアコードはここで学んだ\n ことを実践しているだけ = コミュニティーとビジネス * ビジネスでの知見を\n コミュニティーへ * ユースケースを元に改良・修正 * なぜやるの? * クリアコードのポリシーだし! * 「メンテしやすい」は普通に\n ビジネス的に割に合う = クリアコードでの実例 (('tag:center')) Rubyにメモリーリークあり * Ruby製のデーモンで問題に * 調査→パッチ作成→Rubyを修正 * 定期的に再起動という回避策もあるだろうけど、本家で修正 (('note:これで社員がコミット権をもらっていた')) (('note:技術的な詳細:デバッグ力: よく知らないプログラムの直し方'))\n (('note:http://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')) 3. 継続的に開発 * フリーソフトウェア開発では\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')) https://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