標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Goで書いたファイルのコンバーターにファイル選択の GUI つける

仕事で使う月次データを日別に分解するコンバーターを Go で書いた。が、

.\month2daily [-o OUTPUT.zip] source.tsv

というコマンドラインのパラメータ、非開発者では使えんので。GUI が欲しい。

Walk 使おうかとも思ったが、manifest ファイルを作成しないといけないのがややこしいので、パス(今は要らんかもしれんけどね)

ローカルホストにウェブサーバー立てて、ブラウザでアクセス

  1. 元のコンバーターを、コマンドラインクライアント部分と、純粋にコンバートするだけの処理を別パッケージに分ける。
  2. net/http で、ウェブサーバーを立てる
    • get リクエストで、アップロード用のフォームを書いた html 出して、post リエクストでファイル受け取って、コンバートして返すだけ
  3. このままだと、本体を起動した後、ブラウザを別途起動するのが面倒くさいので、 https://github.com/toqueteos/webbrowser でブラウザも同時に起動するようにした。

OS標準のファイル選択ダイアログを使う

なんか、たかだかファイルの選択だけにウェブサーバーとブラウザを起動するのも大掛かりすぎると、作ってしまってから気がついた。こんなの OS標準のファイル選択ダイアログを呼んだ方が早いのでは( 判断が遅い!

syscall 使って自力で呼ぼうかと思ったが、既成のライブラリがあったので、それ使った → https://github.com/sqweek/dialog

成果物

zetamatta ちゃうけど、気にせんといてな

  • https://github.com/zat-kaoru-hayama/month2days/
    • main.go … コンバートロジック(ビジネスロジックだけ)
      • cmd/ … いろんな形式の実行ファイル
        • month2days/ … コマンドラインクライアント
        • month2daysweb/ … ウェブサーバー&ブラウザによるクライアント
        • month2daysgui/ … OSダイアログ出すクライアント
      • pkg/
        • webfilter/ … ファイルアップロード用のウェブ処理をやる部分を別途汎用パッケージ化して分離したやつ。でも、使わんやろなー

記事にしたけど、ほとんど自分用のメモやね