オレオレツール駆動開発

休日のDIY…ズバリ、「オレオレツール駆動開発」みたいなものは、最強の技術向上手段だと思います。

オレオレツールとは、「知った技術を使って、あるいは挑戦したい技術を使って、オレの為のオレのツールを作ること」「他の方が作ったプログラムをオレ流に改造して、オレの為のツールにすること(一応リスペクトでね)」です。

で、ちょっとよく出来たり、これは良いかなと思ったものはパブリックに公開します。

基本的に私は頭が悪いので、頭の良い凄腕の方のお話を引用します。 結果論なのですが、私は滅茶苦茶、今のテンションでは共感しています。

試したいから、作る。ghq、goreの作者motemenの開発は「自分本位」で駆動する

基本的に僕のツールは自分で使うために作ったものを公開している感じなので、あんまり人に使ってもらおうとは考えていません。ただ「良いものができたよ」って周りに自慢したいから公開しているだけかもしれません(笑)

世界のオープンソースRuby開発者まつもとゆきひろ

開発にあたって大事にしてきたことはあります。それは、自分が欲しいものを作ること。僕は短気で(笑)。だから、自分がイライラしないものを作りたかった。シンプルで、わかりやすいもの。誰に気に入ってもらおうとか、使ってもらおうとか、そういうものではない。自分が使いたいもの。誰かのために役立つという利他的精神は、ないわけではないけれど、自分ではあまり意識してないですね。それよりも、圧倒的に自分がイライラしなくてすむという利己的精神のほうが強い(笑)。

あー、素晴らしさは別として、解釈一致になるんですよなあ。

勿論海外の人はちゃんと分かってるのですが、そもそもビッグテックを中心に、ことアメリカ人と言うのはオープンソース製品を「ウチの好みじゃねえ」ということで内心PRするそうです。そういうハングリー精神はある意味大事なのでしょう。

そもそも基本的にプログラミングが本当に好きな人って、多分行き着く先は同じなんでしょう(笑)

これの効果として、「色々な人のコードを読む力が上がる」「知らないものの根っこを知れる」「知らなかった作り方を知れる(そしてパクれる)」「オレ流の実装はするが、他人のコードを沢山見るのでオレ流を他人に何でも押し付けようとしない寛容な気持ちになれる」と言うものがあります。

そして何より、楽しい!

あ~、最高のストレス解消手段ではないですか。

リリース

私の公開しているツールはCLIツールが主体となっており、基本的にはリリースに流してます。それがたとえ自分の為のものだけだとしても。

これは「プログラムって使えなきゃダメじゃん」みたいなポリシーによるものです。なので大体のツール・ライブラリで何かしらのインストールが出来るようになっています。

正直これって承認欲求みたいなもんです。自分も適当なOSSとか試して「これって面白いな!」って思うことが多いので、見返りはなくて良いけど、誰かがそう思ってくれたら良いな、って感じ。

でも驚くことにね、これやってるエンジニアさんって滅茶苦茶少ないんです。

GitHub持ってる人は幾らでもいるけど、こと日本のプログラマって「どっかのハンズオン」とかを真似しただけのリポジトリが多いんです。それでコード乗っけただけ、とか。そんなパターンは多い。面白いことに、渋谷や京都の凄腕さんや、意欲のある大学生はプロダクト志向で、みんなやってるのね

とりあえず私はそこに気付いたので、そこは真似するようになりました。

実のところ就職問題もあるので私のポートフォリオページには一応作例と言うのを載せてるんですが、正直、私の場合は基本全部「オレオレツール」で、それ目的ではなく単に好き勝手作ったものだったりします。1年半くらい前くらいまでは「専用のポートフォリオって必要だよな…」と思ってたけど、今は「それイラんよな」って思っています。

だって、「就活の為に専用のポートフォリオ作るって、“普段コード書いてないんです”、“研究していないんです"って自白してるよーなもんじゃん」って思ったのですね。なので「ありのままでイイかな」みたいに感じています。

知らず知らずにこんなクセがついたのも良い所だと考えています。

良くないことは

というか、ただ私がダメな点です。

ドキュメントをシッカリ読まなくなっている

センス・オブ・ワンダーで書いている。これはダメ。「興味とテンション」が優先してただ面倒くさがってるだけです。使って覚えちゃえ戦法。 ちゃんと読む習慣も身に付けていかないと。おかげで「内部実装の定義を掘る」とかは更に出来るようになってますが。

メンテする気がない

今のところ他の方のPRを積極的に受け入れる気になってなく、投げやりなアウトプットとなっています(ただ、PR自体はないのですが、数は非常に少ないながら、色々な方の感想を通してバグなどを修正したりはしています。こんなことがあるから「公開するのって大事だな」って思いはじめています)。

DependabotとかCIを仕込んでますが、要は「面倒くさいから大事なとこだけ自動化しておく」と言う、本音は実に怠惰なものです。特に依存関係のフレッシュさを重視しているのは、環境差異とかそういうので「それ開発できねーじゃん」「どんどん古くなって手付けられなくなるよ」みたいな苦々しい思い出とか、一応過去の何回かの箇所であるんですよ(笑)

で、GitHubなのでマージコンフリクトは勝手に判定してくれるので、スマホの通知と一緒みたいなもんかな、ってことで保守してます。

単純に言うと、「オレもほとんど公開してないけど、色んな人のツール好き勝手に実は改造とかやってるぜ!面倒だからクローンとかフォークして使ってくれよな!!」みたいな適当さです。これを「器量が狭い」というのだと思います。

また、コードも好き勝手すぎて、「他の人の為の保守性のあるコード」みたいな反動でやってるところもあって、もう「好き勝手に書いちゃえ!このリポジトリで指図は受けねえぞ!気に入らなきゃ好き勝手にあんたの所で改造しまくってくれ!」みたいなところもあるのも確かです(これ、「大事にしてきた」つもりだけど、もっと利己的であってもちゃんと他人に通じるコード感覚を養うべきだよ→私って話ね)。

最近はしてないんですが、PRとかもするので、酷い図々しさですね(他の方に干渉する場合はもうちょっと色々考えます)。自分に自信がないせいだと思います。もっと自分に自信を持って、色々な方の指摘に寛容な気持ちできちんとツールを整備するような器量が持てるようなスキルを持ちたいです。

ビジネス意識がない

個人開発で稼ぐ、ユーザーを増やす、とか、そんな意識がまるでありません。「好きに使ってください、好きに作ってるんで、参考になったらメッチャ嬉しいよ」みたいな感じ。

ゲームとか作ってる人はもうちょっと、特に上手い気がしますね。 ちゃんとニーズをピタッて当てて、「買いたい!」とまで思わせるような能力やアイデア性みたいなところ。こうしたら便利だよねって思ってるので(例えば、公開リポジトリに限っては、多くの部分がコメント等で英語になってるのはリファレンスになりやすいからってことを期待してる)他者のことをもっと意識して、ってことは大事なんだと思う。

全体的に言って、「協調性がないよね、臆病なんでしょ?一人よがりじゃない?」ってもどかしさがありますね。とは言え、「自分のリポジトリを表に出す」みたいなことはやれなかったくらい臆病なタイプで、昔より成長してきたかな、と思っています。

今後、時間はかかると思いますが、チーム開発スキルなどを付けてく中でもっとセンスを磨いて、次のテンションにたどり着ければと思います。