最近、仕事と私事でよく使っているGoとTypeScriptについて今更ながらここがいいぞポイントをお話しようかと思います
はじめに
こんにちはネットワークソリューション部の梅崎です
最近、仕事と私事で物を書くときGoかTypeScriptをよく使っているなと思いまして今更ながらここがいいぞポイントをお話しようかと思います
Goのいい所
周辺ツールが良い
C/C++とかを昔書いていたのですが小奴らはいわゆるオフィシャルな開発環境が無いなと思ってましてHello worldも躓きポイントが多かったような記憶があります
その点Goは公式のコンパイラにコンパイラやらライブラリ(モジュール)管理やらが入っていてtarポールを展開するだけで開発ができるというのが結構感動でそれだけでプログラム入門へのハードルが下がったんじゃないかと勝手に思っています
クロスコンパイルが楽
Goのコンパイラはターゲットを指定すれば複数のOS、CPUアーキテクチャで動作するバイナリができるのは超便利で例えばCliツールをLinuxとWinowsで共有でき、しかもラズパイで動かすこともできる(はず)と言うのはだいぶ開発効率良いのではと思います
並行処理がラフに使える
さっくり軽量スレッドを立てられて後はランタイムがいい感じに管理してくれるのでめちゃくちゃ便利ですまた、channelやWaitGroup、context、Lock機構など並列処理で欠かせない物が一式揃っているので実装したい内容に注力できるのがいいですね~
(脳内がマルチスレッド(not 非同期処理)に外部ライブラリが必要な世代で止まっていたので、goroutineは感動ものでした)
標準ライブラリ(準標準含む)で出来ることが多い
jsonエンコード/デコード、httpサーバーからwebsocket、引数処理から文字列処理いろいろ、バイナリエンコードなどなど外部ライブラリを探して「これは信用できるのか」「今後のメンテナンスはされるのか」「シェアはどれぐらいなのか」などをあまり深く考えずに色々出来るのが良いです
私が作ったものでgRPCと(アーカイブになってしまった)gorilla/mux以外に使ったことが無いぐらいには標準ライブラリで出来ることが色々あります(GUIを作っていないことも大きいかもしれないですが)
作成物はシングルバイナリで出せる
SCPなどで1ファイルを送るだけでプログラムが動くので便利です(一部コンパイラオプションが必要ですが)
書き味もそんなに悪くない
C系から入ったのではじめこそ戸惑うことも多かったですが慣れれば案外悪くないなと思います(ただ、短命な変数やレシーバーを一文字にする文化はまだまだなれませんが)
型推論も便利です
TypeScript のいい所
型がある
型があるのは個人的に必須事項として
トランスパイラのオプション次第では関数呼び出しなどでNullable(undefined)を判定するかを指定できNullチェックを挟めばそれ以降はNullでは無いものとして扱えるのでぬるぽでガッっとされないのは便利です
逆に明示的に型情報をなくして(Any)ざっくりも出来るっちゃできるのも選択肢が自由でいいなと思うところです
ブラウザが基本何でもやってくれる
これ以降はJavascriptと共通なのですが
ブラウザのAPIが超便利で特にGUIを作りたいときHTMLとCSSと言った画面装飾とロジックのJavascriptを分離出来るのは脳みそを圧迫しないのでよいです
ライブラリ要らずで出来ることが多い
私はVanilla JS信者なのですが Vanilla JS であまり困ったことは無くHTTPアクセスやwebsocketから、画面描画(canvas)にAudio、永続ストレージ、バイナリ操作まで殆どのことはブラウザベンダーの肩に乗っかって開発が出来きると思っています
(特に何も考えずに、windowを出してその上にを文字を描画できるのがすごいと思います)
覚えると使い道が多い
仕事でも土日の暇つぶしでもブラウザを使っていることが多いと思うのですがTypeScriptが書けるとブラウザの拡張機能が作れるので
変な広告を消したり、押しづらいボタンを修正したり、画像や動画をダウンロードしたりなどなど時短や自分のストレスポイントを減らせるのでおすすめです
ブラウザの拡張機能まで行かないにしてもサクッと開発者パネルを開いてコードをポチポチして流し込むんでスクレイプみたいなことも出来るようになります
さいごに
つらつらと便利ポイントを書いてきたのですが外部ライブラリ(特に3Dや機械学習)を使うときなどは別の言語を選ぶ必要にかられることもあると思います
そんなときはgRPCはいいぞおじさんにクラスチェンジして各言語をgRPCでつなげて、いいとこ取りしたアプリを作っちゃえばいいのではと考えてたりします