今年の新人研修はgoでした

新人研修のgo担当だったhandlenameです。

昨夏、Go言語を積極的に推進していきます。という宣言を出しましたが、 この一環として新人研修で扱う言語としてgoが選ばれました。

研修では何をやったのか

Webサービスの開発・運用に関わる要素を対象としました。 goの研修に使える時間は合わせて10時間程度と限られていたこともあり、 かなり内容を絞っています。

開発環境の準備

研修に入る前に、受講者それぞれに開発環境の準備をしてもらいました。

  • brew install go
  • 環境変数の設定
  • エディタの設定(保存時にgofmt自動実行)

幸いここで躓いた受講者はいなかったようです。

Tour of Go

プログラミングは全くの未経験、という受講者はいなかったので、 いきなりTour of Goでgoのコードを書いてもらいました。

基本文法/制御構文/データ構造/並列処理 の4つのセクションに分割し、 それぞれについて課題提出と講評を行いました。

テストについて

TDDとは行かないまでも、CIを回すのが基本! ということでテストについての解説を行いました。

goはテストについての考え方が独特なので、 他の言語の例を挙げつつ解説しました。

  • なぜテストを書くのか
  • testingパッケージについて
  • テストの書き方
  • テストの実行方法

ファイルの操作

osioパッケージを用いた低レイヤーな操作や、 ioutilbufioパッケージを使った ファイルの読み書きの方法について紹介しました。 課題ではファイル操作を行うコマンドラインツールを実装しました。

  • ファイルの作成・削除
  • ファイルの読み書き
  • flagの使い方

HTTPサーバー・クライアント

APIでやりとりする簡単なHTTPサーバーアプリケーションを実装し、 net/httpパッケージの使い方について触れました。

  • HTTPサーバーの書き方
  • HTTPリクエストの送り方
  • encoding/jsonを用いた
  • XSSを防ぐためには

database/sql

社内で多く用いられているmysqlを対象に解説・課題を行いました。

  • database/sqlパッケージの使い方
  • SQLインジェクションを防ぐためには

研修で他の言語ではなくgoを扱うメリット・デメリット

メリット: 開発環境の準備が楽

チュートリアルとして使用したTour of Goに至っては ブラウザさえあればgoのコードを実行できます。 受講者の中にはまだプログラミングに不慣れな人もいるので、 余計なところで躓かない、というのは大きなメリットです。

研修開始前に実行環境のセットアップまでは済ませてもらっていたので、 スムーズに研修を始めることが出来ました。

メリット: ドキュメントが充実している

公式のドキュメント、 とくに標準パッケージのリファレンスが充実しているのが助かりました。 ドキュメントの充実は研修にかかわらず言語を学ぶ際には大きなメリットですね。

今回の研修では標準パッケージのみを用いたので、 この恩恵を特に受けることが出来ました。

デメリット: 体系的に学べる教材がない

「この本を読んでおくといいよ」と言うことができません。 書籍は何冊か出ていますが、刊行年数が古く、 バージョンアップで追加されたり非推奨になったりしたものを ちゃんと把握していないと役に立たない知識になってしまいます。

言語仕様が小さいので大仰な教材は必要ない、ということかもしれませんが・・・。

今回の研修ではTour of Go以外はオリジナルの資料・課題を用意し、 課題の解説・講評時に関連するトピックを紹介する形式を取りました。

デメリット: コードの癖が見えない

コードを読めばなんとなく書いた人のスキルが見えてくるものです。 goの場合gofmtコマンドでコードフォーマットするのが基本なので、 インデントが揃ってない、改行の入れ方が適当、など、 そういった細かい「いけてない」書き方は覆い隠されてしまいます。 研修で扱うのは比較的単純なコードばかりなのでなおさらです。

もちろんきれいなコードが書けるのはいいことではあるのですが、 研修を行っている側としては受講者それぞれのレベルを 判断するための材料が減ってしまいます。

課題の提出はGithubのPull Requestで

業務でgit & Githubを使用しているためこれに慣れてもらうというのが目的。 案の定手元の関係ないファイルを全部コミットしてしまったり、 コメントが不適切だったりと突っ込みどころが多くあったので、 課題内容と合わせて講評を行いました。

また、Pull Requestにすると提出されたコードのそれぞれの行にコメントが付けられるので、 講評がしやすいというメリットもあります。 課題ごとにラベルを指定して、Github APIで提出状況を可視化する、 ということも行っていました(主に研修を行う側用)。

研修を終えて

研修終了後にアンケートを取ったところ、

  • 「goroutineについてもっと取り上げて欲しかった」
  • 「interfaceについてもっと知りたいです」

という意見が見受けられました。

業務で使うプログラミングの基本、というところに注力したので、 なかなか応用まで手を伸ばせなかった感が否めないところです。

準備・実際の研修ともにもっと時間をとり余裕を持って行う、 というのが次回以降の課題となりそうです。

このあと新人研修シリーズとしてエントリーが続く予定です。

過去の新人研修シリーズはこちら!