個人で作っているgoのプロダクト by zchee編

612 views

Published on

golang.tokyo#8

Published in: Internet
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
612
On SlideShare
0
From Embeds
0
Number of Embeds
71
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

個人で作っているgoのプロダクト by zchee編

  1. 1. 個人で作っているGoプロダクト golang.tokyo#8 by zchee
  2. 2. Souzoh confidential and proprietary Who? 2
  3. 3. Souzoh confidential and proprietary 自己紹介 ● Koichi Shiraishi (@zchee) ● GitHub: zchee ● Twitter: _zchee_ ● Go シカカケナイ ○ Go歴2年 ○ エンジニア歴1ヶ月 ● Mercari / Souzoh ソリューションチーム所属 3
  4. 4. Souzoh confidential and proprietary プロジェクト / コントリビュート ● github.com/zchee/resume ○ zchee/docker-machine-driver-xhyve ○ zchee/nvim-go ○ nsf/gocode ○ moby/hyperkit ○ docker/machine ○ gperftools/gperftools (TC Malloc) ○ tmux/tmux ○ google/flatbuffers ○ etc... 4
  5. 5. Souzoh confidential and proprietary 個人で作っている Goのプロダクトの紹介 5 ● docker-machine-driver-xhyve ● nvim-go ● clang-server
  6. 6. Souzoh confidential and proprietary zchee/docker-machine-driver-xhyve 6
  7. 7. Souzoh confidential and proprietary みなさん Docker for Mac 使ってますか? 7
  8. 8. Souzoh confidential and proprietary zchee/docker-machine-driver-xhyve ● 初めてのOSS/Goプロジェクト(しかしあまりGo関係ない) ● interfaceわからん・Cわからん、ましてやcgoわからん ● しかし、YAPC Asia 2015でDocker社がxhyveには対応す るつもりはないと聞いて、何としても作りたかった ○ Docker for Macとは…? ● YAPC Asia 2015がなければ、Go書いてなかったかもしれ macOS上でネイティブのハイパーバイザー機構を使って Docker環境を構築するもの 8
  9. 9. Souzoh confidential and proprietary ● サポートされている任意のデプロイ先に簡単にDocker環 境を構築するもの ● VirtualBox・VMWare・Parallels・AWS・GCP・etc... ● プラグイン機構があり、公式にサポートされていないデ プロイ先にも対応することができる ● ↑これを使った zchee/docker-machine-driver-xhyve まずdocker-machineとは docker/machine 9
  10. 10. Souzoh confidential and proprietary ● mist64氏がFreeBSDのbhyveをmacOSにポートしたもの ● macOSにおけるType1 Hypervisorの初めてのOSSのはず ○ 簡単にいうとVirtualBoxより無駄なく速い ● 全てCで書かれている(当たり前) ● まー知見が限りなく少ない(やばい) zchee/docker-machine-driver-xhyve ではxhyveとは mist64/xhyve 10
  11. 11. Souzoh confidential and proprietary ● 簡単にいうとDocker for Macの前身のようなもの ● docker/machineのlibmachineというプラグイン機構を使 って、xhyve下で(強引に)Docker環境を作るもの ● libmachineを使っていたおかげて、その後minikubeや minishiftも使ってくれている(いた) ● xhyveをcgoでラップして、xhyveのC main()をgoroutine zchee/docker-machine-driver-xhyve 最後にdocker-machine-driver-xhyveとは zchee/docker-machine-driver-xhyve 11
  12. 12. Souzoh confidential and proprietary アーキテクチャ 12
  13. 13. Souzoh confidential and proprietary ● xhyve(hyperkit)のC ファイルを全てcgoで同梱コンパイル する ● 必要なオプションをflagでパースする ● xhyveのCLIの引数に入れる ● goroutineで自分自身をexecして、デーモン作る ○ 考えうるもっともhackyなやり方 ○ 全くもって推奨しません zchee/docker-machine-driver-xhyve 13
  14. 14. Souzoh confidential and proprietary がんばったところ 14
  15. 15. Souzoh confidential and proprietary vmnet.framework ● ホストネットワークのインターフェイスをゲストOSに接 続するもの ○ macOSでのインターネット共有のようなもの ○ root権限必須 ● docker-machine-driver-xhyveバイナリにroot suidで回避 ○ Homebrewに散々言われた(当たり前 zchee/docker-machine-driver-xhyve 15
  16. 16. Souzoh confidential and proprietary フォルダシェア機能(virtio-9p/9pfs) ● そもそもxhyveにはなかった ○ virtioインターフェイスはあった ● 突如現れたFreeBSDコミッタによる、virtio-9pを使ったも のがxhyve forkでコミットされる ○ 9p2000.Lを使って実現 ○ 許可をとって、自分のプロジェクトにも適応 zchee/docker-machine-driver-xhyve 16
  17. 17. Souzoh confidential and proprietary qcow2 ファイルシステムのサポート ● hyperkitが途中でqemuのqcow2をサポートする ○ I/Oの速度向上のためにブロック書き込みを採用 ○ 本家(D4M)はOCaml bindingやqemu-imgを使ってる ○ そんな邪道なの嫌 ● zchee/go-qcow2を作った ○ qcow2のバイナリ仕様を元に空イメージを作る・書き 込みする zchee/docker-machine-driver-xhyve 17
  18. 18. Souzoh confidential and proprietary 現在 ● 数人で保守 ○ Google ■ dlorenc ■ r2d4 ○ Red Hat ■ praveenkumar zchee/docker-machine-driver-xhyve 18
  19. 19. Souzoh confidential and proprietary 現在 ● しかし、macOSカーネルレベルでの知識が必要で、バグ が多すぎる ○ vmnet・9pfs周り ● minikubeは独自にDocker for Macを使う実装を導入 ○ github.com/kubernetes/minikube/pull/1776 ● 既に過去のものになりつつある… zchee/docker-machine-driver-xhyve 19
  20. 20. Souzoh confidential and proprietary zchee/nvim-go 20
  21. 21. Souzoh confidential and proprietary zchee/nvim-go ● Vim界隈でGoを書くためのデファクトであるfatif/vim-go を、Vim scriptではなくGoでクローンを作った ● (Neo)VimとGoを勉強するために始めた ● 当時のvim-goは、API(使い方)が結構変わりやすかった ○ ついていくのが面倒 ○ 自分で作ろう!!1 Neovim用のGoプラグインをpure Goで書いたもの 21
  22. 22. Souzoh confidential and proprietary アーキテクチャ 22
  23. 23. Souzoh confidential and proprietary zchee/nvim-go 23 MessagePack RPC User nvim-go Go Files AST parse etc... The Go gopher was designed by Renee French. This image created by Takuya Ueda
  24. 24. Souzoh confidential and proprietary ● ようするにMessagePack RPC話せればどの言語でもプラ グイン書ける。Goも例外ではない ● 言語用のプラグインをその言語で書けたら最高では? ○ Emacs => Emacs Lisp ○ JetBrains(Gogland) => Java ○ Sublime Text => Python ○ Atom, Code => JavaScript(?) zchee/nvim-go 24
  25. 25. Souzoh confidential and proprietary 実装コマンド 25
  26. 26. Souzoh confidential and proprietary ● Fmt, Rename ○ tools/imports, tools/refactor/rename ● Build, Test, Run ● Lint, Vet, Metalinter, Cover ● GenerateTest <- これ ○ cweill/gotests ● Guru ● Iferr <- これ ○ motemen/go-iferr ● Delve <- これ ○ derekparker/delve zchee/nvim-go 26
  27. 27. Souzoh confidential and proprietary デモ (ではなくasciinemaで) 27
  28. 28. Souzoh confidential and proprietary nvim-go: delve debugging 28
  29. 29. Souzoh confidential and proprietary nvim-go: GoGenerateTest / GoSwitchTest 29
  30. 30. Souzoh confidential and proprietary nvim-go: GoIferr 30
  31. 31. Souzoh confidential and proprietary zchee/clang-server 31
  32. 32. Souzoh confidential and proprietary zchee/clang-server ● libclangのGoバインディングでC/C++のASTをパース ● オンメモリでは追いつかないので、 ○ flatbuffersでシリアライズ ○ NoSQLのLevelDBに格納 ● gRPC(msgpack-rpc) Server/Clientアーキテクチャで A C/C++ AST index server using libclang written in Go zchee/clang-server 32
  33. 33. Souzoh confidential and proprietary ● !! これはポシャりました !! ○ LLVM本家がClangdという似たものを実装中 ○ こちらはLanguage Server Protocolに沿っている ● しかしいろいろなエッジなものに触れてよかった ● flatbuffers・gRPCはいいぞ ● この実装を元にguruをサーバー化したいなと思ってます zchee/clang-server 33
  34. 34. Souzoh confidential and proprietary まとめ 34
  35. 35. Souzoh confidential and proprietary 個人で作っているGoプロダクト ● 個人プロジェクト(特にニッチなもの)はやったもの勝ち ○ xhyveのは誰もやっていないからこそ受けた ● まずは自分が不満を持ったものをやってみる ○ vim-goはすごい。ただ不満があった ○ GoのプラグインはGoで書けるべき、という信念 ● Goの速度を信じて、既存のものをもっと速くしたい 35
  36. 36. Souzoh confidential and proprietary ご静聴 ありがとうございました 36

×
Save this presentationTap To Close