先月からチマチマと作ってきたヤツが完成しました! これでしばらくはプログラミングから離れられますよ〜

今回は成果物の紹介でなく、制作に使った各種ライブラリについての簡単な感想記事です。

プログラム構成

サーバーサイドにあたる部分をGoとPythonで担当して、フロント部分をJavascriptで作ってみました。

サーバーサイド

基本となるデータ処理のサーバープログラムはGo言語のGin、データベース操作はSQLBoilerを選びました。 SQLBoilerはコマンド一発で既存データベース用のプログラムが生成される所が便利です。

データ処理は主に統計解析になりますが、一部機械学習も入っています。 ただ機械学習に関するライブラリを探している内に、だんだんと学習コストが高く感じられてしまい、全然気持ちがついていかなかったので、結局元のPythonプログラムを少し加工して使うことに。 手抜きというか、まぁ手抜きなんですが、でも本当にPythonはデータ分析用のライブラリが充実してますね。

ということでPythonとの連携が必要になってくるんですが、これについては組み込みでなく、外部コマンド実行方式で簡単に済ませちゃってます。 データの受け渡しはJSONで対応です。

フロントエンド

GUIとなるダッシュボードはこのブログと同じGatsbyJSで作ってみました。 純粋なReactにしなかったのは、GatsbyJSを使った方が簡単に思えたからです。 要はReact単体での作り方が分からないという残念な理由なんですが…

ダッシュボードの中心となる各種グラフについてはHighchartsを使っています。 最初はHighchartsでなくPlotlyにしようとしていたんですが、時系列データのズームがかなり使いにくいので、Highchartsに切り替えています。

どっちも使ってみた印象だと、グラフ作成の手軽さではPlotly、グラフ自体の拡張性能はHighchartsってところかな。

元々PythonのJupyterLabでやっていたことを置き換えただけなんですが、インタラクティブなグラフツールもそうですが、データ処理にかかる時間が大幅に短縮され、とにかく満足感が凄いです。

Goについての感想の変化

使い始めに感じていた気持ち悪さは消えました。 思っていたとおり、使っている内に慣れました。 ただその代わり、Pythonの柔軟性の高さを再確認させられることが多かったです。

特にデータの保存・読み込み時に意識させられます。 Pythonだとread(f)で済むところが、Goだと読み込むデータの型も与えないと処理してくれませんから。 何をするにも型を明記しないといけないんで、正直ダルいです。

最初は他のツールもGoで作り直そうかと思ってたんですが、速度が必要なもの以外はGoを使う意義はあまりないのでは。 でもGoでのマルチコア処理は本当に簡単で、特に困ることもなく爆速化ができてしまうというのは素晴らしいです。

当分はPython,Go,Javascriptの3言語がメイン言語になりそう。