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

BLOG

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

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

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

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で書いていたとしても同じことを言われていただろうと思いました。
「知っている言語と違う」というのは自分が思っていたより大した事ではなく、変数名やプログラムの設計、もっと言えばそのプログラムで実現したいこと、業務の理解が本質的であり、言語の違いというのはそのあとにくるものだと感じました。

おわりに

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

BLOG

アーカイブ