#えむけーろぐ

間違った事を書いていたらやさしく教えてください

近況

8月13日(日)〜17日(木) Liaroのお手伝い @ 恵比寿・渋谷あたり

@hanaken_n の会社の手伝いをしていた。

golangでAPIサーバ書いてた - #えむけーろぐ

8月18日(金) TDD Challenge @ 株式会社ミクシィ

TDDとペアプロの実習型イベント。

「TDD challenge」というイベントに参加してきた #mixi_TDD - #えむけーろぐ

8月19日(土)〜20日(日) オープンキャンパス @ 苫小牧高専

f:id:mktakuyax:20170820162131j:plain

Scratchでちびロボを動かす的な展示をやっていた。

8月22日(火)〜9月1日(金) インターン @ 株式会社グロービス

グロービス(GLOBIS)

f:id:mktakuyax:20170901130348j:plain

TODO: あとで記事書く

9月2日(土) LT会 @ 株式会社ジースタイラス

【9月2日】夏だわっしょい!!逆求人感謝祭 - connpass

LT大会で優勝した

9月4日(月)〜9月15日(金) @ 株式会社リブセンス インターン

株式会社リブセンス - Livesense Inc.

f:id:mktakuyax:20170904190505j:plain

インターン生は全部で9人くらい。そのうちの5名とオシャレシェアハウスにブチ込まれている。もう3名もまた別のシェアハウスにブチ込まれている。

f:id:mktakuyax:20170904205326j:plain

インターン生は全員男だったということを書いて、近況報告を終わりたいと思います。

「TDD challenge」というイベントに参加してきた #mixi_TDD

この1、2週間いろいろイベントがありすぎてブログが現実世界に追いつけていない。。。

はじめに

f:id:mktakuyax:20170818130839j:plain

8月18日(金)に渋谷駅のきれいな方にあるミクシィで開催された、「TDD challenge」というイベントに参加してきたので、その記録を書いておく。

そもそもTDDやペアプログラミングってなんじゃいって人はこのへんどうぞ。(ペアプロのページ開くといきなり「ワークステーション」って出てきて時代を感じる)

テスト駆動開発 - Wikipedia

ペアプログラミング - Wikipedia

TDD challengeとは

connpass.com

今年の新入社員研修で、受講者から大変好評だった「テスト駆動開発研修」のコンテンツを、
「TDD challenge」と称してご提供する特別な1dayワークショップです。
*TDD=test-driven development

テスト/設計について学ぶ機会が少ないものの、今後のサービス開発において役に立つ開発手法です。
現場エンジニア社員の講師・チューターのサポートを受けながら、この夏のスキルアップを目指しましょう!

- 【学生限定】TDD challenge(テスト駆動開発ワークショップ) #1 2018.08.18 - connpass

とのこと。

午前中にテストや設計についての講義を受けた後、軽くTDDとペアプログラミングの実習をして、午後は与えられた3つの課題をガッツリ解いていくという感じだった。

事前アンケートでgit/GitHub等開発ツールの使用経験や、得意なプログラミング言語について聞かれ、それをもとにしていい感じにマッチングされた相手と2人組、"ペア"になって課題をこなしていく。僕は、得意な言語として同じRubyと答えた@_iamkuntaoさんとペアになった。

また、ランチタイムには新卒のエンジニアのみなさんとランチしながらお話をすることができた。(記事TOPの画像はランチタイムに出た釜飯です。激ウマであった。)

開催中のいろいろ

9月4日にも第二弾をやるらしいので、そこに参加する人たちに最大限楽しんでもらうために詳細は書かないでおく。だからまぁ雰囲気だけでも伝わればということでここはひとつ。

イベントのはじめにハッシュタグの案内があったのであいさつツイートくらいはしたけど、その後はツイートしている暇など無いくらい楽しかったし忙しかった。とにかくガリガリとコードを書いていた。

ペアプロは、1台のPCを囲ってやるのではなく、それぞれのPCを使ってやる感じだった。運営側がでかいモニタを用意してくれたので、ドライバ(コード書き担当)になる人が適宜モニタに繋いで、ナビゲータさんがそのモニタを見ていろいろ指示出したりという感じ。モニタはHDMI接続だったけど、USB-Cのアレも運営側で用意してくれてました。

ペアでのソースコードの共有は、ぼくたちはGitHubを使った。

僕らの他にRubyのペアがもう1つか2つくらいあったと思う。あとはPythonとか、Swiftとか、Javaとか、そのへん。C言語のひとたちもいてすごかった。

イベント中はガッツリコード書くし、思考を言葉として、そしてソースコードとしてアウトプットし続けなければならないので、めちゃくちゃ疲れます。前日はよく寝たほうが良い。あとランチタイムのときにコーヒーもらっておくこと。

学んだこととか感想とか

学んだことについてあまり書きすぎると何やったかバレるのでふんわりと箇条書きで。

  • 名前は知っていたしそれっぽいことはやっていたかもしれないもののちゃんとはやっていなかったペアプロを実践できた。
  • ペアプロ中は、ドライバはとにかく自分の脳内を垂れ流しまくると良い。
    (自分自身の思考の整理にもなるし、ナビゲータの助けにもなる)
  • ナビゲータは、「これは指摘したほうが良いかな?」「でも今ノリノリでコード書いてるのにここでゴチャゴチャ言うのもな」とか迷うし、自分がドライバになってから「いやこれ絶対さっき言ってくべきだったわ、、、」となる。
  • テストしやすいコードは、良い設計である。
  • 自分たちが1時間前に書いたコードのテストしやすさに感動し、自画自賛をはじめる。
  • 「今回はTDDしにきたから、やりすぎってくらいテスト書こう」という感じでテスト書いてた。
  • コード書いてる横から「もっとこう書けるんじゃない?」が飛んで来るのは最高。よりよいRubyを知ることができた気がする。
  • HRTの精神ほんとうに大事。今回僕らのペアはそれをちゃんとできていたので、とても楽しくペアプロできたと思う。

おわりに

今回は他チームと競い合うイベントではないので気楽に参加できたし、かといって課題のボリュームや難易度もそこそこにあるのでガッツリコードを書くという体験ができたしで、たいへん良い1日であった。

僕らのペアは開始時点でいい感じに仲良くなって、各種開発ツールの使い方やコードの書き方、開発の進め方の合意も早い段階でとれて、git/GitHubもとりあえずこのイベントをこなすにはまったく困らない程度にお互い使えたので、素早く開発を始めることができた。活発に議論しながらやっていきを発揮できたので非常に楽しかったけど一番前の席だったのでうるさかったと思う。

あとはまぁ、普段フルスタックなフレームワークを使ったプログラミングしかしない人は、フレームワークに依存しないコードの書き方とテストツールのセットアップの方法くらいはおさらいしておくとスムーズでいいと思う。(例えばRails書きさんは、Railsに依存しない、RSpecやMiniTestのセットアップ方法を軽く調べておくと良いと思う。)

第2回もやるらしいので、興味ある方はぜひ参加してみてはどうでしょうか。

connpass.com

golangでAPIサーバ書いてた

先週、8月13日(日)に東京に来て、14日(月)から17日(木)まで、Liaroのお手伝いさんとしてgolangで社内向けツールのAPIサーバを書いていた。もっと早く記事書こうと思ってたけど、土日のオープンキャンパスやらなんやらで忙しかったので今投下しておく。

f:id:mktakuyax:20170817122807j:plain

Liaroは、苫小牧高専の4個上の先輩(ぼくが1年生のときの5年生)であるhanaken_nが作った会社で、まぁだいたい機械学習やらDeep Learningやらをやっている渋谷のミクシィがない側にあるスタートアップだ。

Liaro

やっている事的にはPython一択なのだけど、会社としてPython以外の選択肢もほしかったらしく、「ちょっとgolang試してみたいから社内ツール4日くらいで作ってよ」と言われた。

僕自身も、なんか作るってなったらとりあえずRubyで書くけど、Ruby以外の選択肢は持っておきたいなと思ってgolang入門だけして放置していたところだったので、実際に動くモノを仕事として作る機会が降ってきてさらに小遣い稼ぎにもなってラッキーという感じ。

Webアプリケーションフレームワークとしては、gin-gonic/ginを採用した。net/httpとその他細々したライブラリで頑張る人も多かったけど、某golangやってる知り合いに「WAF何使ってるの」と聞いたところ「ginかecho」と言われたので、なんとなくginにしてみた。書いてみた感想は、Sinatra書いてるときの気持ちと近いなというところか。

ORMは、jinzhu/gormを使った。理由はなんだったかな……忘れたけど、たぶんgolangちゃんとやってなかったときからなんとなく名前は聞いていたからだと思う。そもそもgolangの構造体とORMって相性悪いのではという話を小耳に挟んでいたのだけど、実際そうなのかもと思いつつ……。とはいえ僕はActive Recordしか知らないだけだろと言われればそうな気もする。

golang自体を書いていた感想としては、まぁ、「型つらい」が一番だ。ずっとRuby書いてたんだからそりゃそうだという感じだろう。いつか、型に感謝する日が来るのだろうか。

完成したコードは恐ろしいクソコードになった。マトモにモノ作るの初めてな言語で、しかも期間が4日間しかないんだから仕方ないでしょうという言い訳は一応しておく。4日ぶっつづけて書いた結果、「ここはもっとDRYにできるな」とか、「エラーハンドリングもっとこうすりゃいいじゃん」というところが見えてきたので、これからリファクタリングする。(と思う)

 

今回得た学びというか体験としては、「自分の中でgolangという選択肢が増えた」ということもあるが、それ以上に「golangで一本アプリ作ったぞ」という自信を得たということだ。今回Liaroのお手伝いをしにいくにあたって一番心配だったのが、「僕がgolang書いてて躓いたときに助けを求められる人が社内にいない」ということだった。

ぼくがはじめてLOUPEでRubyを触ってWebアプリケーションを書きはじめたときは、メンター的な頼れる存在がいたし、その他のインターン・バイト先でもメンター的存在がずっといて、そういう存在無しでやっていけるようになったのは僕の中である程度Ruby/Railsかけるぞという自信を持てるようになってからだ。

今回はそうではなくて、マトモにモノを作ったことのない言語で、はじめて触るフレームワーク、そしてすぐ近くに頼れる存在がいないという状況で、クソコードとはいえ一本アプリを作ったということが、自分の中での精神的なブレイクスルーとなったような気がする。

今後もたぶんなんか作るってなったらRuby使うと思うけど、golangという選択肢があるということ、そして新しい言語でいきなりなんかやるということも不可能ではないということを胸に、明日からは某インターンRubyを書きます。

mktakuya先生の次回作にご期待ください!