フューチャー技術ブログ

フューチャーOSS推進タスクフォース始めます

2020/11/13修正: Vuls、Urushiの公開年を修正

初めに

フューチャーOSS推進タスクフォースを開始しました。実は7月に発足してから8月には活動の骨子が固まり、タスクフォース自体は始動していましたが、中身を作ってから告知した方が具体性があってブレも無くなり良いのでは?という話があり、少しタイミングをずらしてのご報告です。

何を目的とし、何をやっていくつもりなのかこれから説明していきます。活動ははじめましたが。まだまだ手探りな状態ですので運用などなどでアイデアがあればフィードバックをいただきたいのと、”思い”を共にできる方がいらしたら、どこかの勉強会などで意見公開できればなと思います。

OSSとフューチャーの関わり

最初に今までのフューチャーとOSSの関わりについて説明します。

フューチャーはVuls, cheetah-grid, UroboroSQLを初め多くのプロダクトを公開してきました。

私が知る限りの年表は、フューチャー最初のOSSは2006年のRuby製非同期メッセージングのAP4R 1です。2016年にVuls、同年にUrushiというUIフレームワーク、2017年にUroboroSQLが公開され、同年にOSSカンファレンスに登壇&出展しました。この頃から太田さんがeslint-plugin-vueのコミッターになったりVue.jsチームメンバーになってます。現在は大小様々なライブラリやツールが公開され、2020/08/15時点では31(技術ブログやForkされたものは除く)のリポジトリが公開されています。

業務中であってもOSS活動は推奨されていて、テクノロジー部署を率いる宮原さん 2とかは使っていたOSSがバグっていたら直してPull Request出したら?って言ってくれています。フューチャーがコアテクノロジーであると認識したモノに対しては、特に強くコントリビュートしてきています。上から言われなくてもコントリビュートする人は昔から一定数いて、思い出で深いのは、新人のときにfluentdのプラグインを探していて「これだ!」って思ったコードを書いていたAuthorが、日本人どころか隣に座っていた先輩だったって出来事です。他にもアイデアは面白いけどまだまだバギーなプロダクトをいつの間にか社内で実戦投入していて、見つけたバグをせっせとIssueに起票したり直せるのは直したりしている同期もいました。最近は色々なコミッターな人が入社されていて刺激をもらっています。

すでに色々活動はしてはいますが、さらに動きを加速させ、より広く深くOSSに貢献していくため、OSS推進タスクフォースを立ち上げました。

OSSへの貢献とは

OSSへの貢献と一口に言っても様々な活動があると認識しています。よく、Issueを上げてコードを読んでバグを直して..というイメージが強いですが、広い意味では様々な活動が含まれます。

  • OSSのドキュメントを翻訳する、サンプルコードを公開といったブログ記事を書く
  • メーリングリストなどで仕様策定についてディスカッションする
  • OSSの利用実績を登壇で発表する
  • OSSを推進するコミュニティへの運営や、スタッフ手伝い、会場貸し出し、スポンサード
  • StackOverFlowやTeratailなどの質問サイトに回答する
  • 他のだれかのIssueに回答する
  • etc.

どれが偉いとか順位付けは無く、やれる範囲で貢献していくことが世の中を良くすることに繋がると考えています。

今まで外部露出も多く目立っていたのは技術ブログや勉強会でナレッジ公開していくことでしょう。登壇発表やブログ公開は広く見ればOSSエコシステムを形成する一種で、今後もドンドン推進します。今回のOSS推進タスクフォースでは、よりコードにより直接的な貢献を増やしきたいと考えています。

こちらの記事で、藤野さんが書いてあるような動きが理想の一つだと考えています。

具体的な活動

今、積極的に考えている活動は以下4つです。

1. Bugバスター祭り

今までフューチャー技術ブログで癖があるツールやライブラリの回避方法を紹介した記事がいくつかもありますが、紹介すると同時にそのコードを直すということを行います。コードで直接的な貢献を志向しています。Pull Requestにも色々な種類があるかと思います。

  1. ドキュメントやコメントなどのtypo
  2. Bug Fix
  3. 新規機能の追加

今回の活動は2の数を増やしたいと考えています。対象のプロダクトを選定し、Bugバスター祭り という名前の企画を随時開催して、チームとして楽しみながら貢献していこうと考えています。こうしか企画を通してコントリビュータを増やすことが活動の主軸の一つです。

Bugバスター祭りが出てきた理由ですが、OSSでBug Fixを行なうときの難しいところの1つに、Bugを見つけるという事があると思います。このBugバスター祭りはすでにIssueとして報告されているBugや機能要望をみんなで再現・実装していこうという企画のため、OSSを使い倒していないメンバーでも比較的とっつきやすいのでは?と考えています。まずはこういったイベントを何回かこなし、OSS貢献の能力を底上げしていきたいと思っています。

Bugバスター祭りの対象プロダクト選定は、適度にIssueがある・PullRequestが放置されていない・今チームで利用している(または利用しそう)といったモノで考えています。すでにいくつか候補が上がっており、実施結果はこのブログにて報告できると良いなと思っています。

このBugバスター祭りの話をすると、太田さんから以下のようなコメントを貰いました。

OSSに貢献するといえば、Issue書くPullRequest開く、はよく言われますが、他ユーザーのIssueにコメントすることでもコミュニティに貢献できます。具体的には、質問Issue見て解決策を知ってたら「それこうしたらうまくいくよ」って書くとかです。Issue書いた人は助かりますし、その後も同じ問題に遭遇した人も解決策を見つけて助かります。『君の解決策は自分の問題も解決した!ありがとう!』って書いてくれたりもします。感謝されたら自分も嬉しいですし、コミュニティ全体の助けになっているとわかるので嬉しいです。

僕は(eslint-plugin-vueの)メンバーになる前、PullRequestもしていましたが、当時からベビーユーザーで初歩的な問題の解決策に詳しかったのもあり、誰かのIssueに「こうしたらうまくいくよ」って書いたりしていました。みんな『ありがとう』って言ってくれるから嬉しく楽しくやってただけでしたが、メンバーに招待されたのはこの活動も見られていたからかなと思います。

今は自分もOSSメンテナしていて、質問に回答するだけですごく大変です。誰かがIssueに回答してくれるのはとても助かります。ただGitHubの活動履歴とかに残るわけではないので、それを外の組織から評価するのは難しいとは思うのですが、メンテナ・コミュニティの助けになるので、OSSへの恩返しって意味では、この活動も一緒にできるといいと思いました。

これを聞いて、BugタグがついているIssueだけではなくQuestionなタグに回答していくのも活動の骨子に入れたいと思いました。Bugバスター祭りに入れるか別に切り出すか分かりませんが、一緒にやっても良いなと思います。

2. future-commons

これは今までもUroboroSQLなどでも行っていたことですが、プロジェクト(以下PJ)で困っていたり足りない・改善できるライブラリなどをOSSで開発します。まずは既存のプロダクトにコントリビュートして機能拡張しますが、ポリシーが合わない部分が多くなってくると独自開発していくと思っています。この数やスピードを上げていきます。

どちらかといえば、現場で出てきた要望ベースで作っていくので、小さなライブラリ群になっていくと思います。群と書きましたがライブラリ同士の依存はなるべく無くして単体だけでも使えるような思想で設計開発したいと思っています。

いま出ているアイデアは以下です。

  • エラーコード管理
  • 区分値管理
  • DynamoDBデータアクセス
  • OpenAPI Specification Linter
  • OpenAPI Specification 3対応のCode generator

3. Future Incubator

トップダウン的に比較的大きなプロダクトを開発していく活動です。トップダウンと言っても、現場から出てきた不満であったり課題を昇華させたもので、PoCコードで終わるのではなくもちろんプロダクション導入を前提としています。

今考えているのは例えば以下です。

  • サーバレスなジョブ管理ツール
  • 構造ログビューア

こちらはどれが芽が出るのか(開発が継続できるのか)まだよく分からないため、いくつか種をまいて弾込めするところから始めています。こちらはコンセプトが重要なので 天下一README武闘会 という企画を通して、READMEで簡潔に魅力が伝わることや最低限動くコードを通して、継続したいプロダクトを選抜しています。

4. OSS教育コンテンツ

Apache Way(ASFの指針みたいなの)などの考え方や、Contributeの第一手段などをまとめていきます。またこういった考えをフューチャーの若手からまず広げていこうと考えています。(コンテンツは適時公開していきます)。まずは敬意と感謝を持って、そしてOSSとそのコミュニティに貢献していきたい。

すでに記事がフューチャーブログからも出ていて、社内でもとても関心がある領域です。

OSSのライセンスというのは非常に重要ですが、中々小難しく感じます。そのため、まずは社内教育としてのコンテンツを作ろうと思っています。クイズ形式なんて良いんじゃないでしょうか?また、上記の記事は利用者視点に経ったものですが、開発者視点でどのライセンスを利用すべきかや、そのライセンスがどういう背景の人から生まれたかといった観点でもまとめていけると面白いのでは?と思っています。

なんでやるのか?

OSSと共に歩みたい。OSSカンパニーと名乗りたい。OSSにコードで恩返しをしたいと考えています

OSSカンパニーは何か?というと様々な定義があるかと思いますが、ここではOSS推進タスクフォースのリーダーである藤野さんが提唱した考え紹介します。

  1. 会社以外でコードの実績を社員みんなが持つこと。指標にはユーザがいるプロダクトのコミッター数などがあります
    • 単にコミッターの数を競うような指標は持ちたくないですが、結果として様々な組織配下のOSS(Linux FoundationやApache Foundation、Eclipse Foundationなど)のコミッターにフューチャーのITコンサルタントが入ることができれば嬉しいです
  2. プロダクトにバグがあった時、ダーティハックして回避するのではなく本体を直す ことで、会社としてプロダクトに投資していくこと
    • 利用方法で回避するのではなく、、プロダクトを良くしていくことは大事です
    • 同様に、機能が足りないので使うのやめるのではなく、足りないものは自分で機能を実装していくことができたら最高です
    • Bug報告も重要ですが、報告だけだとコミッターに対する負担は大きいため、できる限りコードを同時に書いていきたい

OSSへの恩返しについて。今まで個人的にも、もちろん会社(業務)としてもOSSの恩恵を大きく受けてきました。恩恵を受けてばかりの状態はやめにし、コードで直接的にOSSそのものをより良くしていくことに力を注いでいきます。これを恩返しと表現しました。

技術戦略としてOSSの捉え方

フューチャーではWinner’s Circleと呼ばれる技術戦略を立てており、簡単に言うと自分たちの開発案件で使っていく技術の選択肢を、領域別にまとめたものです。定期的にアップデートしながら選定しています。

その中には商用のプロプライエタリな技術も含みますが、OSSプロダクトも多く含まれます。OSS活動を通してフューチャーの利用する技術がこれからどういう機能を実装しようとしているかを中から知る、その方向でフューチャーの考えとマッチしているかを知る。フューチャーが数多くのPJでOSSプロダクトを導入していった結果を、コードやドキュメントとしてフィードバックしてより良いモノにしていきたい。フューチャーが使っているプロダクトはフューチャー自身もコントリビュートするので、結果的にフューチャーが選定したプロダクトを良いものだと言われるくらいサイクルを回したい。脆弱性などをいち早く知り、既存のPJに展開していきリードできるようにしたい、と考えています。

Winner’s Circleで選定したOSSにコントリビュートするのか、OSSにコントリビュートしたものが自然とWinner’s Circleになるのかですが、どちらの流れがあっても良いかなと思います。最初はコントリビュートしたいと思ったOSSから活動すると思うので、後者から入ることが多いのかな?と思っています。

それって成り立つの?

“OSSをビジネスにするには101”といったテーマで別記事に現在まとめています。社内では先行して読むことができるそうなので、先に読みたい人は声をかけてください。広義でのOSS活動のメリット/デメリットをなるべく経営目線で明文化した記事です。

フューチャーでは、すでにこのOSS活動を経営が理解しており、業務時間中に活動可能です(社内向けにいうとチャージコードがあります)。長期的に見て、採用・PR/ブランディング・技術力向上・自分たちが使っている技術自体に投資することで優位性を確立していくなど、ポジティブな結果につなげていきたいと思います。

今後の進め方は?

現状は兼業メンバーばかりなので、Bugバスター祭り、README武闘会といったイベント駆動で活動します。数値としてはOSS活動実績50件を目標にしています。

すでにSlack上でOSS活動をした場合に投稿するチャネルを作成して、実績をカウントし始めています。AWS SDKや、Go言語本体といった大きめのプロダクトにPull Requestを送るメンバーも出てきています。また、リーダーの藤野さんがあるプロジェクトで出てきた課題を解決するため、Apache Tomcatに新機能を実装した話もあり、こちらについては別記事で紹介したいと思います。

来年に向けて目標

  • 若手・新人に対するOSS教育(新人研修の卒業後研修に組み込みたい)
  • Apache Incubatorへの参画(プロジェクト活動開始/運営)
    • 手順の整理、プロダクトの検討等は2020年度に始めます
  • OSS活動実績200件
  • OSSコミッタ就任1名以上
  • 外部向けカンファレンスとして、フューチャーテックカンファレンス(仮)を開催したい
    • 少し趣旨が異なりますが、様々な技術的な活動を対外的にまとめて発表できる場も、この活動を通して作っていければと思っています

FAQ

  • Q. カンファレンスの運営や登壇など、コミュニティへの貢献はしないの?
    • いいえ、今まで通り、運営の手伝いやスポンサード、状況が落ち着けば会場貸し出しなど色々な方法で貢献していきます。OSS活動≒コミュニティ活動として捉えていきます。自分たちのナレッジはなるべく外に公開していきたいのと、各領域のエキスパートの方々と意見交換して、刺激的なコミュニティになるよう貢献していきたいと思っています
  • Q. 利用するプログラミング言語の縛りはあるの?
    • いいえ。ただ主要メンバーにGo使いが多いので、最初はGo関連のプロダクトに対する活動が多いと思います。フューチャーとしてはJavaを用いるPJが多いので、ゆくゆくはJavaプロダクトへも活動を広げていければと思います。
  • Q. 自社OSS開発側の目標ってあるの?
    • 将来的に達成したいこととしてApache Incubator、ゆくゆくはApache Project入りをするようなプロダクトを作りたいと思います。Apache Incubatorへの参画プロジェクトは2021年度を目標にしています
  • Q. インセンティブってつくっていますか?
    • (直接的には)いいえ。ただ、フューチャーと全く関係ないプロダクトに貢献するのではなく、利用度が高いあるいは、高くなる想定のプロダクトの優先度を高めるため、そのプロダクトを良くすると必然PJに対する貢献になるため、評価もおって得られます。また、コードを通してプロダクトを良くすることが、自分たちにもメリットがあるし、Coolで礼賛すべきことだとチームで認め合う文化を同時に育てていこうと思います。

まとめ

  • フューチャー、OSS始めるってよ
  • 今あるOSSへのコントリビュートをコードで直接的にやっていくよ。新しいプロダクトの開発を加速していくよ
  • 継続するよう色々考えているよ

まだまだ気持ちが先行していますが、大きな活動になるよう継続していきます。よろしくおねがいします。

フューチャー社員やグループの方で気になる方がいらっしゃいましたら、お気軽に連絡ください。実はSlackのオープンチャネルで活動しています


  1. 1.未来報の記事でVuls開発者の神戸さんが触れていますね: https://note.future.co.jp/n/n388bd4dd23d8
  2. 2.こんな記事を書いたりしてマネジメント寄り可と思いきや、やっぱり開発したいのか突然Slack Botツールを投入してくる人です。https://employment.en-japan.com/engineerhub/entry/2020/01/16/103000