2016年5月5日木曜日

書籍「スターティングGo言語」

2016年4月に発売された「スターティングGo言語」を一読しました。

最新のGo 1.6に対応しており、他の開発言語でプログラミング経験のある方がこれからGo言語を学ぶ際に適した入門書だと思います。

最後まで読み進めると、例えばインターネットから取得したテキストファイルを取り扱ったり加工したりするといった、コマンドラインツールを作成できるまでの内容を習得できます。

著者の松尾愛賀さんにて、しっかりと準備や下調べを行って自信を持って執筆されている印象を受けました。

ちなみに松尾さんは4/23(土)に東京で開催された「Go Conference 2016 Spring」にてお見受け致しました。移動の新幹線の中で読もうと本書を持参していたので、あわよくばサインでも頂ければ!?と思っていたのはナイショの話です(^^;)

以下、私の個人的な所感を徒然なるままに。ご参考までにm(__)m

良かった点


通常の学習では気にしない&ならないような部分までコーディングして動作を検証されていました。私自身も「こういうものなのだろう」と流して学習していた部分を回収できたところがあったので良かったです。

 例)ポインターのポインターを操作するためのポインター:***int

前半の文法に関する章では、本質的な表記だと冗長化したり理解に時間がかかるが、一先ず学習するであろうものはシンプルに表現されていることを体験できます。(Go言語のポリシーのひとつである「Simplicity is Complicated」ですね!q@w@p)

後半にはgoコマンドや標準パッケージに関する解説があり、本書の前半や「A Tour of Go」などで一通り文法を学んだ後、次に何ができるか?何をやろうか?となった際などに活用できます。

悪かった点


ページ数の制限もあるのだと思いますが、コード例の多くが一部を抜き出したものであり、例えば変数の定義が前出のコード例に中にあったりするなど、読み解きづらい箇所があります。

ダウンロードできるサンプルコードは、紙面のすべてのコードを網羅したりgo runで実行できる形式にするなど「本書でのコードの正しい姿」として収録しておいた方が良かったです。

見つけた正誤表


98ページの下から6行目のコード内

 戻り値の( )が省略されていない。

  誤:func div(a, b int) (int, int) // コンパイルエラー
  正:func div(a, b int) int, int // コンパイルエラー

225ページのコード内の上から14行目

 MyStringではなくStrings

  誤:/* []stringへのエイリアスMyString */
  正:/* []stringへのエイリアスStrings */

私なりの補足


58ページの「暗黙的な定義」に追加

 定義されている変数(a)に対して暗黙的な定義を行うとコンパイルエラーになりますが、

  var a int
  a := 1 // コンパイルエラー

 定義されていない変数(b)が含まれていれば、暗黙的な定義を行うことができます。

  var a int
  a, b := 1, 2 // bは定義されていないため暗黙的な定義ができる

97ページの下から2行目のreturnはなくてもよいのでは?

 Go 1.1から、関数の最後の文が構文的に終端ステートメントである場合は最後のreturn文は省略できるようになっています。(https://golang.org/doc/go1.1#return

121ページの下から4行目の「どのような局面で役に立つのか?」

 同名のパッケージをimportする時に役立ちます。

 import (
         "text/template"
         htmplt "html/template"
 )

P.S.付録は読んでいないのですが上田さんがレビューされているので大丈夫でしょう!q@w@p

2016.05.19 出版社に報告して正誤表になりました。

2016年3月12日土曜日

Golang 勉強会 in Kagawa

2/27(土)に香川で開催された「Golang 勉強会 in Kagawa」に参加してきました。



今回はGDG Shikokuさん主催のGo言語のイベントで、東京からGoCon主催者の上田さん、開催地の香川から堀内さん、岡山から萩野さんと私が発表&スタッフで参加しました。

堀内さんが参加されるということで所属の「SLP-KBIT」の方々も多く参加してくださり、参加者の社会人と学生さんの割合がおおよそ半々となりました。

上田さんはモバイルアプリに関するお話しを、堀内さんはWebアプリに関するお話しを、私は概要紹介と入門ハンズオンを、とバラエティに富んだイベントでした。

発表資料につきましては、イベントサイトの「イベント資料一覧」をご参照ください。私の発表資料は「It's gotime!」(概要説明)と「入門ハンズオン」です。

記録として、私目線での開催までの流れをご紹介。

  1. 堀内さんとGDG Shikokuさんが出会う。
  2. 香川でGo言語の勉強会を開催する話に。
  3. GDG Shikokuさんから登壇のお話しを頂く。
  4. 私から萩野さんに参加をお願いする。
  5. Go Conference 2015 Winter」にて登壇者を募集。
  6. 上田さんが参加を表明してくださる。
  7. 第2回 関西golang勉強会」にて堀内さんが登壇者&参加を募集。
  8. Okayama ComCamp 2016 powered by MVPs」にて開催を告知。
  9. 無事に開催!q@w@p

以下、自分のお話しです。

会場でのアンケートでGo言語は初めてという方も多かったので、しっかり説明しよう&わかってもらおうと概要説明に少し力が入っていたようで(^^;)長めの時間となってしまい、その分、入門ハンズオンの時間が短くなってしまいました。

概要説明は、結果として後で発表された上田さんや堀内さんのお話しの内容について簡単に説明できていた部分もあったので、進行としても良かったかと思います。

業務多忙でまとまった時間がとれていなかったため、入門ハンズオンのネタは会社のお昼休みの30分ほどを使って日々準備していました。前日になっても資料化する時間がとれないほどで当日の移動のフェリーの中でなんとか資料化できました。



入門ハンズオンでは「タイピングゲーム」を題材にしました。時間がなかったのでGo言語のコード構造をお話ししつつ、ゲームのソースをコーディングして動かして頂く流れになりました。

内容的には、goツールでは

  • go fmt
  • go run
  • go build

を、文法では

  • 標準入力(fmtパッケージ)
  • 標準出力(fmt.Scan())
  • 条件文(if文)
  • 繰り返し文(for文)

を紹介できたので、まずは最低限のプログラミングは行って頂けると思います。

ハンズオン中は、上田さんや萩野さんから補足やアドバイスを発言して頂いたり、学生さんのフォローを堀内さんが引き受けてくれたりと、皆さんのご協力を頂いて進められました。

次のステップとして改善内容も用意していたのですが、時間がないため内容の紹介だけで終わってしまいました。いつの日かGo入門ハンズオン(?)としてリベンジしたいところです。

改善では、

  • 問題をテキストファイルから読み込む
  • タイマーを使ってカウントダウンを表示
  • 乱数を使って問題をランダム表示

などを紹介していますので、興味のある方には引き続きチャレンジして頂けると思います。



参加者の皆様、不足の点すみませんでした&ありがとうございました。
上田さん、講師のお引き受け&東京からの来香、ありがとうございました。
堀内さん、イベント告知&学生さんのフォロー、ありがとうございました。
萩野さん、体調不良となっての来香&フォロー、ありがとうございました。
GDG Shikokuの皆様、お世話になりました&ありがとうございました。

心残りは、業務のため翌日の「うどんツアー」に参加できなかったことですね(T_T)

Okayama ComCamp 2016 powered by MVPs


2/20(土)に岡山で開催された「Okayama ComCamp 2016 powered by MVPs」に参加してきました。



私はMVP (Most Valuable Professional) ではないのですが、主催者のきよくらならみさんからお声掛けを頂きまして、今回登壇させて頂くことになりました。

Microsoft社主催のイベント「Japan ComCamp powered by MVPs」ということで、私は「Microsoft × Go」というタイトルでGo言語にまつわるプロダクトを中心に以下の内容でお話しさせて頂きました。



Go言語の紹介

Go言語を概要レベルで紹介させて頂きました。会場でGo言語を使ったことがある人に挙手して頂いたところほとんど手が挙がらなかったので説明意義があって良かったです。

MS Open Tech社

Microsoft社とオープン技術の橋渡し役を担ったMS Open Tech社とその中で取り扱われたGoプロダクト(Packer、Docker、Kubernetes)の紹介、その全てがMicrosoft Azureに取り込まれて今後のWindows Containerにも引き継がれるだろう、という内容でお話しさせて頂きました。

vscode-go

コードエディター「Visual Studio Code」用のGo言語エクステンション「vscode-go」とインストール手順を紹介させて頂きました。

こちらは昨年末の「Go Advent Calendar 2015」の23日目の記事「vscode-go/READMEとdelve/Buildingの日本語訳」を要約する感じで仕上げました。

本当は実際にデモを行ってコード補完やデバッギングの様子をお見せしたかったのですが、発表時間の関係でそこまでできなかったのが残念です。

Azure SDK for Go

Microsoft AzureのREST APIをGo言語から扱うための「Azure SDK for Go」について紹介させて頂きました。Go言語だけがベータ版の状態なので早く正式版となって公式サイトに掲載して頂きたいところです。

ベータ版というだけのことはあり、私が資料を作成していた期間中にもディレクトリー構成が大きく変わったりしました。(おかげで見やすくなったので嬉しかったです。)

Azure App Service

Microsoft AzureのPaaS環境でWebアプリを開発&実行できるサービス「Azure App Service」でのGo言語用の「Go Sample App」と3つのデプロイ方法(GitHub経由、Web内、FTP)を紹介させて頂きました。

こちらもWebブラウザーだけでコード編集からデプロイまでを行えるデモを行いたかったのですが、発表時間の関係でそこまでできなかったのが残念です。

Visual Studio Online "Monaco"やKuduを使うことによってWebブラウザー内でコード編集からコンパイル&デプロイまでをシームレスで行えられた時には正直感動しました。

個人的には発表駆動と無料1時間枠のおかげで初めて触るApp ServiceでGo言語のWebアプリを実行させるまでの手順を習得できて良かったです。


さいごに

とにかくMicrosoft社とGo言語にまつわる情報が少なかったです。日本語となるとさらに減りましたので、本記事が少しでもお役に立てば幸いです!q@w@p

参照記事

2015年9月6日日曜日

Golang勉強会

私事ながら「東京フリープラン二日間の旅」の二日目、風の噂で聞いていたGo/golang/Go言語に関するイベントがなくなったということで、9/5(土)に東京は文京区にて「Golang勉強会」を開催しました!q@w@p

開催17時間前(!?)でのイベント告知にも関わらず、@sinmetalさん、@tenntennさん、@ohkawa_mさん、私(@qt_luigi)の4名のgopherに参加して頂きましたm(__)m

会場は@sinmetalさんに山盛りご協力して頂いて「TOPGATE」さんの会議室を使わせて頂きました。(建物の写真を撮るのを忘れましたm(__)m)

集合

初めての地ということで余裕を持って一時間前に現地入りしました。案の定、最寄り駅から会場までの道中で迷ってしまったので正解でした(^^;) 無事に@sinmetalさんと合流して会場の向かい側の台湾料理のお店で昼食をとりました。


食事後、建物の入り口で待たれていた@ohkawa_mさんと合流して会場入り。@tenntennさんも少し迷いつつも無事に合流されました。

3人とも@ohkawa_mさんとは「はじめまして」でしたが、すぐに打ち解け込んで頂けられたので一安心でした。

オープニング

友達が集まって「んじゃGoするかな〜」という感じの良い雰囲気だったので「なくてもよいかなー」とも思ったのですが、イベントとして開催してしまったので(^^;) 開催の挨拶をさせて頂きました。その後、各自にて自己紹介と本日のテーマ(以下を参照)を発表して頂きました。

  • @sinmetalさん:BigQueryにJSONを渡すGoツールの作成
  • @tenntennさん:gomobileにてボタンの作成
  • @ohkawa_mさん:並列処理の実装
  • @qt_luigiさん:自作Goツールの整理

私はテーマ発表の直前に暗号化+自己解凍形式にしていた自作Goツール群がexeファイルだったことをに気付いてしまい、のっけからテーマを失ってしまいました。ちなみに参加者は全員MacBookでした…(^^;)


もくもく会&交流会

主な活動内容は次の通りでした。

  • Goトーーーク
  • @ohkawa_mさんの質問コーナー(並列処理、channel、など)
  • @sinmetalさんと私がgophersのslackに参加
  • @tenntennさんによるsay(= OS Xのテキスト読み上げ)コマンドの紹介
  • おやつタイムの「きのこ vs たけのこ」戦争にて「たけのこ」が勝利
  • @tenntennさんによる「reflectのススメ(?)」から「オレオレTypeの試み」
  • @sinmetalさんの質問コーナー(構造体の解析、json.Unmarshal、など)

コードの提示などで「Go Playground」が大活躍しました!q@w@p ありがとう「Google」という名の会社さん!w


クロージング

和気あいあいとした盛り上がりの中、気が付けば予定時間の16:00を過ぎて17:00近くに。最後に皆さんから一言ずつ感想を頂いた後、私の帰りの飛行機に間に合わすべくドタバタと帰り支度を開始しました。

感謝ありがとう

@tenntennさん、先生やらお話やら、感謝ありがとう。良い刺激を頂きました。またGoConにて!q@w@p

@ohkawa_mさん、参加やら質問やら、感謝ありがとう。Goもだちが増えました。帰り道は助かりました&楽しかったです!q@w@p

@sinmetalさん、会場やら付合やら、感謝ありがとう。二日間お世話になりました。次は岡山にて!q@w@p

関連サイト



GCPUG Okayama #5 in 東京

私事ながら「東京フリープラン二日間の旅」の一日目、GCPUG東京に確認したところGoogle Cloud Platformに関するイベントはないということだったので、9/4(金)に東京は渋谷にて「GCPUG Okayama #5 in 東京」を開催しました!q@n@p

諸事情により開催二日前でのイベント告知&週末の平日の昼間の開催にも関わらず、12名の方に申し込んで頂いて11名の方に参加して頂きましたm(__)m

会場は@kazunori_279さんに山盛りご協力して頂いて「dots.」さんを使わせて頂きました。


会場説明

はじめにdots.の小沢さんから会場の説明を頂きました。


GCPUG&岡山支部のご紹介

Okayama名義での開催ということで(^^;) GCPUGについてと岡山支部の活動内容を紹介させて頂きました。


自己紹介タイム

程よい人数だったので自己紹介をして頂きました。

  • 業務でGCPを使い始めた方
  • GCPUG湘南支部の皆さん
  • GCPを使われている方
  • ISUCON5に参加される方

などなど。個人的にはアイコンは見たことがあるがお会いするのは初めてという方もいらっしゃいました。

もくもく会&交流会

@kazunori_279さん、@soundTricker318さん、@sinmetalさんのお三方に参加して頂けたことで、もくもくするだけの会ではなく話し合いもできる会となりました。

具体的な質問がなされ、しっかりとした回答が返っていました。@soundTricker318さんは実際の画面を見せながら解説してくださいましたm(__)m

皆さん何かしらのGCPサービスを使われていたため、まつわる話も数多く飛び交っていましたし、そんな話に聞き耳を立てつつ、もくもくされている方もいらっしゃいました。

また、半数がGCPUGメンバーということでGCPUGについてもいくつか議論がなされました。

会場について

8月にオープンしたばかりでとても綺麗です。軽快なBGMが静かに流れていたり飲食も可能なのでちょっとしたお店の気分。とても居心地が良かったです。



今回は一つの円卓に着席する形だったので、お互いに顔を見合わせて会話もしやすく、和気あいあいとした雰囲気で会は進みました。



プロジェクターを使用することも出来たので、質疑応答の際などに具体的な例が示されたので理解しやすかったです。


途中、ゲリラ豪雨がありましたね。カミナリも一つ落ちたかな。

クロージング

宴もたけなわ(?)、予定時間の17:00近くになったところで参加者の方々から本日の感想を頂いた後、片付けに入りました。

イベント公開時は「もくもく会&交流会だけで4時間は長過ぎるよなぁ」と思っていましたが、参加者の皆さんにて活発なやりとりをして頂けたおかげで充実した時間を過ごました。

感謝ありがとう

参加者の皆さん、急募&平日昼間のご参加、感謝ありがとう。何か一つでも得られるものがあったのなら、これ幸いです!q@n@p

@soundTricker318さん、お顔見せ&質疑応答&お話しの数々、感謝ありがとう。イベント開催の期待しております!q@n@p

@sinmetalさん、お付き合い、感謝ありがとう。次回のGCPUG岡山よろしくお願い致します!q@n@p

小沢@dots.さん、会場の提供&イベントサイトや開催までのフォロー、感謝ありがとう。機会があればまた利用させて頂きます!q@n@p


@kazunori_279さん、最初から最後まで&何から何まで、感謝ありがとう。佐藤さんのおかげで無事に開催することができました!q@n@p

関連サイト

2015年7月20日月曜日

書籍「基礎からわかるGo言語」と改訂2版

2013年の夏、移動するフェリーの中で「ひまつぶしに」と始めた本書「基礎からわかる Go言語」の写経が私のGo人生(?)の始まりだったのかもしれません。写経や復習で結構使い込んでいたので「もう1冊、買わなければ」と思い始めていた2015年の夏、Go 1.4に対応した「改訂2版 基礎からわかる Go言語」が発売されたので早速購入しました。

何が変わったのかと興味津々、私調べで1ページずつ目視でざっくりと新旧を比較して、見つけた変更箇所は約30カ所。サンプルコードも文字コード変更による日本語の差分と2つの新規追加分ぐらいで、内容的には大きくは変わっていませんでした。

すなわち、Goの言語仕様は大きく変わっていない、つまり、安定しているということです。これは新たに言語を習得したり導入したりする部分で重要なことだと思います。Go 1.x系はコードレベルでの上位互換性が保証されていることも強みです。

小さくは変わっているので、主な変更点をご紹介。

Goのバージョン

 Go 1.0.3からGo1.4.2に変わっています。
 go runコマンドの実行時エラーにてexit statusが出力されています。
 サンプルのソースコードもGo 1.4で実行し直して動作確認されているようです。

Windows対応の強化

 コマンドプロンプト上での作業時における大半の注意書きがなくなっています。

コラムの追加

 新しいコラムがいくつか追加されており、既存のコラムの修正も少しあります。

追加された文法に対応

 メソッドの章ではGo 1.1からの「Method values」が追加されています。
 スライスの章ではGo 1.2からの「Three-index slices」が追加されています。
 繰り返し処理の章ではGo 1.4からの戻り値なしの「For-range loops」に変更されています。

その他、

 公式のダウンロード類のURLがgolang.orgに変更
 main関数を含む複数ファイルの実行不可
 go docコマンドの廃止(現在はgodocだがGo 1.5から復活)
 ログファイルの追記モード、など

細かなところまでキッチリと更新されています。

本書のウリは「公式サイトに書かれていること」を解説やコードを交えて日本語で書かれている点です。また、正誤表やミスがない点も挙げられます。たまにベテランgopher(?)の方が「◯◯を初めて知った」と発言されているシーンをお見受けしますが、「それ、本書に書かれてますよ。」というものだったりします。

残念な点を挙げるとしたら、来月リリース予定のGo 1.5対応でなかった点ですね。今後は「Goでモバイルアプリを作ろう」みたいな書籍も出てくるかも!?

これからGoを始めるgopherにはオススメですし、知識の再確認用にベテランgopherにもオススメの一冊です!q@w@p

私版:正誤表

 31ページのCOLUMNにて、Mac版のgitインストーラーのダウンロード先がcode.google.comになっていますが、現在はsourceforge.net(http://sourceforge.net/projects/git-osx-installer)です。

[2015.07.20] go docについて訂正

 go docコマンドですが、改訂2版には「Go 1.2で廃止」と記載されておりGo 1.4.2でも使えませんがGo 1.5からは復活するようです。

$ go version
go version go1.5beta2 darwin/amd64
$ go
Go is a tool for managing Go source code.

Usage:

go command [arguments]

The commands are:

build       compile packages and dependencies
clean       remove object files
doc         show documentation for package or symbol
env         print Go environment information
        (以下、省略)

2015年6月26日金曜日

Go Conference 2015 summer

6/21(日)に東京で開催された「Go Conference 2015 summer」に参加してきました。

会場の日経ビル(右側の少し黒っぽいビル)

本記事は私の活動記録となっているためGoConに関する内容につきましては他の方々のブログ記事などをご参照ください。

q@w@p 今回は抽選形式のLT枠で申し込みました!

申し込み当初は「こんなところでGoは使われています」をテーマにGoのプロダクトやGoで開発している会社などを国内外問わず紹介しようと情報を集めていました。

「あれも紹介しよう」「これも紹介せねば」とスライドを書き連ねて行くうちに50枚を越えてしまい何回練習しても発表時間の5分に収まらなくなっていました。

スライドを二分割してさらにテーマを日本の会社だけに絞ることで何とか発表時間内に収めることができました。(そのためタイトルに「日本の会社 編」を付けてあります。)

その後もGoで開発した会社の情報が公開されたり開発中として紹介していたプロダクトが正式リリースされたりとGo界隈の活発さに一喜一憂しながらスライドに反映して行きました。

発表後に「ウチもあと少しでGoで開発したシステムをリリースできます!」と声を掛けて頂いた会社さんもありました。私の力不足で調べ切れていない会社さんもまだまだあるようなので今後とも楽しみです。


q@w@p 今回も皆様のツイートをTogetterへまとめさせて頂きました!

今回は朝から電源を確保できたので最後まで「なんちゃってリアルタイム」でトゥギャリを更新し続けることができました。

手違いというか何というか対象キーワードを「#gocon」ではなく「gocon」としていたために周辺のツイートも集めてしまいましたが盛り上がり感を伝えることができていると判断してそのまま採用しました。


q@w@p ネット越しのgopherに会うことが出来ました!

今回は会場で懇親会が開催されましたが、その恩恵を受けることができました。

「gopherのgopherはみなgopherだ!」のごとく +Yasutaka Kawamoto さんから +Ato Araki さんを、 +Tetsuya Onuki さんから +Daigo Ikeda さんを、それぞれ紹介して頂きました。

q@w@p さいごに

遠方枠を用意して頂いたおかげで地方から安心して申し込みを行うことができました。

そして今回も +Takanobu Hagino さんのおかげで東京に来ることができましたm(__)m
# 「Haginoツアーズ」Presentsの旅、満喫させて頂きました!

来月7/11(土)に香川県で開催される「オープンセミナー香川@2015」にてGoについて少しお話させて頂くのですが、その際に今回のGoConについても少し報告させて頂く予定です。

あ、今回はお尻があまり痛くなりませんでしたね q@w@p

発表者へ配られたゴーファー人形と
サイバーエージェント様からの差し入れ水