2017年3月22日水曜日

書籍「Goプログラミング実践入門」

2017年3月に発売された「Goプログラミング実践入門」をざっくりと一読しました。

本書は2016年7月に発刊された洋書「Go Web Programming」の翻訳書であり、Goの標準パッケージを中心にWebアプリケーションの仕組みや作り方を学習できる内容となっています。

Goを使ったことがある方が対象となっているため、Goが初めてという方は公式チュートリアル「A Tour of Go」で文法の基礎を学んだり、Webアプリが初めてという方は書籍「Go言語入門」を一読するなどしてみてください。

本書で使用されている主なGo標準パッケージは次の通りです。

  • Webサーバー:net/http
  • テンプレート:html/template
  • テータ形式:encoding/xml, encoding/json
  • データ保存:encoding/gob, encoding/csv, database/sql
  • テスト:testing, net/http/httptest
  • ファイル:os, io/ioutil
  • 画像:image

読み進めると「物事の仕組みを理解した上で作業を行うこと」がコンセプトであることがわかります。前半のWebアプリケーションの解説はまさにそれにあたり、知識が曖昧な方などはココでしっかりと基礎固めを行なうことをオススメします。

各章では内容に沿ったサードパーティのパッケージも紹介&使用されていますし、Goの特徴である並列処理についても解説だけではなく画像処理の実例で書かれています。また、各種クラウド環境へのデプロイについても書かれており、

 Webサーバー処理、HTMLテンプレート、データベース接続、
 データ形式(XML、JSON)、ファイル操作(テキスト、画像)、
 並列処理、テスト、デプロイ

と、GoでHTTPサーバー&Webアプリを開発するための一通りの要素が詰め込まれています。

ちなみに、本書内で使用されるデータベースはPostgreSQL(GAEではMySQL)です。

ざっくり読みですが、個人的には、net/httpパッケージの仕組みを学べたり、触ったことがなかったencoding/gobパッケージについて知ることができました。

ひとまずの読書感想文は書けましたので、2周目はもう少し落ち着いてコードを試したり内容を読み進めて行こうと思います。

2017年1月8日日曜日

campoy/go-web-workshopを日本語に翻訳しました

記念というか記録というか、そんな意味合いで書き残します。

2016年10月7日にFrancesc Campoy FloresさんがGitHubに公開したcampoy/go-web-workshopリポジトリーを目にしました。

francescさんはGoogle社でGoogle Cloud PlatformとGoに関わっている方で、go-web-workshopはGo言語でGoogle App EngineのWebアプリケーションを構築するワークショップの資料です。

その頃はGAE/Goをやり直そうと思っていた時期でしたので興味を持って読み始めました。資料は英語なのですが難しい単語が使われていなかったので読みやすかったです。そこで英語の学習も兼ねてこの資料を日本語に翻訳する事にしました。

自分が知っている内容ということもあり補助役でGoogle翻訳を使いつつsection03ぐらいまで自力で翻訳を進めていたのですが、11月11日になってGoogle翻訳の翻訳結果が今までとは比べものにならないほど読みやすい文章に変換されました。何事かと思っていると翻訳システムがフレーズベースのものからGoogle Neural Machine Translation (GNMT)という機械学習ベースのものに切り替わったとのことでした。翻訳結果が今までと全く異なるため同じ口調(?)で翻訳し続けて行くことが難しくなり、また、あまりにも読みやすかったため、これまで翻訳してきたものは破棄してGNMT版のGoogle翻訳の翻訳結果をベースに再作成して行くことにしました。

翻訳しては見直しの作業を日々少しずつ進めて12月31日にひとまず翻訳作業が終了しました。2017年1月1日から全体の見直しを始めて言い回しや単語を合わせたり翻訳結果や文章のおかしい部分を修正したりしていきました。1月2日には翻訳中に見つけたタイポ集(?)を本家へpull requestしました。

ある程度の見通しが立ったので1月4月に意を決してTwitterにて著者の@francescさんに「あなたのgo-web-workshopを日本語に翻訳しています。出来上がりを自分のGitHubで公開したいのですがよろしいですか?」とツイートし、ドキドキしながら待つこと数分...オリジナルへの参照を保持することを条件に許可を得ることができました!文章でハッキリとO.K.と言われた訳ではなく「いいね」で回答されたので少々自信がありませんが...(^^;) フォロー外から拙い英語で突然の問い合わせだったにも関わらず反応して頂いて許可まで頂けれたことは大変嬉しかったです。

そして1月7日、現時点までのcampoy/go-web-workshopのpull requestの内容を反映させた後、日本語訳としてqt-luigi/go-web-workshop-jpを自分のGitHubに公開させて頂きました。その旨を再度francescさんに報告したところ再び「いいね」を頂けられたのでおそらく大丈夫でしょう(^^;)


本資料ですが、個人のGAE/Goの学習であったりハンズオン形式の勉強会の資料などで活用して頂けれたらなぁと思っております。個人的には自分が主催しているGCPUG岡山にてGAE/Goの入門ハンズオンを開催して使いたいところです。

恥ずかしながら先月まで自分の意思でGitHubを使ったことがありませんでした。先月、自分が発表する勉強会にて主催者に発表内容を伝えるために「初めてのpull request」を行い、今回、下調べや試行錯誤をしながら無事に「初めてのpush」を行うことができました。GitHubと同じようにGitも使えていない状態だったので、これを機にどちらも使えられるようにしていきたいです。

今回の作業にて、個人的には次の成果を得ることができました。

  • GAE/GoによるWebアプリケーション構築の流れ(入門レベル)
  • 英語学習(結果として多読)
  • GitHubとGitを使ったpull requestおよびpushの方法(初回なのであやふや)

2016年の自分への宿題を一先ず終わらせることができました。2017年も頑張って行きましょう。Happy Hacking!