8月31日、木曜日ですね。
時間は朝9時35分になりました。
はい、おはようございます。ひめみのきーすことくわはらです。
ではでは、本日も朝活動を始めていきたいと思います。
今日はですね、あんまり記事をインプットしなかったり、ちょっと技術的な勉強できてないので、
たまたまいろんなところでOSSのワードを目にするようになったので、
OSSについて思うことをちょっとタラーと喋ろうかなと思っております。
はい、OSSですね、オープンソースソフトウェアの略ですけども、
僕もですね、OSSをいくつかやったことあるというか、
自分でもライブラリを作って、NPMに公開したことがあります。
NPMでググっていただければ、たぶん、
僕のアカウント名、keethで調べていただくと出てくると思いますけど、
今のところライブラリおりいくつだったんだっけ?
確か8つぐらいNPMに公開してたような気がします。
まあでも、最初はですね、自分の勉強のためですね、
JavaScriptが大好きだったので、今も好きなんですけど、
ライブラリを作って公開するっていうのをやったらどうなんだろう?
っていうのが気になってやってみたっていうところですね。
っていうのと、単純に僕もウェブ開発をやる中で、
OSSにすごく恩恵を受けたと言いますか、
助けられたっていう経験が本当に大きいので、
自分も恩返しをしたいなっていうのもあるし、
未来の技術者のために、
自分が何か便利になるものとか、
役に立つものでも少しでも作って公開をしたいと思いましょうとかですね。
で、やってみたってところです。
一番最初に僕がNPMに公開したのは4年前で、
これこそ本当にまさに勉強ガテラ作ったもんですね。
で、僕はCLIが実は結構好きで、
コマンドラインから何か叩いて、
遊べるものないかなっていうので調べていって出したもんですね。
その時に作ったのがJAG Greetingsっていうもので、
名前の通りですね。
日本語の挨拶文を、
ただただCLIにコマンド叩けば表示されるみたいなもんですね。
はい、いわゆる四季の挨拶ってあるじゃないですか。
明けましておめでとう、今年もよろしくみたいなやつからスタートして、
初中お見舞い申し上げますみたいな。
日本ならではのそういうイベントに出てくる言葉があるじゃないですか。
春夏秋冬のものとか、あと年末のものとか、
あと感謝とか謝罪みたいなやつがあるんですけど、
まあそれを叩いたら言語でバッと出てくると。
で、プラス、それのなんか方言を確か僕は作ってた気がしますね。
なんだっけ、関西弁とか沖縄弁とか、あと京都とか、
あと広島弁とかでそういう日本の言葉が出てくるみたいなのやってたりしましたね。
あとはランゲージで英語と、あと中国語かな。
3個、3言語でやってたみたいなのを最初作ってたんですね。
他にもまあいくつかやってますね。
コマンドランキングとか、自分の叩いたコマンドをバーッと集計してきて、
単純にランキング形式表示するだけのものとか。
そんな感じでライブラリいくつかNPMにアップしたことは実はあります。
やってみて思ったのは、やっぱり自分でOSSを作るとやっぱ設計力がすごく身につきますね。
アプリケーション開発でももちろん設計力が身につくんですけど、
アプリの設計とツールの設計って結構観点が違ってですね。
これは本当に面白いし、なんか頭では分かってても自分でやってみると
いろんな発見があって面白かったです。
なおかつ、ライブラリとかそういうツールを作る方と
それを使う側、現場で結構ギャップがあったり、
このライブラリここがいけてないよねとか、
この機能が欲しかったけどそこがないよねとか、
結構そういう摩擦じゃないですけど、
使う側の現場の人と作る側で思想が違うことって本当にあるんですけど、
これは身で実感しましたけど、まあそうなるかなってすごく思いました。
ツールの観点でどういうところに重きを置かなきゃいけない、
どういうところに関心を置かなきゃいけないっていうのは、
アプリケーション開発と全く違うところに関心が強いので、
まあそれは使う側のことはもちろん僕らを考えて作ってはいますけど、
まあずれるのは仕方ないと思いましたので、
なるべくでもアプリケーション開発をした方が、
改めてOSSに貢献するところはすごくいいと思います。
そうすると現場との摩擦も少なくなったものが作られる可能性があるので。
あとは僕はNPMに公開しているので、すごくNode.jsの勉強にはなりましたね。
結局NPMパッケージって作られるのはJSとかNode.jsで作られるものなので、
僕は特にCLIで動くものを作ったので、
Node.jsの勉強になったというところはありますけど、
作るときにやっぱり自分自身の設計力とか知識だけで作ろうとしても限界あるので、
やっぱりいろんなライブラリーのソースコードを読んだりとか、
いろんな方々のGitHubリポジトリを見させていただいて、
こういう書き方あるんだとか、こういう設計力があるんだっていうのを本当に参考にするというか、
ものによってはほぼ丸パクリしたようなところも正直あったりはします。
あとは最近はCLIを作るためのライブラリーとかもあったりするんですよ。
コマンド一発書いたらOSSを作るためのテンプレートみたいなのがバーンと作られますみたいなものも
NPMとかに出てたりしてて、本当そういうの助かりましたね。
今までそういうの全部手作業で作っていたんですよ。
僕は当時Gulpっていうライブラリーが好きで、Gulpベースで作ってたんですよね。
途中でWebpackとかあとRollupか、ライブラリーなのでRollupで作り直した気がしますけど。
最初はGulpから作ったんですけど、それも全部Gulpファイルから1から作ってたんですけど、
まあやっぱりだるいなっていうのがあって。
最近だとやっぱりTypeScriptを対応したいなっていうのもあるんですけど、
TypeScriptをまた1から入れるのも正直面倒くせえなっていうのがあるので、
そういうのをボイラープレートでパッと用意してくれるライブラリーがあるっていうのはすごくありがたかったです。
やってみると結構いろんな知見が溜まっていきますね。
それはやっぱりアプリケーション開発をやっていく中では、なかなか接点が持ちづらいものかなと思いました。
アクセスする可能性はありますけど、でも確率はかなり下がるなっていうものがあるので、
OSSに自分からコミットするっていうのはすごく大事だなと思いました。
まあもちろん有名なライブラリーにコントリビュートするっていうOSSですね、っていうのも全然ありですけど、
まあそういうの苦手だというかやっぱり怖いなって方はまずは自分で作ってみて、
NPMでもいいし、RubyのGEMでもいいし、何だっけ、PythonのPIPでもいいですし、
なんかエコシステムのどっかに上げてみるっていうのが1つありかなと思いました。
ただですね、やるのは本当に構わないし、僕は全然そういうのをお勧めする派なんですけど、
勉強がてら作ったもので、割と学びになったっていうのがあれば消すというか、
アーカイブしていただくのが一番いいかなと思っています。
それはですね、業界としての検索性が悪くなるからですね。
いわゆる雑音が増えるっていうのがあるので、あんまりよろしくないと。
本当は同じ名前でちゃんとしたライブラリーを出したい方とかもいるかもしれないですけど、
先行でそういう名前のライブラリーが出てしまったりするので、
その名前が使えないから別の名前を付けるみたいなのが結構あるんですよね。
というのもあるので、なるべくは消したほうがいいのかなと思います。
で、試しにですね、NPMサーチでホゲとかで調べたりするんですけど、
普通に出てくるわけなんですよね。ホゲも出るし、確かフガも出てる気がしますよね。
みたいな感じで。
いや、割とね、あるものはあるんですよ。
で、あとアーとかっていうのも実はあったりしてですね、などなど。
やっぱり雑音が増えるのが本当は僕はあんまりよろしくないなっていうのは、
自分で作っているのでやっぱり感じるんですよね。
なるべくはそういうOSやエコシステムの環境自体のことを意識した貢献をしていただくっていうのはすごくいいと思ったりはしました。
はい。で、あと何ですかね。
OSSって結構OSSクリエイターっていうふうに名乗っている方々。
それを本職とされている方も結構いらっしゃって。
僕は結構それびっくりしましたね。
僕が若い頃には、もしかしたらあったのかもしれないですけど、
そんなに周りにいなかったんですよね。
っていうのも僕がその事業会社にいなくてずっと住宅会社にいるかもしれないですけど、
でも最近はちゃんとOSSっていうところにだけでちゃんと食べていけている人たちがいるっていうのもすごくいい話ですね。
なんていうかエンジニアの一つの理想系ではありますよ。
自分の技術力と面白いという興味があるところっていう。
あとはエコシステムにしっかり貢献するというところで、
価値的ではあるし自分の満足度も上がるし、ずっと技術力だけで食べていけるっていうところで、
環境としてはかなり素晴らしいと思ったりはしますね。
フリーのクリエイターの方々と、やっぱりその企業に入って、
その企業の中でクリエイターというポジションがちゃんと用意されているような場所で働くっていうのと、
大体大きく二つに分かれると思います。
で、多いのは多分僕の中で全社のフリーランスの方の方が多いのかなっていう感触がありますね。
単純に僕が知らないだけで、他は全然、海外とか世界は全然わかんないですけど。
単純に僕の生きている環境の周りではフリーランスの方の方が多いなと思いました。
ただやっぱりですね、OSSだけで食べていくのは結構しんどそうだなと思いました。
普通に企業のパートナーとして入って、そういう開発のお手伝いをしながら片手間でやるというか、
結局メインのOSSクリエイターとやれている方って割と僕の中では少ないイメージがあるので、
まだまだ茨の道なんだなと思います。
まあとはいえ、オープンコレクティブとか、まあそういうライブラリへの投げ銭のサイトがあるんですけど、
そういうサイトを見ていくと結構OSSにもちゃんと感謝しているというところでお金を払っている方もいると思います。
僕もオープンコレクティブで毎月好きなライブラリに10ドルずつ課金というか、お金を投げています。
それは僕がソースコードに貢献ができないし、できないというのは時間とかリソースの問題もあるし、正直難しいと思ったりするんですけど、
というのがあって、エンジニアとして貢献できないならせめてエンジニアとして使わせていただいているというのでお金を投げているという感じですね。
自己満だったり、自己アピールみたいな感じに聞こえるかもしれないですけど、
まあでも恩恵を受けているのは本当に変わらないですし、そういうライブラリがずっと生き続けて欲しいなというのは正直あるんですよ。
というので投げ銭をしていますけど、そういう投げ銭のサイトを見ると結構お金が集まってきたりするし、
物によってはもうそのまま会社が起こされて起業したという方も全然いらっしゃるというもので、
割とでもマグチは増えてきたという印象は正直あります。OSSというのは。
まあでもこれは僕はNPMとかJSばっかりしか見ていないので、他の言語のエコシステムとか環境はどうなのかちょっとわからないですけど、
見ている限り同じような感じですね。
僕はPHPとかRubyとか触ってきたので、そういう系の言語とかライブラリも同じようなオープンコレクティブみたいなサイトで調べましたけど、
割とちゃんとお金投げられていて、しっかりエコシステムをみんなで守っていこうという文化があってすごくいいなと思っているので、
根気でそういうところにコミットしていくというのも働き方というか自分の人生の生き方の一つかなと思いました。
本職にしないにしてもOSSでやっていくとそこままなんかパイプができたりするんですよね。
そのコントリビューターとかコミッターとして入ることもできるし、コアメンバーとして招聘されることもあったりします。
僕はそのJavaScriptでRiotJSというライブラリーがあって、そこに貢献してたんですけど、
僕は実際にソースコードではなくて公式サイトのアップデートとか日本語の翻訳とかですね、
そういうのにすごく興味があったので、それのプルリクを出し続けたら日本人としてのコミッターになってくれって呼ばれたりするんですけど、
これも一つのOSSだと僕は思っていますね。
皆さんが簡単に使えるようにマニュアルとかドキュメントをしっかり整備するとか、
特にやっぱり日本人は英語が苦手な方はまだまだ多いので、そこに日本語翻訳をしていくのはすごく大事だと思います。
やっぱり昨今もそうですけど、やっぱり日本語の翻訳から、
例えば書籍の翻訳家でありませんかとか、ライブラリーとかの翻訳でどうですかみたいな話もあったりするし、
ライブラリーの公式サイトの翻訳で日本語翻訳がまだできないのがたくさんあるんですよね。
これだけ使われているのに意外とまだまだちゃんみたいなところがたくさんあるので、
そういうところから貢献していくのも一つだと思いました。
ちなみに翻訳の話は自分でしたのであれですけど、翻訳するとやっぱりドキュメントをちゃんと読むんですよ、自分で。
かつ、ソースコードレベルとかちゃんと記述内容を自分が理解できるかとか、他の人が理解できるかっていう観点で詳しく読んでいくので、
結果的にその対象のライブラリーの知識とか知見がすごい溜まるんですよね。
そういう側面もあるので、単にコードにコミットするだけではなくて、
ドキュメントの方で貢献するのもめちゃくちゃ勉強になるので、割とおすすめします。
結果的に両方、知見とライブラリーの広い視野から身につくので、そういうのもいいなと思ったりしてました。
こんな感じなのでOSSってやればやるほどプラスにしかならないなっていうのは僕の今のところの感触なので、
ぜひ何かまだやってことがない方がいらっしゃればやっていただけるといいなと思います。
最後に思うのはOSSとかそういうコミット、いろんなところのライブラリーのドキュメントでもいいしソースコードでもいいですけど、
見ていくとやっぱりちゃんと思想が最終的に現れるなってすごく感じました。
設計力とかコアなところのロジカルのところっていうのは割と似てくると思ってて、そこはまあ仕方ないと思います。
オブジェクティブにやっていくと結果そうなるよねっていうのは当然ではあるんですけど、
とはいえ最終的なAPIとしての公開の仕方だったりとか、それを使ってどうやって作ってほしいのかなっていうような
コードとしての世界観っていうのはやっぱりライブラリーごとで自然に思想が別れていくので、
ここがやっぱり面白く、やっぱり人が作るからそういう風になるんだなっていうのが見えるので、
そういういろんな楽しみ方もあるなと思っていますので、OSSやっていただければなと思ったりしますし、
僕も今後も何かいろいろやっていきたいなと思っています。
去年ですね、あまりコードを書かなくなったんですよね、本職として。
僕が会社として肩先を持ってしまって、今採用広報とかやっているので、あんまりコードを書かないポジションになったんですけど、
それを手小入れしたいというので、いくつかライブラリーのソースコードを読み始めているんですね。
去年か一昨年か合わせましたけど、ESLintってあるじゃないですか。
いわゆるJavaScriptのリンターなんですけど、ほぼほぼ世界でJSのリンターというと今もESLintがデファクトになったじゃないですか。
昔はいろんなリンターがあったんですけど、最終的にESLintが生き残ったって感じですね。
それのソースコードを読んだんですけど、めちゃくちゃ勉強になりましたね。
全モジュールの書き方がしっかりフォーマットが定まっていて、タイプスクリプトで実は書かれていない時からスタートして、今も確かTS入ってないんですよ。
なので、ドキュメンテーションですね。JSドックとかもはっきり書かれていたり、全モジュールの書き方というフォーマットが定まっているので、
結局TS書いてないんです。書かれてないけど、こういう風に書かれてるんでしょっていうのが最初からわかるんですよね。
あとはインとアウトだけをはっきりすればいいというだけの話で、それはドックを読めばわかるというので。
TS書いてなくても見やすいし、いろんな使い方とかノードJS固有のモジュールとかの使い方とかがすごく参考になったので、めちゃくちゃ勉強になりましたね。
自分で書くのもいいですし、他人のソースコードを読むのもいいですし、両方だなと思いますけど、
ちょっとでも読むとしてはハードルが高いので、しっかり時間を取らなきゃいけないので、やっぱり書くのが一番いいのかなと思ったりしました。
アンダースコアJSみたいなものだったら読書するぐらいの勢いで読みやすく、かっきり分かれているので、そういうライブラリーもあったりするので、
いろんな読み方もありますけど、読むことにすごく価値は高いと思ってますので、そういう勉強の仕方を考えていただくといいなと思ったりしました。
というところで、だらだらと喋ってまとまりもないですけど、こんなところで今日は終わっていきたいなと思います。
自分で喋っておいて、自分もまた改めてライブラリー貢献したいなと思ったので、エンジニアとしては端くれですけど、何かやっていきたいなと思っています。
終わろうとしたんですけど、一個言い忘れたんですけど、OSSの貢献するときに既にあるものとか既存で出ているライブラリーってありますけど、
やっぱりメンテナーの方が飽きてしまったり、もうメンテナーしなくなったライブラリーってたくさんあるんですよね。
いろんな諸事情もあると思いますけど、そういうのをフォークして新しく作り直すのも一つですし、
そういう方に連絡を取って、自分がこれメンテナーするんでコミッターに入れてくれみたいな貢献の仕方も全然あると思います。
僕もそれで一個だけ出したことがあったりするので、使われててすごくいいなっていうやつなんですけど、