0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてWindowsで実行できるコマンドをGoで作ってみた

Posted at

はじめに

とある所で、Goで作られたWindows上で、実行できるコマンドを見かけた。

自分の中でWindows上で、実行できるコマンドというと、Visual Basic とか Delphi とかのイメージがあり自分には縁遠い存在と思っていました。

そんな中、お!Goで作れるんだ!ということを知り、とりあえず簡単で使いたいものをGeminiに教わりながら作ってみました。

作ったもの

自宅のDockerで管理している趣味管理システムをいつもお気に入りから起動していたので、起動するコマンド

手順

Geminiにソースを作ってもらう。

package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	// コマンドライン引数をチェック
	// 期待する引数は "hms" です。
	if len(os.Args) < 2 {
		fmt.Println("Usage: home <service>")
		fmt.Println("Example: home hms")
		return
	}

	service := os.Args[1] // 最初の引数 ("hms") を取得
	var url string

	// 引数に基づいて開くURLを決定
	switch service {
	case "hms":
		url = "http://192.168.10.10/hms"
	case "mp4": // 例として別のサービスを追加
		url = "http://192.168.10.11/"
	default:
		fmt.Printf("Unknown service: %s\n", service)
		return
	}

	// Windowsの 'start' コマンドを使用してブラウザでURLを開く
	// cmd.exeの 'start' コマンドは、指定されたファイルをデフォルトの関連付けられたプログラムで開きます。
	// この場合、URLなのでデフォルトのブラウザで開かれます。
	// `/c` はコマンド実行後ウィンドウを閉じるためのオプションですが、ここでは 'start' が非同期にブラウザを起動するため不要です。
	// 正しくは、`start` コマンド自体を `cmd.exe` を使って実行します。

	// cmd /c start "" "URL" の形式で実行します。
	// 最初の "" はウィンドウタイトルとして必要です。
	cmd := exec.Command("cmd", "/c", "start", "", url)

	err := cmd.Run()
	if err != nil {
		fmt.Printf("Error launching browser: %v\n", err)
		return
	}

	fmt.Printf("Launched browser for service '%s' at %s\n", service, url)
}

フォルダ構成

Geminiに教えて貰いながら、一応、こんな感じ。

C:\dev\vscode\workspace\hcmd-go>tree /f
Folder PATH listing for volume Windows
Volume serial number is A037-99C2
C:.
│   home.exe
│   README.md
│
└───cmd
        main.go

ビルド

C:\dev\vscode\workspace\hcmd-go>go build -o home.exe cmd/main.go

出来上がったので、実行してみる

C:\dev\vscode\workspace\hcmd-go>home hms            

Windowsのパスに追加して、永続的に利用

「環境変数を編集」から「C:\dev\vscode\workspace\hcmd-go」を追加

ソース

感想

更にモリモリオプションを追加してみたくなってきました。
次はマジックパケットを送信するオプションを追加しようかと、目論んでおります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?