コマンドラインからググる
面白いツールが公開されている。
もちろん Windows のコマンドプロンプトでも使える。 たとえば
$ ggr -i ググレカス
と打ち込めば,既定のブラウザが開いて

などと表示される。 ちょっとしたことなんだけどね。 キャラクタ端末メインで仕事してる時はこういうのが便利だったりする。 面白いのでうちの子として迎え入れることにした。
コードを見たら main.go に全部入っていて,それはそれで全然いいんだけど,折角なので fork してパッケージ化してみることにした。
これで main 関数(ggr/cli.go)はこうなる。
package main
import (
    "flag"
    "os"
    "github.com/spiegel-im-spiegel/ggr"
    "github.com/toqueteos/webbrowser"
)
// sample url
// https://www.google.co.jp/search?q=test&ie=utf-8&oe=utf-8&hl=ja
func main() {
    var (
        imageFlag bool
        newsFlag  bool
        shopFlag  bool
    )
    f := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
    f.BoolVar(&imageFlag, "i", false, "image flag")
    f.BoolVar(&newsFlag, "n", false, "new flag")
    f.BoolVar(&shopFlag, "s", false, "shop flag")
    f.Parse(os.Args[1:])
    q := f.Args()
    t := ggr.TypeNormal
    if imageFlag {
        t = ggr.TypeImage
    } else if newsFlag {
        t = ggr.TypeNews
    } else if shopFlag {
        t = ggr.TypeShop
    }
    g := ggr.NewGgr(ggr.LangJa, t, q)
    webbrowser.Open(g.GetSearchURL())
}
まぁ,パッケージ化していいことがあるかと言われれば微妙なんだけど,最近は CLI ツールでもロジック(DDD で言うところのドメイン・レイヤ)はパッケージとして独立させたほうが何かと使い勝手がいいような気がしている。
というわけで,絶賛中断中の gpgpdump は全面的に書きなおす予定。
いやぁ,最近仕事(Java アプリケーション)で煮詰まってたので,いい気分転換になったよ。 やはり自分の自由に書けるコードは楽しい。
(ちなみに,いつものようにブランチでの作業を GitHub 上で自分に PR しようとして間違えて作者様に PR してしまったのは内緒だ。 Fork したリポジトリからの PR は必ず Fork 元に飛んじゃんだね。もうしません。反省)
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。と思ったら絶版状態らしい(2025-01 現在)。復刊を望む!

