最近したblockchain + front endあたりのキャッチアップ
友だちに誘われてBlockchainなスタートアップに入ってみたんだけど、2週間が経過してだいぶ熟れてきた。どうやって何をキャッチアップしていったのかメモしてく。
P2P 周り
Blockchainそのものの前に、P2Pって何?っていうところから理解が必要だったので軽く調査した。Datprojectのtech stackを深掘りしていくことで全体像を把握していったんだけど、一番の疑問だったネットワークへの参加部分が一番興味深かった:
合わせて @kyorohiro さんのgitbookにも助けられた。ありがたや。
ついでに、先日リリースした Node.js のための小さな package manager の depjs では、P2P network 上にある dependency を install できるように Dat protocol のサポートをした。あと、今朝 Dat project のリーダーの Max が開発チームに参加してくれたので、もうひとがんばりしていきたい。
Blockchain 周り
Web3, ethereumjs, ethjsを中心に読み進めつつ、PoW/PoSの概念やICOの仕組み、ERC20とsolc-jsとかを順番に読んでいった。今は、周辺技術のOSSにpatchを書きはじめてるんだけど、これがまた飽きない。来年末くらいまでは少なくとも楽しめそう。
自社のCrypto Currency構築
まだリリースしてないプロダクトなのであんまり説明できないんだけど、0x protocol とか SWAP protocol あたりが必要でWhite paperを読んで、実装がない部分は自分たちで実装していってる。これも飽きない。まだ実装がない分野って面白い。
Front Endそのもの
最後に仕事でちゃんと使ったのBackbone.jsだったけど、Angular2 + ngrx + TypeScript にはすんなり入れたように思う。Decoratorsの@Effectとか@Injectableが分かったあとは、reducerを中心に考えることができるようになって、自分たちのアプリに必要な機能の設計をside effectを強く意識しながら0からできるようになった。
angular-cliがpeerDepsとdepsのconflictが非常に多かったので、そのうちpatch書いていきたい。
テスト環境
Front end 周りは protractor を使うことで、わざわざ手書きで document.querySelector
とかしなくても良くなったのでe2eテストは非常に快適。Smart contract周りは、Rinkby networkに向けてtransactionするテストを書いてるんだけど、今月中に testrpc と truffle を試して徐々に移行していく予定。
まだまだできることが大量にあるからあんまり人に言いたくないんだけど、ETHホント面白い。この調子でのめり込んで、そのOSSコミュニティに貢献していきたい。
npmに変わるコマンドを作った
最近こんな記事をMediumの方に書きました。
ツイッターで報告したら、Dat界隈の人たち + npm社の人たちがRTしてくれて 20k imp くらいに。びっくり。
I just published “dep: a little Node.js dependency installer” https://t.co/9umlUvCmxq
— Daijiro Wachi 📦⛓️ (@watilde) August 25, 2017
せっかくなので日本語でも軽くフォローします。why, how, whatだけ。
npmの問題点
週次のリリースを月次リリースに変更、2年で3回のbreaking changeをしたにもかかわらず新機能は増加の一途。結果としてbug fixに時間が随分とかかるようになりました。原因は主に下記の3つがあります。
- リリース頻度の減少
- コミッター2名のみ体制
- コードベースの肥大化
この問題点については、オンラインでもオフラインでも社員の人達と話したんですが、2人体制でできることも少なく、高いモチベーションで突破するほどの余裕はなさそうでした。
その解決策
そこで、マンパワーとモチベーション、両方とも増やす方法を考えました。Publicな場で大きな議論をして社外コミッターを受け入れる方向に持っていく・いっそforkして人を集めるように宣伝していく、などの方法を思いつきました
- ガバナンスを変える提案を投げる
- forkする
が、0から考えて作り直すの楽しそう、と興味が出て実際に作ってみました。
- 作り直す
アウトプットについて
それがこちら、depです。goのpackage managerと名前かぶったらしいので、そのうち適当なものに変えます。
コンセプトは、モジュールのエンドユーザーが必要とするnpmの最小単位を作る、です。ここでいうエンドユーザーとは、モジュールは利用するけど、自分で作ったりはしない人、です。
そのため、3つのサブコマンドしかありません。
- install: モジュールのインストールを行う。
- [WIP] lock: shrinkwrapをする。npmとの互換性をもたせるべく開発中。
- run: package.json の scripts にあるスクリプトを実行する。
この3つの機能にだけフォーカスして、issue reportの度になるはやでbug fixして随時リリースしていくフットワークの軽いpackage managerを目指していきます。
実験的な機能
ついでに、みなさんご存知 Dat protocolのサポートも実験的にしてみました。P2Pなdat networkをmodule registryのように使えます。
あと3つほど実験的な機能を予定しているので、shrinkwrapの実装が終わり次第、追加します。お楽しみに :)
アムステルダムにある会社を退職してきた
1年と10ヶ月くらい勤めた会社を退職した。めちゃ楽しかったー!
ついでに ZZP になるべく会社を開いてきた。ZZPは日本で言うところの個人事業主的なポジションで、OSSやりながらフラフラしてる友人はみんなそれでうまくやってるので参考にしてみた。時給が良い仕事を短時間でしっかりアウトプット出しながら、OSSにもーちょい時間使えるようにしてくー。
アムスで会社ひらいてきたー。のんびりやっていき。
— Daijiro Wachi☔ (@watilde) August 9, 2017
にしても、もっと早く次に進むはずが、だいぶのんびりしてしまった xD
初年度はライフ寄りのwork-lifeバランス感覚を獲得して特に何もしないで終了。ただ、何もしてなくても住んでるだけで英語とオランダ語は生活に困らない程度に伸びて、当初のゴールだった “英語での議論をリードする” ってのは意外とすぐできるようになったように思う。それと同時に、次に何をするかの選択肢が急に広がって、その全体像に圧倒されてたら1年がすぐに終わってしまった。英語の情報量に溺れる。
同時期に、一通りライフ側でやりたかったことを頑張ってやってみたんだけど、模索が多くて不安感が増すばかり。そんな中でも、ずっと会ってみたかった人たちとは一通り会えたので一旦は一区切りにできそう。次は、自分なりにワークの方を一歩だけ進めて理想の生活ができるように、ほどほどがんばろうかなぁという感じ。
もう少し詳細。
最前線のOSS(in Node.js)を仕事にすることが当初のゴールだったんだけど、いくつかの会社から打診あったにも関わらず最終的に社員になるには永住権ないとダメって場面に出くわしすぎて直接雇用は一旦は諦めることにした。そこで、self employedに切り替えてcontractorとして何かしら可能性があるかを模索しつつ、自分のプロダクトに最低でも週1使ってフットワークをもう少し軽くしていく方向に軌道修正した。永住権に関しては、もーちょいこの国で真面目にしてればもらえそうなので、そこからはEUの支社を狙っていくことが容易になる。
永住権は5年の連続滞在が条件になるので自分はもはやオランダを出る理由が少ないわけなんだけど、もし今から改めてEU進出狙うならフランスを選ぶ気がする。せっかくなら第二外国語は多くの人に使われてる言語の方が良いし、刺激的な人がいっぱい住んでる。アムスにもロンドンにも電車で行けるし、国際空港も強い。もちろん最初は苦労すると思うけど、もう少し可能性を広げられる。
人よりゆったりした人生を歩んでる自覚はあるんだけど、ここからさらに時間がゆっくりになりそう。来年も落ち着かないで見えないベストを手探ってるのかなぁ
ほしいものリストとかはないんだけど、最近これ作ってるのでJavaScript好きな人はチェックしてみてくださいな!需要を考え抜いて、小さなnpmを作って磨いて、Node.jsにbundleされるよーに工夫を楽しむのマイブーム。