1
/
5

Rubyを勉強したのにGo? 言語は道具とは (後編)

こんにちは!
新入社員のA.Gと申します。

あっという間に1月がおわり、節分の季節がやってきました。
大寒波で寒い日が続いていますので、はやく春になってほしいですね。

今回は前編に続けて、私が入社後3ヶ月間、最初の仕事として担当したGo言語の案件について経験したことをお伝えします。
前編のストーリーはこちらです。


Rubyを勉強したのにGo? 言語は道具とは (前編) | 株式会社ストラテジーアンドパートナー
こんにちは!新入社員のA.Gと申します。 すっかり気温が下がってきて、鍋が嬉しい季節になりました。自宅で飼っている猫が布団を占領して動かない日々が続いております。。。 今回は私が入社後の3ヶ月間、最初の仕事として担当したGo言語の案件について経験したことを書きました。 ...
https://www.wantedly.com/companies/strategy-jp/post_articles/456215




Go言語とはGoogleが開発し、2009年に発表されたプログラミング言語です。
Go言語はコマンドラインツールやWebアプリケーション、クラウド、そしてマイクロサービスの開発に使われています。
YouTubeやメルカリ、Dockerの開発に使用されていて、「シンプルで信頼性の高い効率的なソフトウェアを構築できる言語」として注目されています。

前編では、入社前にGo言語を触れたことがまったくなく、Rubyをプログラミングスクールで勉強していただけの私が最初の仕事としてGo言語でツールの開発を担当することになりました。
そして社長にそのことを相談したところ、「言語は所詮道具だから大丈夫」という言葉をいただき、Go言語のキャッチアップと開発がはじまりました。

Go言語とはどのようなもので、「言語は所詮道具」とはどういうことなのか?
後編ではキャッチアップから開発のことまでをお伝えします!!

キャッチアップ

まずは会社で購入した書籍をつかって学習をしようと思っていましたが、文法の説明は省略されていて書籍には公式サイトで自学するように記載されていました。
その書籍は基本的な文法や使い方はわかっている前提で、この場面ではこのようなライブラリを使います、などの応用的な内容が書かれていたので難しくて読み進めることができませんでした。

また「初心者にとって公式サイトは情報量が多くて難解なので、文法は嚙み砕いて書かれた書籍で学んだ方がいい」というイメージを持っていた私は社長に相談してみました。
すると、「まず第一に公式の情報は信頼度が高い。第二に情報量が多いドキュメントを読み込み理解する能力はエンジニアにとって必要なものである」という回答をいただき
能力をあげていきたいと考えていたので賛同し実践することにしました。

公式サイトの難しい部分は翻訳しつつ読んでいき、基本文法の説明などが書かれている公式チュートリアルがあったのでそこで中心的に学習していくことにしました。

Goの文法で印象的だったこと

学習を進めていてRubyとの比較になってしまいますが、文法や使い方で印象に残ったことをいくつか紹介します。

まず型付けについてです。
Goは変数などを書くときにあらかじめデータ型も書いて決めておく静的型付け言語です。
データ型とはデータの種類のことで整数、小数、文字列、真偽値などがあります。
たとえば整数をいれる変数を宣言したいときは、Rubyでは

変数名 = 値

と書けるので、

a = 1

とだけすれば表せますが、Goでは変数宣言であることをしめす

var

をつかって

var 変数名 データ型

と書いてから値をいれます。

つまり以下のようにまず整数型(int)の変数であることを宣言してから値をいれます。

var a int
a = 1

整数しかaには入らないため

a = "hello"

のように文字列や別のデータ型の値は入れられません。これはRubyでは可能です。
型、つまりデータの種類に対してRubyよりも厳格なところが印象的でした。

続いてコンパイルについてです。
すべてのプログラミング言語はコンピュータがわかる機械語に翻訳されて実行されます。
Rubyはプログラミング言語で書かれたプログラム(ソースコード)を少しずつ機械語に翻訳しながら実行していくインタプリタ言語なのですが、Goはプログラミング言語で書かれたプログラム(ソースコード)をすべて機械語に翻訳してから実行するコンパイル言語です。
コンパイル言語は翻訳時に文法エラーが出るのでバグが実行前に見つかる点や、翻訳と実行を切り離せるため実行時に翻訳もおこなうインタプリタ言語よりも処理が速い点がメリットです。
実行する前に文法のエラーとして出てくるので、どこが問題であるのかがRubyよりもわかりやすいと思いました。

他にも実行方法やモジュール、パッケージなどの使い方も印象的でしたが、説明は省略いたします。

開発

公式チュートリアルを中心に学習を進め、簡単なプログラムを書けるようになったら実際に開発の作業に入っていきました。
はじめは作業を実施できるか不安でしたが、条件分岐や繰り返し、関数などの基本的な文法は同じで書き方も似ていますし、型の概念もRubyでは書かないだけで本来考えていることなので基本的に同じであり、当初の不安よりは書き進められていました。

マネージャーや先輩からいただいたソースコードのレビュー内容も、初めのころはGo特有の慣習やベターな書き方が主なものでしたが、徐々にプログラムが仕様通りにできているかという点や、プログラムの設計や変数名、テストという業務やプログラミング自体のコメントになっていきました。

そのとき私は、この案件をRubyで書いていたとしても同じことを言われていただろうと思いました。
「異なるプログラム言語を習得する」というのは自分が思っていたより大した事ではなく、変数名やプログラムの設計、もっと言えばそのプログラムで実現したいこと、業務の理解が本質的であり、言語の違いというのはその後にくるものだと感じました。

おわりに

開発が完了し、無事リリースすることができました。リリース時にはクラウドやインフラ周りの障害が発生して四苦八苦しながらリリースを終えた感じです。これも社長がいつも言っている「コンピューターサイエンスの知識は重要」ということを痛感する出来事でした。WEBサービスはHW層、MW層、AP層が精緻に動いて初めて提供できるので、今後はより深いレイヤーに関われるようにさらなるキャッチアップをしていきたいです。

「言語は所詮道具」という言葉はいまでは共感しております。
現在はフロント側の作業もおこなうようになりTypeScriptやVue.jsを学習しながらタスクを進めております。
このプログラムで何を実現しようとしているのか、どういった問題やニーズに答えようとしているのか、自分のやっていることの本質は何か、を考えながら今後も取り組んでいこうと思います。

Invitation from 株式会社ストラテジーアンドパートナー
If this story triggered your interest, have a chat with the team?
株式会社ストラテジーアンドパートナー's job postings

Weekly ranking

Show other rankings
Like Mizuki Sakakibara's Story
Let Mizuki Sakakibara's company know you're interested in their content