小さいモジュールに分割しまくる時の気持ち

最近、業務と趣味の副産物で、一日に1~2個のnpmモジュールを作っている。基本的にGithubで公開している。 node界でそういうことをしているのは主に substack (James Halliday) 氏だ。

趣味と仕事の横断

自分は基本的に、仕事で使うテクノロジーと趣味で使うテクノロジーを合わせていることが多い。会社ではツールを作っていても家では同じテクノロジースタックでゲーム作ってたりする。 最近だと mizchi-sandbox/ar2 がそれに該当する

会社のコード、自分はあんまり家に帰ってまで触りたいという気持ちがあんまりないんだけど、どうせ家でもコード書いてて、業務中のコードを切り出してOSS化してあると家で触るモチベーションになって便利。

趣味でノウハウが溜めて、業務にフィードバックするというループに載せることで、26歳としてもそこまで高くない社会人としての自覚をコーディングに対する熱意でカバーしているような気はしている。

趣味と仕事の分離はしている。同じプログラミングじゃんといわれるかもしれないが、インド人だってカレーには種類があると言いはるわけで、そのようなものだ。

飽き性に優しい

自分は糞コード耐性が低くくて、自分で書いたコードでさえ我慢できなくなって投げ捨ててしまうことが多い。

目的がはっきりした小さな単位で切れていれば、熱意が復活した時に手戻りが少なくて良い。

最初は誰も気にしてないし、ドキュメントもテストも必要になったら書けば良い

と最近気づいた。バージョン打つにしても0.1.0までは自由にして良い。とにかく公開されていること自体に価値がある。書き方を忘れても自分のGithubを探せば出てくる。逆に言うと、0.1.0 つけた瞬間に後方互換性を意識する必要がある。

自分が書くコード、ニッチでエッジだという自覚があり、公開しても稀にしか使われない。正直自分でもあんまり品質が高いコードだとも思っていない。というか品質が高いコードを提供するのはコストがかかるし、徹底的な習慣化か、適度に手を抜くかが必要。

とはいえ、コードにコメントを書く目的でよく言われるように、明日の自分は違う自分なので、明日の自分に向けてドキュメントを書いてる。せめて俺ぐらいは使って欲しい。その思いすらよく裏切られるのだが。

よく使われるモジュール、実装力の問題もあるが、センスの問題も大きい。

モジュールに切り出す基準

  • 再利用性があること
  • 単機能であること
  • 二度は書きたくないコードであること
  • 業務ドメインとは無関係であること

たとえば50行しかないコードでも二度目がだるいような再帰アルゴリズムとか入ってたら独立させていいと思う。

OSSにする過程である程度きれいなコードしてテスト書く圧力が発生するし、小さなモジュールに分割するという行為自体が一種のリファクタリングでもある。ドキュメントも書きやすくなる。

たとえばこの前作ったA*の最短経路探索のモジュールは、あんまり何度も書きたい感じではなかったので切り出した。

https://github.com/mizchi/path-finder.js

ベンチャーOSS

OSS、ビジネス面でのメリットもあって、ベンチャーだと倒産や買収時にそれまでに書いたコードが契約によっては自由にできなくなる可能性があり、それに対する防衛的な意図もあったりする。ってのは投資家の手前だったり個人の雇用流動性を高める言い訳として認識される可能性もあるので、あんまり声を大にして言う人少ない気がするんだけど、前職・前前職でも一般的な認識だったので、たぶん、やっぱりそうなんだろう。

便利なツール

  • hub: 'hub create mizchi/foo-bar' でリポジトリ作ってそのままpush
  • gibo: 'gibo Node OSX Ruby > .gitignore' でgitignoreを作る
  • npm: 'npm init' でpackage.jsonを作る

ポエムはブログでやる。