kkmory;

エンジニア系ふわふわ大学生(だった)の雑記帳

Wantedlyのスカラシップ枠でGoConに行ってきた話(前編)

ウォンテッドリー株式会社さんのスカラシップ枠に採用していただき、Go Conference 2018 Autumn に参加してきました!

 

f:id:morrrry:20181126185544j:plain

カンファレンス後はブログでアウトプット!ということで前編と後編に分けてカンファレンスのレポート等々をやっていきます。前編では、僕が特に気になったセッションのまとめを、後半では前半で取り上げきれなかったセッションのサマリーを紹介できればと思います。

(Hi-Conのレポートはまだか?とツッコミが入りそうですがそれは一旦横に置いておくことにしましょう。)

今回は主に、Web API関連のセッションを取り上げたいと思います。


Microservices実装ガイド in Go at Mercari

株式会社メルカリさんのスポンサーセッション。

今回のセッションでは、Microserviceをどのように実装しているのかを中心に紹介していました。メルカリではMicroserviceを作る共通のテンプレートプロジェクトをcloneし、一旦 rm .git した上で再度git initして実装を行うフローになっているとのこと。

テンプレートプロジェクトは、gRPCサーバーがリクエストで飛んできたメッセージをそのままレスポンスするシンプルな機能に加え、ロギングや認証、ミドルウェアといった基本機能を加えた構成になっているということです。

このフローで開発を行うことによって、
・独立したチーム作ることを助ける(チームは独立すべき)
・別のチームに移っても構造が理解しやすい

また、Golangを採用して、
・ネットワークレイヤーが書きやすい
・それなりに早い
・シングルバイナリなので実行環境を作るのが楽

というメリットがあったそうです。

テンプレートプロジェクトが更新された場合は、Microservice側からテンプレートプロジェクトを cherry-pick することで対応しているそうです。

Protocol buffersについてはこちら

 

Linting, Slicing, and Dicing OpenAPI documents


OpenAPIからRESTやProtocol Buffersのデータを自動出力してくれるライブラリの紹介。今はginでAPIを書いて、Swaggerでドキュメントを書くみたいな感じで開発を進めていますが、OpenAPIからコードジェネレートしてくれるのはいいなーと思いました。使ってみよ。



Consider pluggable CLI tool implementation

 

スピーカーはウォンテッドリーの@izumin5210さん。
スライドがおしゃれでめっちゃ好き。

grapiは、Rails generate 的な、gRPCサーバーの scaffolding tool / template generator。glapiの generator 部分を pluggable にするために採用した手法、実装時に意識したことなどについての紹介です。

セッション中に何度か言及されていたRails generateのUXの良さはRailsを長くやっている身としては首が千切れるくらいにうなずける内容で、そんなGeneratorがGoにもあればなーという思いはずっと持っていました。

pluggable するために求める条件、類似のツールをさわってみた所感、そしてpluggableにするための実装といった一連の話は興味深かったです。grapiも使ってみたいなーと思いました。


API Testing the Hard Way

 

まぁテストは書きますよね。でも意外といい感じのサンプルって転がってないですよね。ということで、このセッションでは、ユニットテストからインテグレーションテストまで、Goのテストに関するノウハウを紹介されていました。

RailsRspec+Factorybotはテストを書く上で最強で、テストを書くのも苦にならないと思っているのですが、GoでAPIのテストを書くのはちょっとつらいなと感じています。このセッションで、APIのテストについて体系的に学べたのでとてもよかったです。

セッションで言及されていたライブラリはこの辺。

 

今日は一旦ここまで。

ちなみに、この記事は海風が吹き荒れる羽田空港の展望デッキで、タイムラプスを撮りながら書き上げました。各方面から何やってるんだって言われそうだ......

後編はあさってには書き上げたいと思います。
明日の勉強会の登壇資料が1byteもできていないので...

がんばるぞい

乱数生成について調べてみた

大学のゼミで、ブロックチェーン関連の暗号技術やゲーム理論を学んでるんだけど、乱数生成について興味を持ったので少しだけ調べてみた。

乱数と疑似乱数

疑似乱数は、ソフトウェア的な処理の結果出力されるものであり、純粋な乱数ではない。というのも、疑似乱数生成アルゴリズムによっては、生成法と内部の状態がわかれば乱数を予測できてしまう場合があるからである。

例えば、線形合同法では、規則的な分布が現れたり、最下位ビットが0101で繰り返されたりするため安全な疑似乱数とは言えず、暗号に用いてはいけない。

安全な乱数を生成するには、SecureRandom(Ruby)やCrypto/rand(Go) などを使い、ハードウェアの乱数生成器を使う必要がある。


乱数生成器

IntelAMDのモダンなCPUなら、ハードウェアの乱数生成器がついていて、熱雑音などをもとに安全な乱数を生成してくれる。
Mac/Linux系なら /dev/random(ちょっと遅い)か、
/dev/urandom(少し質が劣るが速い)を使う。 a /dev/random - Wikipedia

cat /dev/random

とすると、乱数列がドウワァァァァって出てくる。
(ターミナルで趣味がばれますね) f:id:morrrry:20181113170245p:plain


乱数生成ライブラリ

普段RailsとかGoとかでWeb開発をしていると、セキュアなところで乱数が必要となるわけですが、以前は脳死で「secure_randomとかcrypto/rand使っとけばいいんじゃろ」とやっていたわけです。 しかし、Java.util.randomが線形合同法と聞いて、多言語のライブラリの実装はどうなんだろうと興味を持ってみたので、普段使っているRubyやGoでポピュラーな乱数生成ライブラリについて少し調べてみました。

Random (Java Platform SE 8)


SecureRandom (Ruby)

よく使うやつです。
サポートしている乱数生成器は openssl と /dev/urandom で、これらが使用できない場合は NotImplementedError が発生する。

docs.ruby-lang.org

crypto/rand (Golang)

これもよく使います。
Linuxでは、/dev/urandom を使用し、使用可能であれば getrandom(2) が使われ、他のUnix-like(Macとか)な環境では、/dev/urandom が使われるとのこと。

rand - The Go Programming Language


おわりに

乱数生成だいじ。

Hi-Ether Meetup #8 Tokyo に行ってきた話

Hi-Ether Meetup Tokyoに行ってきました。

大学の夏休み期間中、インターンのため東京に1ヶ月間来ていたのでこれは行かないわけにはいかない、と。

 

今回、会場は六本木のDMM.comをお借りして開催されました。

おのぼりさんなので、まずビルの根本につくやいなやビルを見上げてすごいなぁとなり、中に入るとビルの改札のデザインがかっこよくて1人エモくなってました。


今回の人数はだいたい40人くらいですかね、さすがに福岡よりは人数多かったです。

福岡と違う点としては発表の様子が録画されていてネットで中継されること。福岡ではやっていなかったので新しいな〜と思いました。 

今回は初めて東京のミートアップに参加したということで、レポート的なものをまとめたいと思います。なお、中身に関しては相変わらず雑です。

 

DApps企業が仮想通貨交換業を検討したら

株式会社ネクストカレンシーの川畑さん(@ku_suke)による「DApps企業が仮想通貨交換業を検討したら」というお話でした。

撮影NG、TwitterNGだったので詳細は書けませんが、兎に角、仮想通貨交換業と犯罪収益移転防止法を頭に叩き込むことが大前提で、会社としてのガバナンスや監査体制など考えることが山ほどあるという感じで大変さがひしひしと伝わってきました...

 

Hi-Ether Conferenceに向けたDApps開発の紹介


DMM.com スマートコントラクト事業部の河西さん(@norinity1103)によるDApps開発の話。河西さんはUI/UXデザイナーということで、サービス設計やユーザビリティの観点から、どのようにDappsのサービス設計やUXデザインをやってきたのかをお話されました。

発表中に、DAppsのサービス設計の中でコントラクトとRDBのデータ型をどこまで合わせるかで悩んだり、独特なユーザーアクションがあるため探りさぐりで開発を進めたという話があり、DAppsの設計をやったことがある身としては痛いほど分かる話でした。 

 

Pact言語によるセキュアなスマートコントラクト開発


DMM.com スマートコントラクト事業部の加嵜さんによるPact言語の紹介です。

Pact言語とはKadenaブロックチェーンコントラクト実装言語でLispライクな非チューリング完全の言語だそうです。

私はLispを読めないので、デモで何が書かれていたのかほぼ分かりませんでしたが、なんかすごいということは伝わってきました。

kadena.io

 

getho ~ Ethereum private nodes, tailored for you. ~


@st_dskさんによるgethoの話。

DAppsを作る時、1人での開発ならまだしも複数人開発となったときにリモートのNode環境を用意するのが面倒くさいよね、ということでワンクリックでEthererumのプライベートノードが手に入るという超絶便利ツールがgethoらしい。

α版ではGanacheのリモート版のような機能を提供するということで、ワンクリックでプライベートノードを立ち上げたり、HTTP経由でどこからでもアクセスすることが可能になるそうです。

getho.io

 

 

experience of blockchain intern


DMM.com スマートコントラクト事業部インターンの前川さん(@arika_nashika)によるインターンで取り組んでいることの紹介です。インターンではブロックチェーン開発とマイニング事業に携わっているということで、軽井沢での開発合宿の話や、金沢のマイニングファームについての話でした。

特にマイニングファームでのエピソードはとても興味深く、いろいろな苦労が垣間見れました。個人的に、冷房は使わずに壁に大きな穴を開けてファンを取り付けて排熱しているというのが意外でした。冷房を使ってもそこまで冷えず、ファンを回しても室温が50度を超えることがあるそうです。ひぇぇ 

 

感想

きてよかった。
Hi-Ether Conferenceがたのしみ。
DMMのオフィスがきれいすぎてやばい(語彙力)