[Windows で Go] なぜ Go なのか

20150228-01-go-catch

なんか、手元のメモが膨らんだついでに、 「Windows で Go する」 と題して Windows で Go 言語を使う入門記事の継続投稿(なぜ連載と言わない)をはじめます。眉につばつけて読んでください。


(この記事は「WindowsでGo」の第1回です)

コンピュータやってると、みんな何か軸足になるプログラム言語をもっていて、 それでさらっとツール書いたり、大規模なアプリケーションを書いたりしている ものだ。ぼくの場合、その軸足というのは長いこと Perl だった。しかし、 ここ数年、すごい勢いで潮目が変わってきた。PaaS で Perl が提供されない とか、プロフィールの言語記載欄に Perl が載ってないとか、Perl向けSDKを 提供しないサービスがあるとか…。

自然言語処理などでずっと Perl を重宝していたこともあり躊躇していたけれ ど、ようやくサンクコストを払って新しく軸足になる言語を選ぶことにした。

選定ポイントはこんな感じ:

  • 用途は CLI および Web
    コマンドラインでさらっと動かすツールのほか、Web アプリケーションの 作成に使いたい
  • マルチプラットホーム
    ぼくは主環境が Windows なのでコマンドプロンプトで動かない言語はパス。 サーバ側は一般的なUNIX環境で動けばいい
  • 即実行可能
    ぼくは試行錯誤タイプなので、ちょっと書いては動かして直し…を繰り返す。 スクリプト言語として、すぐ実行できることが望ましい
  • それなりにライブラリが揃っている
    別になくてもいいんだけど、CSSクエリとかふつうにできるとうれしい
  • スクリプトの例示が容易
    事例を書いたとき、スニペットとしてさらっとどこにでも貼り付けられること。 疑似言語的にアルゴリズムを示したいときとか、これができないと死ぬ
  • パラダイムシフトが極端すぎない
    「少し関数型」くらいならいいんだけど。非同期・コールバックバリバリ とかいうのもちょっと。他の人が見てなんとなくわかるのがいいのね

俎上に乗りそうな言語をチェックしてみよう:

  • JavaScript (Node)
    すでにヘビーに使っていて、一時期「よし! 全面的にJavaScriptに乗り 換えよう」と思ったんだけど、あきらめた。理由はコールバック地獄と、 やってない人にはわかりにくい Promise とかのしくみ。今の時点で Stream とかもどうなってるのかとか毎日追跡してなきゃいけない。めんどう
  • Ruby
    Rails 専用言語だと思ってるのでパス
  • PHP
    プギャーm9…じゃなくて。PHP/FI 時代から見ていると、あまりにコロ コロ仕様が変わりすぎる。おまけに php.ini で動作が極端に変わるので 安心できない。「.htaccess でコントロールすればいいんじゃないの?」 とか思ってる人は、rootと一般ユーザが厳格に区別されている環境とか、 CLI用途のことを思い出してほしい
  • Python
    2系か3系かは別の話。構文がインデントに依存しているため、行頭空白を カットする環境でテキストを貼り付けてソースコードの例示がしづらい。 具体的に言うとマイクロソフト系の MUA とか、某巨大掲示板とか、Facebook とか。これ、致命的じゃない? Gistに貼ればいいんだけどさ

こうやってざらっと見ていって「ピカチュウ、キミに決めたぁ!」ということ になったのが Go だ。

  • CLI/Webで使える
  • マルチプラットホーム対応
  • コンパイラ型言語だが go run script-name.go で即実行も可能
  • コピペ万歳
  • そんなにあたまよくなくてもつかえる

ということで条件に合う。なにより、発表から数年経ってライブラリがかなり 充実したのがポイント高い。クローラくらいなら数分で書ける勢いだ。おまけ にコンパイルすれば速い。

個人的には、

  • Google謹製なのでいつ打ち切られるかわかんねえ(Google Waveの悲劇 を忘れるな)
  • ライブラリ、また github かよ!
  • 名前が Go とか一般動詞なのがキモイ
  • イメージキャラクターが人をなめくさっている
  • おまけにキャラクターの名前が gopher で、これは Web 興隆前の疑似ハ イパードキュメントシステムのことなので歴史改ざんにつながる(のか?)

と、いろいろ不安はあるんだけど。

まあ、Go で行きましょ。Go!

そんなわけで、とりあえず、「軽くスクレイピングができるくらいのレベル」 まで Go で目指してみよう。