OSSを理解するために自分こんなことをやっていますということについて

2 min read読了の目安(約2300字

はじめに

OSS(オープンソースソフトウェア)についての心構え(理解)を今日は書いていこうかなと。
ちなみに今回述べるOSSは自分がJavaScriptやTypeScriptなどを中心に色々とプロダクトを作っているのでそれら周りについてが話の争点になる。
フレームワークも当てはまるし小さいコンポーネントも当てはまるが、具体的に何がというよりも抽象的なOSSという話であると認識しておいてほしい。

ざっくりと書くとnpm installを使うならば使ったものに対してある一定の理解および貢献をするべきだなと思っている。
もちろん理解をしなければそもそも意味はないけれども、貢献については様々な方法がある。
issueを立てる、プルリクを立てる、はたまたOSSを自分で作るなどなど。

そこで自分がどうやって理解を深めるかについてを今日はまとめていきたいと思う。
貢献するとかOSSを作るとかについてはまた後日。

自分なりの理解するための手順

理解と言っても大きく意味は異なる。
単純に使えればいいのか、もしくは貢献に繋がる話だが中身をしっかりと理解して貢献をすることが出来るのかとパッと考えただけでも2通りある。

単純に使えるかどうかというのは人によってはHello World的なのが作れればOKということもあればそうでないこともあるので言及しないとして、自分はどうやって中身を理解しようとしているのかということをまずは書いていきたいと思う。
もちろん人によってはそれだと中身を理解していないんじゃないの?と言われることがあるかもしれないけども。

ちなみに自分は一発で理解できるようなタイプではないので、かなり泥臭い方法で理解をしようとすることが多い。
あくまで一個人の意見として参考にしてもらいたい。

1.ドキュメントを読む

これは至極単純当たり前な話。
読まないとそもそも何をどう使ってよいのかわからないのでまずは読みましょう的な。
READMEでもいいしドキュメント用のWebサイトが用意されている場合がある。
一度読んだだけではわからないし眠くもなるけど一通りまずは目を通す。

2.プロダクトに実装してみる

とりあえず読んだことだし実装してみるといった感じで手を動かしてみるとよい。
もしくはexampleとかがあるものも多いので、exampleを動かしてみてもよい。
そうすることで先ほど読んだ内容が徐々に理解出来始める。

ちなみに実装していく上で詰まってしまうことが多々ある。
その際にはIssue内を検索するなどをすると意外と誰かが使い方教えてよみたいなIssueを立ててたりするので参考になる。

さらにそれでもダメだ〜っていうときにはソースコードを読むのが大事。
躊躇わずに読み進めていくと自分の知識にもなるし理解は一気に深まる。

3.変数などパターンがあるものはなるべく色々と試してみる

実装したものないしはexampleにて試せるものはひたすら試していく。
もちろんOSSという意味でのReactやVueなどフレームワークに関しては全てのパターンを試すことはできないが、画像を表示するようなコンポーネントやパーツなど部品的なものは色々と試してみるとよい。
この数値やプロパティを変更したら見た目どうなるのか?実行される場合どうなるのか?
ログを仕込んだりして中身がどう変わっていくかなども見ていくと理解が深まりやすい。

4.メモを残す

これは2と3を行っている最中にやるべき作業である。
このライブラリを導入してみる、他にはこういう候補もある、とりあえず実装してみたがここが足りない、これはどうだこうだなどなど。
プロジェクトのREADMEでもよいが、ツイートにツイートをぶら下げていったり、ZennのScrapなどは特にメモを残すということに最適なんじゃないかなと思う。
こういったメモがあることで後日見返すなどの際にとても参考になる。

5.ブログなどに書いてみる

4で作成したメモを元にブログで使い方を記していく。
その際の文体としては別に何でもよいし、メモの延長線上でも全然問題ない。
あくまで自分の理解を深めるためのものというぐらいの認識であればパパパッと時間をかけずに書くことができるので。

もし余力があれば自分でGitHubにリポジトリを作成してみると、2回目の実装ということで理解が深まりやすい。

さいごに

こういう感じで理解をしていくということが多い。
もちろん全ての工程を絶対に行わないといけないわけではないし、何ならソースコード読んではい終了みたいなこともある。
個人的にはメモ(Scrap)を残すということが一番理解が深まるのでこれだけでもやってみるといいんじゃないかなと。

ちなみに理解が深まったところで何がどうとかってぶっちゃけ何もないと思ってる。
使えれば何でもいいんだけど、ただ使えるだけだとOSSがバージョンアップした際に対応できないとかもあるし、怪しいOSS的なものを使いたくもないわけだし。
それに今度書くOSSへの貢献云々も含め自己研鑽みたいなものだと思うのでご自由にどうぞと言いたいし、けど自分が採用する立場だったら何かそういうことをやってたらプラスに捉えたいよねと思いたいというのも事実。  
あくまで自分が思い描くソフトウェアエンジニアがどういう人間か、これが大事かなと。