OSSコミッターになってみよう

こんにちは、エキサイト株式会社エンジニアの伊藤(🐦 @motokiito2)です🙌

みなさんはOSSへのコミットに対して、どのようなイメージを持ちますか?

「つよつよなエンジニアがよくやってる!」

「敷居が高すぎるから自分には関係ない。。」

なんて思う方も、少なくないと思います。(自分も以前はこう思っていました)

ですが、この認識は間違っていて、きっかけさえあれば誰でもOSSコミッターになれるのです!

今回は、実際に私が最近OSSにコミットしたケースと流れを紹介したいと思います!

修正箇所を発見する

私は、業務で PHPフレームワーク Laravel を利用しています。

あるとき、いつものようにコードに対して静的解析を実行したところ、phpstanで未到達コードの警告が発生しました。

警告が発生したのは、以下のようなコードでした

        if (is_null($this->request->old())) {
            return false';
        }

return false; 行には到達しないとの警告でしたが、デバッガでは確かに到達するので、どういうことかと調べたところ、

Laravel のコード src/Illuminate/Http/Concerns/InteractsWithFlashData.phpold() は、下記のような実装になっていました (Laravel 現行バージョンでは修正済みです)

    /**
     * Retrieve an old input item.
     *
     * @param  string|null  $key
     * @param  string|array|null  $default
     * @return string|array
     */
    public function old($key = null, $default = null)
    {
        return $this->hasSession() ? $this->session()->getOldInput($key, $default) : $default;
    }

お気づきでしょうか。

$this->hasSession()false かつ、$default 引数が与えられていない場合にnull を返すことがあるにも関わらず、phpdocの表記は、@return string|array となっていますね。

要はphpdocの記述が間違っているだけなのですが、このレベルの間違いは、Laravelに限らずOSSではよくあることです。

気になる方は、自分がよく利用しているOSSリポジトリを探して、コミットログを見てみてください!

修正する

修正箇所がわかったので、修正してみましょう!

(このあたりの手順はOSSによって異なる場合があるので、READMEやContribution Guideを読んでみてください。)

修正を行うために、まずはLaravelのリポジトリをforkします。

f:id:itomoto0312:20210810181358p:plain
fork laravel

forkしたリポジトリをローカルにcloneしたら、修正用のブランチを切ります。

Laravelの場合は、Contribution Guideに

master ではなく current LTS branch からブランチを切ってね!」

と注意書きがありました。

OSSによってルールが設定されているので、よく読んでおきましょう。

ルールに従っていないと、せっかくPRを出してもmergeされずcloseされてしまいます。

ブランチ名については、Laravelの場合は特に指定がなかったので、過去にマージされていたブランチ名を参考に fixDocInInteractsWithFlashData としました。

さて、今回の修正は非常に簡単で、該当箇所のphpdocの記述を修正するだけです。

    /**
     * Retrieve an old input item.
     *
     * @param  string|null  $key
     * @param  string|array|null  $default
     * @return string|array|null
     */
    public function old($key = null, $default = null)
    {
        return $this->hasSession() ? $this->session()->getOldInput($key, $default) : $default;
    }

修正が終わったので、コミットしてpushします。

コミットメッセージも、特にルールが設定されていなければ、過去にマージされたコミットを参考にすると良いと思います!

PRを出す

修正が終わったので、次はプルリクエストを出します。

プルリクエストの記述についてもルールが設定されていることがあるので、事前に確認しておきましょう。

今回は、Laravel の Contribution Guide に従い、merge先を current LTSである laravel:8.x に設定し、フォーマットに沿って修正内容等を記述しました。

実際のプルリクエストはこちらです。

github.com

ここまでできたら、後はプルリクエストが承認されることを祈りながら待ちます。

今回の場合は、修正内容が簡単なこともあり、半日ほどでmergeされました!

あとがき

今回は、実際に私がLaravelにコミットした際の流れをご紹介しました。

今回のような簡単な修正でも、OSSに貢献することができます。

このケースを知って、OSSコミットへの敷居が下がった方もいらっしゃるのではないでしょうか!

「自分でもできそう!やってみよう!」と思う方が一人でもいてくれたら嬉しいです👍