Discover companies you will love

  • コンピュータサイエンティスト
  • 7 registered

最強のレビュー支援システムのために最強のプログラム解析器を作ってくれ

コンピュータサイエンティスト

on 2017-10-04

1,665 views

7 requested to visit

最強のレビュー支援システムのために最強のプログラム解析器を作ってくれ

Mid-career
New Graduate・Internship
Expanding business abroad
Mid-career
New Graduate・Internship
Expanding business abroad

What we do

SideCIはより効率的なコードレビューのために自動化を進める手助けとなる製品です。GitHubと連携して動作し、Pull Requestが作成されると、自動で検査を行います。検査によって発見された問題を、Pull Requestで変更された部分のみにフィルタリングして、表示します。利用者は、SideCIによって発見された問題を確認し、修正の必要があるものを修正します。SideCIによってある程度の問題が検出されるため、コードレビューを効率的に進めることができます。特に、PHPやRuby、JavaScriptなどの、Webプログラミングでよく使われる言語を対象としています。 世の中には、いくつかのコードレビューの自動化に注目したサービスがあり、我々の競合となっています。典型的なコードレビュー自動化サービスは、1行が長すぎるとか、メソッド定義が長すぎるとか、定義された変数が参照されないとか、コードの重複がないかとか、そういう検査を提供しています。これらの検査によって、綺麗でメンテナンスのしやすいコードを書くように、プログラマを誘導しようというものです。 メンテナンスのしやすいコードというのは、確かに価値がありますが、しかし私たちに言わせれば本当の問題から目を背けているように思えます。 コードレビューの一番大切な役割は、実装が要件を満たしていることの確認です。プログラマが意図していない挙動によって、問題を引き起こすプログラムになっていないかの確認です。これは平たく言えばバグを見つけることで、顧客の手元でバグが発覚すると、サービスの停止や会社の倒産を含む、とても良くないことが次々に起こります。 SideCIは、「読みやすいコード」ではなく「問題の検出」を重視しています。 「SideCIを使ってプログラムを検査すると、問題がある可能性が高い部分が見つかるので、その周辺を特に丁寧に確認することで効率的にレビューができる」 これが、私たちが目指している製品です。 そのためには、ちょっと賢いプログラム解析が必要で、世の中にはそんなものがまだないので自分たちで作らなくてはいけない、そういうストーリーです。
Siderのスクリーンショットです
ドッグフーディングしやすいのが良いことです
これは大江戸Ruby会議での松本のトークの写真です
Ruby biz Grand prix 2016では特別賞を受賞しました
オフィスの風景です
ThinkPadやMacBook Proを使っています

What we do

Siderのスクリーンショットです

ドッグフーディングしやすいのが良いことです

SideCIはより効率的なコードレビューのために自動化を進める手助けとなる製品です。GitHubと連携して動作し、Pull Requestが作成されると、自動で検査を行います。検査によって発見された問題を、Pull Requestで変更された部分のみにフィルタリングして、表示します。利用者は、SideCIによって発見された問題を確認し、修正の必要があるものを修正します。SideCIによってある程度の問題が検出されるため、コードレビューを効率的に進めることができます。特に、PHPやRuby、JavaScriptなどの、Webプログラミングでよく使われる言語を対象としています。 世の中には、いくつかのコードレビューの自動化に注目したサービスがあり、我々の競合となっています。典型的なコードレビュー自動化サービスは、1行が長すぎるとか、メソッド定義が長すぎるとか、定義された変数が参照されないとか、コードの重複がないかとか、そういう検査を提供しています。これらの検査によって、綺麗でメンテナンスのしやすいコードを書くように、プログラマを誘導しようというものです。 メンテナンスのしやすいコードというのは、確かに価値がありますが、しかし私たちに言わせれば本当の問題から目を背けているように思えます。 コードレビューの一番大切な役割は、実装が要件を満たしていることの確認です。プログラマが意図していない挙動によって、問題を引き起こすプログラムになっていないかの確認です。これは平たく言えばバグを見つけることで、顧客の手元でバグが発覚すると、サービスの停止や会社の倒産を含む、とても良くないことが次々に起こります。 SideCIは、「読みやすいコード」ではなく「問題の検出」を重視しています。 「SideCIを使ってプログラムを検査すると、問題がある可能性が高い部分が見つかるので、その周辺を特に丁寧に確認することで効率的にレビューができる」 これが、私たちが目指している製品です。 そのためには、ちょっと賢いプログラム解析が必要で、世の中にはそんなものがまだないので自分たちで作らなくてはいけない、そういうストーリーです。

Why we do

オフィスの風景です

ThinkPadやMacBook Proを使っています

なぜコードレビューに注目するのでしょうか?なぜプログラム解析の知識・技術を身につけた人(あなたのことです)が、コードレビューの自動化に取り組むべきなのでしょうか? Siderは、PHPやRuby、JavaScriptなどのプログラミング言語を主な対象としています。これらの言語は、特にプログラム解析を困難にするいくつかの性質を持っています。型がない、動的にロードされるコード、多用されるリフレクションなど、真面目に考えたくないことが多すぎます。 なぜ、このような困難にわざわざ挑戦しないといけないのでしょうか?なんらかの成果を得ることができるのでしょうか? Siderが利用者に提供する価値は、あくまで「コードレビューの効率化」です。ここに、いくつか注目に値する点があります。 まず、「Siderのゴールはユーザーの体験としてレビューが改善されていること」という点です。解析自体の性能は確かに重要ですが、本当に重要なのは「析結果をコードレビューの効率化に役立ててもらえるか」という点です。解析ではなく、全体のユーザー体験を評価するというのは新しい基準ではないかと思います。 次に「Siderが前提としているコードレビューの形式は、変更を対象とする」という点があります。これは、解析が実用的であるために必要な精度を引き下げる可能性があります。プログラム全体を解析した結果として、false positiveを含む問題が山のように見つかると、それを全て確認するのは困難です。一方で、レビュー対象となる変更が十分に小さければ、同程度の精度でも、一度に確認しなくてはいけない問題の数は減ります。どのようにしてコードの変更に関連する問題を絞り込むのかという問題は残っていますが、絶対数が小さければ、false positiveが多くても全てを確認することが現実的になってきます。 つまり、 ・解析そのものではなくユーザー体験がゴールなので評価基準がそもそも違う ・(想定されるワークフローから)解析の精度が低くても実用に耐えるかもしれない という特徴があります。これらの特徴を上手く活用することで、ユーザーに価値を実感してもらえるような製品を開発することができると考えています。

How we do

これは大江戸Ruby会議での松本のトークの写真です

Ruby biz Grand prix 2016では特別賞を受賞しました

Siderではオープンソースで開発されている解析ツールの開発者との関係を重視しています。私たちも解析器を開発していますが、オープンソースで開発されている解析器の役割はまだまだ大きく、問題の修正や(私たちにとって都合の良い)新機能の追加など、仲良くしないといけません。 また、Siderの利用者になる可能性がある、開発者のコミュニティとの関係も重要です。勉強会やカンファレンスに参加・登壇することや、スポンサーとして経済的なものを含む様々なサポートを提供しています。こういった活動を通してSiderの存在を理解してもらい、フィードバックをもらって機能を改善し、利用者の獲得を目指しています。 このように、社外のコミュニティとの関係を保つために必要なもろもろは、業務の一部として認識されています。金銭的・時間的な負担を軽減できるよう、会社として最大限のサポートをしています。 例としては、2017年のRubyKaigiには、Siderから3名が参加しましたが、参加費・交通費・宿泊費は会社負担となっており、RubyKaigi会期中は勤務したものとして取り扱われました。(というと、実はちょっとウソがあって、スピーカ2名とスタッフ1名の参加だったため、参加費は結局負担していません。) 他に一般的な待遇に関するような話をしておくと、我々はかなり厳密に裁量労働制を適用しています。10時から19時が標準的な勤務時間として定義されていますが、別にこの時間に仕事をしていないといけないということはありません。例えば、以前は11時に朝会をしていましたが、11時に出社するのが嫌な人がいたので15時になりました。(つまり15時に朝会が開催されています!) リモートワークも認められており、Slackで一言報告してもらえればそれでokです。(もしも報告がなかったとしても、それだけでは多分問題にはなりません。)

As a new team member

Siderのコードレビュー補助というのは、技術的にはプログラムの検査です。型やフロー解析の技術を活用して、一緒に便利なプログラム解析器を作りましょう。作った解析器は適当なライセンスで公開・配布して、その分野での覇権を狙います。(Siderの中だけで使うようなことは、現時点では考えていません。) ひとまずは、私が開発しているQuerlyの機能強化や、同種のツールをRuby意外の言語への展開をやりたいと考えています。Ruby向けの型検査ツールSteepの開発を手伝ってもらうのも一つのアイディアではありますが、型検査はユーザーに手元で実行してもらう方が良いと思うので、現時点ではあまり考えていません。 ・Querly https://github.com/soutaro/querly ・Steep https://github.com/soutaro/steep 他に良さそうなアイディアがあれば、提案してもらえると良いです。 解析ツールの実装は好きな言語でやってもらえば良いと思います。「好きな」というのは、OCamlやHaskellを念頭に置いていますが、もちろんPHPでもPythonでもScalaでもなんでもかまいません。SideerではこれらのツールはDocker経由で実行されているので、Dockerイメージを作れる状態であれば、開発環境は問いません。他のユーザーに配布するときには、少し問題になりますが、それはそのために都合が良いものを選ぶのが良いでしょう。最悪、Dockerで良いと思っています。 ちなみに、上に挙げたRuby関連のツールは、パーサを書くのが大変なことから、Rubyで実装しています。 「一行が長すぎます」とか「ここに括弧を入れましょう」みたいなツールを、私たちが開発する予定は今のところありません。こういったものも、実際のソフトウェア開発で役に立つという意味では価値があるとは思いますが、せっかくなのでもっと面白そうなことをやりましょう。
5 recommendations

5 recommendations

What happens after you apply?

  1. ApplyClick "Want to Visit"
  2. Wait for a reply
  3. Set a date
  4. Meet up
Job Post Features
Online interviews OK

Company info

Founded on 05/2012

1 members

  • Funded more than $300,000/
  • CEO can code/
  • Funded more than $1,000,000/
  • Expanding business abroad/

東京都渋谷区猿楽町2-13 メッツ代官山 5F