Go でエクセル入出力できる GUI アプリを作った 2025/01/18
1. はじめに 2025/01/18 2
自己紹介(三島) 社員数百人規模の会社で社内 SE やっています ほぼ全員が非エンジニアの会社 入社してからは独学でキャッチアップしながらの開発 触ったことがあるプログラム R(tidyverse)で集計分析したり Python で Flask のアプリ保守したり React で簡単な社内アプリ作ったりなど 2025/01/18 3
紹介したいこと Go 言語はほぼ未経験だったがアプリリリースまで進められた どんなアプリか? 初学者目線からの、触ってみた上での気づき 2025/01/18 4
2.作成アプリの概要 2025/01/18 5
アプリの全体像 社内業務で利用してもらう想定のアプリです。 色んなデータを取り込んで、分析して、エクセルに書き出します。 2025/01/18 6
想定されるユースケース 利用ユーザは社内メンバーのみ ツールを利用するのは非エンジニア(Windows) 個人開発 処理時間は多少長くてもよい ⇒ 2025/01/18 小規模アプリ 7
言語選定 なぜ Go を選んだか? exe 単体で Windows ユーザに配布できて、バンドルサイズが小さい 言語習得が用意 他言語との比較(GUI のアプリ配布ができる言語) Node.js:electron が候補だが、バンドルサイズが 200MB(ちょっと重い) Rust:Tauri も有力だが、Rust は習得コストが高そう 2025/01/18 8
そもそも、なぜアプリにする必要があるか? 「エクセルでは処理ができない」という理由が大きい 100 万行以上のデータ処理や、複数の大規模データの組み合わせ計算になると、 プログラム開発の選択肢が出てくる BI ツールや Access などでも集計可能だが、表現の自由度は低い 「プログラムができる屋台のおっちゃん」の需要 「おっちゃん、X のときに Y できるプログラム作ってよ!」 「あいよ!ちょっとまってな!」 ⇒ 非 IT がメインの会社では、 2025/01/18 ちょっとした依頼に答えられるフットワークが必要 9
3.実際に触ってみての感想 2025/01/18 10
exe ファイルでの実行環境配布がとても簡単だった Go をインストールして、 コード書いて、 go build したら配布できる、というのはめちゃくちゃお手軽だった。 2025/01/18 11
構造体とインターフェース Go の第一印象は・・・クラスがない! 他言語では、状態を持ったオブジェクトを操作する場合、「クラス」を知らなけ ればならない でも、クラスを使ったとしても状態を「完璧に」管理するのは難しい なぜクラスがないのか? クラスを作らない = オブジェクト指向の「沼」にはまらせない、 という言語設計者のやさしさ? 2025/01/18 12
excelize パッケージの使い勝手の良さ シンプルな関数設計 ハマる部分もなくエクセル読込みも出力もできたので良かった 特に、リッチテキストに対応していたのは嬉しい 2025/01/18 13
excelize のセルの文字スタイル設定 Style 構造体を作り、セルに対してフォントを設定する エクセルでのアウトプットを作りこむ場合、しっかり設計した方がいいかも 2025/01/18 14
例)あるセルは赤色で太字にしたい
// 赤色太字スタイルを定義
style, err := f.NewStyle(&excelize.Style{
Font: &excelize.Font{
Bold: true,
Color: "FF0000", // 赤色
},
})
if err != nil {
// エラー処理
}
// セルA1にスタイルを適用
err = f.SetCellStyle(sheetName, "A1", "A1", style)
if err != nil {
// エラー処理
}
2025/01/18
15
反省:自動テストはちゃんとしておくべきだった 文法はシンプルだが、設計は大変 HTTP や DB は気にしなくてよかったので、基本文法の範囲でリリースができた だけど、コード全体を見通しながら依存関係を意識して設計するのは難しかった 気を抜いていたら「エクセル」「分析データ」という2つの巨大な構造体が... テストしやすい設計手法を理解する 不具合対応や差し込みでの追加要望対応時の検証が大変だった 「データを流すと最後まで流れる」最低限のテストしか用意できなかった テストコードをうまく管理するノウハウは理解しておきたい (リファクタリング、レガシーコード改善ガイド、Good Code,Bad Code) 2025/01/18 16
4.機会があれば取り組みたいこと excelize.StreamWriter を試してみる GUI に Walk を使ってみたが、TUI アプリで実装してもよいかも リリースに応じた自動アップデート 2025/01/18 17
まとめ 小規模な GUI アプリ開発において、Go は有力な選択肢の 1 つ excelize パッケージを使えば、エクセルの入出力が簡単に実装できる 言語習得は簡単だが、設計スキルの習得は遠い道のり 2025/01/18 18