OSSの始め方と心構えと対策


OSSでコントリビューターになって、ドヤりたかったというのが、OSSを始めるきっかけでした。
しかし、今となってはどうやってドヤればいいのか分かりません。

そんなところでOSSのメリットや取り組み方、そのときにやった僕なりの工夫という順で示していきます。

## OSSのここがいい！！

### キャリア

OSSをやることでエンジニアのキャリアとしてプラスになります（多分）。

OSSのコントリビューターになるということは、エンジニアとしてそのバッジを胸にするということです。

そのバッジが多いほど強いやつに見られます（多分）。

ちなみに、噂によると日本人でOSSをやっている人は少ないらしいです。

### 英語のコミュニケーション

たいていのOSSのでは、海外のエンジニアとコミュニケーションをすることになります。

日本では英語を使うタイミングはほとんどないので、そういう機会を得られるというのは、OSSならではです。


### 貢献できる幸せ

アドラー心理学では、他人への貢献感が幸せに繋がるといいます。

OSSをやるというのは、世界で使われるソフトウェアの開発をするということです。

OSSにはアドラー心理学でいう、貢献感と幸せがあります。


## OSSのやり方

###  プロジェクトを見つける

プロジェクトを見つけることからですが、一番ここが難しいのかもしれません。

まず、どう探せばいいのか分かりません。

でも、もう悩んでも仕方ないので、なにかテキトーに選んでいいです。

僕の場合は、今持っているプロジェクトでPHPMailerを使っていたので、PHPMailerを選びましました。

https://github.com/PHPMailer/PHPMailer

### どう貢献するかを決める


プロジェクトにはいろいろな貢献のしかたがあります。
例えば、ドキュメントの翻訳や、バグの報告、issueの解決、とかです。


僕の場合は、プロジェクトにあったissueの中から、テストカバレッジの改善というissueを選びました。
これを選んだ理由は、２つです。

* カバレッジのテストには、前提知識はあまり必要ない

* テストのコンテキストを理解した上の改善ではなく、あくまでもカバレッジ優先 





## コミットする
あとは決まったらやるだけです。
テストのカバレッジを上げることだけに集中してやりました。

今回のissueはあくまでも、今回のissueはカバレッジの改善でした。

なので、カバレッジ優先を念頭に取り組みました。

ただ、PHPMailerは、名前の通りメールを送るものなので、メールを送ることを踏まえたテストをしないといけません。

しかし、ラッキー？なことにメールを送るのなら、このへんはテストするだろう、というところが、テストされてなかったので、まずとりあえずそこを埋めるようにしただけでも、カバレッジは上げることはできました。

また、カバレッジなので、リフレクションを使ったりしてカバレッジをあげていきました。

そもそもテストとしてどうなの？というのは確かにありますが。
カバレッジだったので（言い訳）。。。


### 苦労した点

#### TravisCIの結果と、開発環境で再現できない

開発環境で通るテストも、TravisCIでは通らなくて苦しみました。
しかし、手元でTravisの結果を再現できないのは、まああるよ、とのことでした。

この点には、そのあとコミュニケーションをとると、こんな返事がありました。

そんなもんなのね。

![qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/254666/da886097-9afd-ea0f-6428-e608b7b1a842.png)


#### コーディングフォーマットが違う

僕の書いたコードは、PHPMailerのコーディングフォーマットに則っていないことで、Travisから怒られるということがありました。

これを直すのがまあ、めんどかったです。

プロジェクト毎にこういうルールがあると思うので、気をつけましょう。


![qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/254666/434ca702-f48e-30d1-1ef9-7b19bc3d625c.png)

よくみたら、最初に注意しているという。。。。

![qiita3.png](https://qiita-image-store.s3.amazonaws.com/0/254666/1da668db-fe45-8be6-6d68-b475c945ee36.png)



## PR申請 → マージされる

Travisのテストが通ると、正式にPRが申請されます。
あとはレビュアーのレビューを待ちます。



そして、テスト後のレビューは特に指摘はありませんでした。

そして、このとおり。これを待ってました。


![qiita4.png](https://qiita-image-store.s3.amazonaws.com/0/254666/b51fc538-8af5-e948-9e1f-03ce169fbe83.png)



今では、僕のリポジトリにはprivateからPublicになったPHPMailerがあります。


（これはやったね。でいいすよね？）

<img width="329" alt="スクリーンショット 2018-12-17 23.06.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/254666/50308763-ef9f-d3f4-4302-2e5cf44fa20e.png">




OSSにおいて、英語がハードルに感じる人もいるかもしれませんが、そんなことありません。
僕もそんなに英語ができるワケではありません。

その証拠に、今回載せたやり取りはかなり拙い英語だったと思います。


（やり取りをしてくれたマーカスが優しかったというのもあるかもしれませんが。）


ということで、OSSはまたやろうと思います。



## おまけ → 工夫した点

ここから以降は、ある意味おまけです。

怠ける僕を律するための工夫や、わからないときの対策を書いていきます。

これからOSSをする人の助けになるかもしれません。


### メンタル面の工夫

* 毎日同じだけの時間をかけること

* 「スタンフォードの自分を変える教室 スタンフォード　シリーズ/ケリー・マクゴニガル」では、なにかをするには意志力とあります。
僕は飽きやすい性格なので、努力を当たり前にする仕組みを作りました。


#### 当たり前の仕組み作り

#### やったことではなく、やった時間でこなす

「仕事に追われない仕事術 マニャーナの法則・完全版/マーク・フォースター」では、やったことでやめると、終わったという事実が心に刻まれる、とあります。

なので、キリの良いところであえて終わらないようにしました。
キリよく終わりそうなときはあえて、手を付けるようにしました。



#### ハッタリ作戦

僕がやるつもりのissueで、誰かに先を越されるのは嫌だったので、先に「俺は少しできちゃっている。」みたいなハッタリを言って自分を追い込みました。

「ハッタリ」を噛まして、自分の逃げ道をなくしました。

ただ相手からしたらハッタリですらなかったかもしれませんが、自分に対してのハッタリにはなりました。

僕はこれくらいしないと、OSSを途中で諦めてしまうかもしれません。

諦めたくなかったのでハッタリをかましました。


#### 分からないことは、聞く

当たり前ですが、分からないことは聞きました。
僕はまずgithubの使い方もよくわかっていなかったので、そこから聴きました。

それから、PRのしかたとか、わからないことはとにかく聞きました。


<img width="801" alt="スクリーンショット 2018-12-17 23.07.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/254666/9f322ca4-12b3-6d22-8ecb-7be4d1171b5a.png">


聞いているうちに英語でコミュニケーションするのが楽しく感じました。