見出し画像

資料公開!約半年間かけて「社内 Go 言語研修」を実施しました

デザミスでは月1で開かれる勉強会などエンジニアの人材育成に力を入れていますが、そんな中社内でクラウドや IoT の領域を中心に採用例が広がっているプログラミング言語 Go を約半年間かけて習得する研修を企画、6人が参加し先日無事に全員が全プログラムを修了しました!

画像1

Go 言語は「21 世紀の C 言語」とも呼ばれる次世代のプログラミング言語で、C の特徴を受け継ぎながらも平易な文法と強力な並行処理の仕組みを搭載することで、幅広い用途に対応しつつ、マルチコア化が進む CPU の性能を引き出すことができます。

デザミスではこの Go 言語を主に IoT ゲートウェイとクラウドでのデータ処理に投入しており、日本中 (一部海外) の牧場に配備された Raspberry Pi 上でも Go で書かれたプログラムが動作しています。

画像2

さて、今回計画した研修は1回1時間半の全13回構成で、最初と最後のみ講義形式、それ以外は全てハンズオンを中心にした実践主体の形式としました。また副読本として「プログラミング言語 Go」(アラン・ドノバン, ブライアン・カーニハン 著, 柴田芳樹 訳, 丸善出版, 2016) を選定、研修中で練習問題を解いたり記述を紹介したりしました。しかし研修内で使うというより、研修後によく分からなかったところ、もっと知りたいところなどを復習したり深堀りしたり、最終的にプロダクションレベルの開発をする際のバイブルとなるようにとこの本を選んでいます。

画像3

それではどのような内容だったか、研修の資料を添えて紹介していきたいと思います!

ご注意

本資料はあくまで学習の参考のための公開であって、手順の実施やコードの実装・実行に伴い不利益や損害が発生する場合であっても、当社はその責任を一切負わないものとします。また、紹介しているクラウドサービス等の利用には利用規約の同意および利用料の負担が必要になります。予めご了承ください。

第1回

第1回はイントロダクションです。そもそも Go 言語とはどのような目的・背景をもって生まれ、どのような特徴を持っていて、他の言語と何が違うのか?あるいはどこが同じなのか?をざっと紹介する内容となっています。もちろんこの資料だけで全てを理解するのは困難ですが、それは今後の回でフォローアップしていくことになります。

第2回

本研修ではハンズオンを主体とした内容とするため、第2回に環境構築の回を持ってきました。講師以外全員 Windows PC だったので、Windows のみの手順しか紹介していません。エディタには Go Developer Survey 2020 でも最も利用者が最も多いとされた VS Code を選定しました。普段 Git や GitHub に使い慣れていない参加者もいたため、そのあたりの手順説明も少し厚めにしています。

第3回

第3回にしてようやく基本構文の説明です。すんなり吸収できるかどうかはエンジニアのバックグラウンドに強く依存してしまいますが、各回実施後に集めているアンケート (本記事の最後に結果を紹介します) を見る限りではこのレベルだと問題なかったみたいです。

第4回

第4回は少し難易度が上がり、構造体やマップなどが出現、さらにオブジェクト志向の基本も紹介しました。このあたりで参加者の間で徐々に理解度に差が出始めた感じがします (難しかった: 1名、やや難しかった: 3名、ちょうどよかった: 2名)。

第5回

言語の基本構文の説明は第3回、第4回ではまだ説明し足りないのですが、あまり基本構文に留まっていてもモチベーションが続かないだろうと当初から予想していました。そこで第5回に計画したのが「標準ライブラリはやめぐり」です。「乾電池同梱」とも呼ばれる Go の充実した標準ライブラリを紹介して実際に触ってみることで、実践的なプログラミングに近づけるためのスタート地点となりました。

第6回

標準ライブラリを触ったあとは、外部のライブラリの活用です。Go Modules を利用することにしましたが、今なお仕様変更が続くこの機能の説明は難しかったです (この資料の内容もすぐに古い情報になってしまいそうです)。一方ハンズオンのほうは、第2回の環境構築の際に今回の仕込みをしておいたことも功を奏しスムーズに進みました。ハンズオンの内容は、自分でオリジナルなライブラリを作って GitHub で公開し pkg.go.dev で Go Doc を読むというチャレンジングな内容です。参加者には結構楽しんでもらえたようです。

第7回

Go 言語は一般には Web バックエンドでの採用例をとても良く耳にしますが、本研修ではここでようやく Web 開発回です。デザミスでは U-motion® のホスティングに Heroku を採用しており、その Heroku が Go もオフィシャルにサポートしていることから Heroku でのハンズオンという内容にしました。Heroku へのデプロイが成功したあとは、Go の http 標準ライブラリのサーバー機能の説明と、ごく簡単な html/template 標準ライブラリの使い方を紹介しました。

第8回

現在社内の AWS アカウント内で動いている Go プログラムの大半は AWS Lambda で、9本ほどがせっせと稼働しています (それ以外は ECS/Fargate, EC2, App Runner など)。この作り方はぜひ社内研修でカバーしておきたかったので、Heroku のあとは Lambda 回としました。Go と Lambda の相性の良さを熱く語ったあとは早速ハンズオン、API Gateway と組合せて API サーバーを実装するところまで実施することができました。なお構築ツールとしては AWS SAM (Serverless Application Model) を選定しました。

第9回

Go の最大の特徴といっても過言ではない並行処理プログラミングを解説するときがようやくやってきました。といってもすでに第1回で概要は説明していたのですが、チンプンカンプンだったようなので背景からじっくり説明することにしました。しかしアンケート結果は惨敗 (難しかった: 3名、やや難しかった: 3名、ちょうどよかった: 0名) で、もう少し時間が必要だったかなという気がしています。練習問題 9.5 を解けた人は1人もいませんでした。

第10回

難しい並行処理をやったあとは、簡単なテスト実装の回です。Go のテストの仕組みはとてもシンプルなので、他の言語によくある凝ったテストフレームワークなどを説明するよりもずっと楽なものです。ベンチマーキングやカバレッジの計測なども当たり前のように紹介したのですが、初めてカバレッジ計測というものをやったという参加者もいて、結果的にソフトウェア開発の基礎力向上にも役立つ回になったようです。

第11回

だいたい Go がある程度書けるようになってきたかなと感じている頃合いで、データベース接続の回を用意しました。こんな後ろに回した理由は2つあり、1つ目は様々な構文やライブラリを触って先に Go でデータを扱うのにちゃんと慣れてもらう必要があるから、2つ目はよく分かっていないコードからデータベースをむやみに触るのは危険であることからです。ハンズオンでは PostgreSQL と Amazon DynamoDB の操作を体験し、いよいよビジネスアプリケーション然としたプログラムが書けるようになってきた感じです。

第12回

最終回1回前の今回はなんと GUI アプリケーション開発!Go で GUI 開発をするのはまだまだ困難を伴いますが、それでも成長を続けている分野です。本研修では Fyne v2 を利用して簡単な GUI デスクトップアプリケーションの開発にチャレンジしました。おそらく Fyne v2 を解説する数少ない日本語の資料になっているように思います。遊びみたいな回ですが、実は社内では Fyne を使った GUI のツールも社内で開発しており、ちゃんと現実に即した内容でもあります。

第13回

最終回は社内の Go プロジェクトの解説回となっています。残念ながら社外秘の内容を多分に含むため資料は公開できませんが、以下のような内容を講義しました:
• 社内の Go で書かれたプロジェクトのリポジトリ一覧
• いくつかのプロジェクトを取り上げて概要説明、ファイル配置、採用ライブラリ等の解説
ちなみに回の前日に Go 1.17 がリリースされたこともあり、冒頭で 1.17 のアップデート内容のダイジェストなどを解説したりもしました!

修了後と今後にむけて

参加した6人全員が全てのプログラムに参加し、全員無事修了することができました。また修了者には講師から修了証書が授与されました。

画像6

参加者には各回と最終回後にアンケートを集め、難易度の具合や研修時間などを継続調査していました。浮き上がった課題としては、難易度の感じ具合は回を重ねるごとに広がり、時間に関しては全体的にやや詰め込み気味の傾向があるようでした。このあたりは第2期や他の研修を計画するときにフィードバックして KAIZEN を回していこうと考えています。また Go の社内普及に繋がるかどうかを調べた結果では概ねポジティブな結果が得られ、講師として一定の手応えは得られたと感じています。

スクリーンショット 2021-08-24 17.32.47

図1

デザミス社内では様々なプログラミング言語が採用されており、解決したい課題や要件、メンバーのスキルに応じて技術を選定しています。Go はそのうちの1つであり、他にも沢山の技術を活用することで U-motion® を開発しています。今後も研修を企画しエンジニアの技術力向上を目指していきます。

エンジニア募集中!

さて、デザミスでは現在エンジニアの採用を進めています。募集職種と主な要件は以下の通りです:
• フロントエンドエンジニア (React, Vue.js 等のフレームワークを用いた開発および運用の経験がある方)
• バックエンドエンジニア (RDBMS の基礎知識と Ruby on Rails を用いた開発および運用の経験がある方)
• IoT エンジニア (OS とネットワークの十分な知識と Go, C, Python 等を用いた開発経験がある方)
• データエンジニア (統計の基礎知識と Pandas, NumPy, scikit-learn 等を用いた分析経験がある方)
ご興味がありましたら、カジュアル面接からでも可能ですので、希望を添えてお気軽にご応募ください!現在全部のステップをオンラインで実施しており、地方からでも参加可能です。エンジニア一同お待ちしております!


この記事が気に入ったらサポートをしてみませんか?