SlideShare una empresa de Scribd logo
1 de 25
7/26開催 Go言語初心者向け
ハンズオン
株式会社リンクバル
技術部 技術グループ 船寄良登
1 自己紹介
2 はじめに
3 Go言語について
4 Go言語を使うメリット
5 開発環境セットアップ
6 flagパッケージを使ってcliツールを作ってみる(導入編)
7 flagパッケージを使ってcliツールを作ってみる(csvファイルをdbへinsertする)
8 flagパッケージを使ってcliツールを作ってみる(csvファイルを並列でdbへinsertする)
9 弊社のご紹介
10 最後に
アジェンダ
2
自己紹介
3
船寄 良登 (ふなよせ よしと)
経歴: 受託開発会社、広告代理店などでサーバサイドエンジニアとして、
webサービスの開発をおこなってきました。
これまでPHPerでしたが、最近、Railsを本格的に触り始めました。
リンクバルでは「街コンジャパン」の開発を担当しています。
趣味: 美味しい物を食べること、子供と遊ぶこと。
その他: Go言語に興味があります。Hatchobori.goというGo言語のもくもく会を立
ち上げました。https://hatchobori-go.connpass.com/
今回のハンズオンではCSVファイルを一行づつ読み込み、
MySQLへinsertする、簡単なCLIツールを作成します。
はじめに
4
Go言語について
5
2009年にGoogle社が発表したプログラミング言語です。
現在の最新バージョンは1.8.3、つい先日「Go 2」の基本方針について発表されました。
マコット・キャラクターはGopher(ホリネズミ)
The Go gopher was designed by Renee French.
(http://reneefrench.blogspot.com/)
・シンプルな言語仕様
=> 言語習得までの期間短縮
・クロスコンパイル機能
=> 標準の関数のみであれば、ほとんど環境の差異をきにする必要がない。
ex: Windowsで作ったCLIツールをMacで実行する
・OSへの非依存
=> 各種OSに標準的に備わっているAPIなどは利用せず、自前で実装している。
・処理速度がはやい
=> ネイティブコードとして実行されるので、
VMやインタプリタ言語と比較して、オーバーヘッドが少ない。
Go言語を使うメリット
6
Go言語を使うメリット
7
・並列処理が簡単に書ける
=> goroutineとchannelを組み合わせることにより、シンプルかつ、
効率的に並列処理を書くことができる。
・デプロイは、シングルバイナリをアップロードするだけ
=> デプロイが簡単
・golint、gofmtでコーディング規約が担保できる
=> 無用なコーディングルールの討論がなくなる。
コードが綺麗な状態を保てる。
・標準ライブラリある程度が充実している
・ガーベジコレクション
今回のハンズオンでは環境依存などを防ぐために
下記のURLからダウンロードをお願いします。
https://store.docker.com/editions/community/docker-ce-desktop-mac
開発環境セットアップ
8
dockerを起動します。
クジラのマークが表示されれば起動完了です。
1.開発環境セットアップ
9
CLIを利用するので、ターミナルを起動し、3つのタブを開きます。(⌘+T)
ハンズオンの中では左から、1番のタブ、2番のタブ、3番のタブと呼びます。
開発環境セットアップ
10
開発環境セットアップ
11
1番のタブで、下記のgitリポジトリをローカルの任意の場所へcloneし、
クローンしてきたディレクトリへcdしてください。
2番と3番のタブも1番と同じカレントディレクトリになるように、
cdをお願いします。
git clone https://github.com/funayoseyoshito/techlink-go
cd techlink-go
1番のタブでコンテナを起動させます。
上記のコマンドを実行すると、今回はappとdbというコンテナが起動します。
app上にはGo言語の環境が、dbにはMySQLが準備されています。
開発環境セットアップ
12
docker-compose up -d
docker-compose ps
appとdbのコンテナの中に入っておきましょう。
・2番のタブでappへ入る
・3番のタブでdbへ入る
開発環境セットアップ
13
docker-compose exec app bash
cd /go/src/github.com/techlink/cli
docker-compose exec db bash
mysql -uroot -proot
hello wold
・初めから準備されているコード(hello world)を実行してみましょう。
2番目のタブで下記コマンドを実行します。
開発環境セットアップ
14
go run main.go
go runで実行しましたが、Go言語はコンパイル言語です。
コンパイルするには下記のコマンドを使用します。
また、ファイル名を指定する場合は下記のように実行します。
go run を実行すると、コンパイル後の実行ファイルは出力せず、
コンパイルして、実行だけ行うコマンドになります。
開発環境セットアップ
15
go build main.go
go build -o upload_csv main.go
flagパッケージを使ってcliツールを作ってみる(導入編)
16
・main.goを下記のソースに書き換えましょう。
1番のタブでcdする
main.goを下記のコードに書き換えます
https://gist.github.com/funayoseyoshito/f5a206a9dd1b6d32d372b157d6e68d0d
cd app/
flagパッケージを使ってcliツールを作ってみる(導入編)
17
・2番のタブでmain.goを実行してみましょう
go run main.go
go run main.go -type p
go run main.go -help
・tableを作成します。3番のタブで下記を入力します。
flagパッケージを使ってcliツールを作ってみる
(csvファイルをdbへinsertする)
18
use app;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11),
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_users_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
show columns from users;
・外部パッケージをインストールします。
2番のタブで下記のコマンドを実行します。
・1番のタブでmain.goを下記のソースに書き換えましょう。
https://gist.github.com/funayoseyoshito/915e9336a0e40b79d334d4fbddc8c12f
19
flagパッケージを使ってcliツールを作ってみる
(csvファイルをdbへinsertする)
go get -u github.com/jinzhu/gorm
go get github.com/go-sql-driver/mysql
・プログラムを実行する
2番のタブ下記のコマンドを実行すると、予め準備してあるcsvファイルから一行
づつ読み込み、DBへinsertします。
↑user.csvファイル、名前と年齢の組み合わせで10,000行ある。
flagパッケージを使ってcliツールを作ってみる
(csvファイルをdbへinsertする)
20
go run main.go
・外部パッケージをインストールします。
2番のタブで下記のコマンドを実行します。
・1番のタブで、main.goを下記のソースに書き換えましょう。
https://gist.github.com/funayoseyoshito/01d0bf2dcbceaaa340c3900f560d2eae
・2番のタブで実行します。
flagパッケージを使ってcliツールを作ってみる
(csvファイルを並列でdbへinsertする)
21
go get golang.org/x/net/context
go run main.go -type p
最後に
22
本日はお忙しい中、弊社の勉強会にご参加いただきまして、ありがとうございました。
これからも、有意義な勉強会を開催できるように努めますので、どうぞよろしくお願いします。
最後に、弊社ではエンジニア職を絶賛募集中です。
弊社に興味がある方、は是非、スタッフまでお声かけくださいませ。
また、お知り合いでご転職をお考えの方がいらっしゃいましたら、
弊社の事をお伝えいただけましたら幸いです。
[採用ページ]
http://linkbal.co.jp/recruit/
[エンジニアブログ]
http://tech.linkbal.co.jp/
どうもありがとうございました。
23
街コンジャパン
https://machicon.jp
・日本初のイベント特化型ECサイト
・4万件以上の街コン・パーティー情報を掲載
・会員数約100万⼈(2017年7月現在)
24
カップリンク
https://couplink.jp/
恋活・婚活 マッチングアプリ
Hatchobori.go
https://hatchobori-go.connpass.com/event/63145/
・Go言語のコミュニティを立ち上げました。
・主にもくもく会がメインです。
・参加者絶賛募集中ですので、
こちらもよろしくお願いします。
最後に その2
25

Más contenido relacionado

La actualidad más candente

PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会Keisuke Utsumi
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみたYoshio Hanawa
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るYoshio Hanawa
 
WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介Takashi Uemura
 
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告y-uti
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識Fumito Mizuno
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件y-uti
 
なれる! Debian開発者 〜 45分でわかる? メンテナ入門
なれる! Debian開発者 〜 45分でわかる? メンテナ入門なれる! Debian開発者 〜 45分でわかる? メンテナ入門
なれる! Debian開発者 〜 45分でわかる? メンテナ入門Hideki Yamane
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015Rui Hirokawa
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試したy-uti
 
Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはYosuke HASEGAWA
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~takenao
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」
「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」
「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」Hideki Yamane
 

La actualidad más candente (20)

PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
CakePHPとYii_エンジニア勉強会20130820
CakePHPとYii_エンジニア勉強会20130820CakePHPとYii_エンジニア勉強会20130820
CakePHPとYii_エンジニア勉強会20130820
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介WordPress 多言語化プラグインqTranslateの紹介
WordPress 多言語化プラグインqTranslateの紹介
 
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
なれる! Debian開発者 〜 45分でわかる? メンテナ入門
なれる! Debian開発者 〜 45分でわかる? メンテナ入門なれる! Debian開発者 〜 45分でわかる? メンテナ入門
なれる! Debian開発者 〜 45分でわかる? メンテナ入門
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
 
Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるには
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
 
OSC Kansai@Kyoto
OSC Kansai@KyotoOSC Kansai@Kyoto
OSC Kansai@Kyoto
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
Go言語オーバービュー201507
Go言語オーバービュー201507Go言語オーバービュー201507
Go言語オーバービュー201507
 
「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」
「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」
「あなた」と オープンソース/フリーソフトウェア、 そして「Debian」
 

Similar a Go言語ハンズオン資料flagパッケージを使ってみる

遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetupS Akai
 
GAになったGolangでCDKを触ってみよう
GAになったGolangでCDKを触ってみようGAになったGolangでCDKを触ってみよう
GAになったGolangでCDKを触ってみようAtsushi Umakatsu
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
Livlisのcakephp事例
Livlisのcakephp事例Livlisのcakephp事例
Livlisのcakephp事例Masahiro Saito
 
職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!infinite_loop
 
2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法
2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法
2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法João Orui
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
テックリンク資料20170529
テックリンク資料20170529テックリンク資料20170529
テックリンク資料20170529yoshito funayose
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化maruyama097
 
Stripeを1年使ってみて思ったこと
Stripeを1年使ってみて思ったことStripeを1年使ってみて思ったこと
Stripeを1年使ってみて思ったことtomoaki koshi
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
HTML5 アプリ開発
HTML5 アプリ開発HTML5 アプリ開発
HTML5 アプリ開発tomo_masakura
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
KLabのゲーム開発を支える開発環境
KLabのゲーム開発を支える開発環境KLabのゲーム開発を支える開発環境
KLabのゲーム開発を支える開発環境KLab Inc. / Tech
 
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようC++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようStudy Group by SciencePark Corp.
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)parrotstudio
 
nanapiにおける継続的インテグレーション
nanapiにおける継続的インテグレーションnanapiにおける継続的インテグレーション
nanapiにおける継続的インテグレーション晃 遠山
 

Similar a Go言語ハンズオン資料flagパッケージを使ってみる (20)

遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup遅いクエリと向き合う仕組み #CybozuMeetup
遅いクエリと向き合う仕組み #CybozuMeetup
 
GAになったGolangでCDKを触ってみよう
GAになったGolangでCDKを触ってみようGAになったGolangでCDKを触ってみよう
GAになったGolangでCDKを触ってみよう
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Livlisのcakephp事例
Livlisのcakephp事例Livlisのcakephp事例
Livlisのcakephp事例
 
職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!職場で使用しているOSSの開発に参加してみた!
職場で使用しているOSSの開発に参加してみた!
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法
2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法
2016-11-28 開発・改善ワークフローにおけるDeployGate利用方法
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
テックリンク資料20170529
テックリンク資料20170529テックリンク資料20170529
テックリンク資料20170529
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化
 
Stripeを1年使ってみて思ったこと
Stripeを1年使ってみて思ったことStripeを1年使ってみて思ったこと
Stripeを1年使ってみて思ったこと
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
HTML5 アプリ開発
HTML5 アプリ開発HTML5 アプリ開発
HTML5 アプリ開発
 
Softlayer_bluemix-summit
Softlayer_bluemix-summitSoftlayer_bluemix-summit
Softlayer_bluemix-summit
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
KLabのゲーム開発を支える開発環境
KLabのゲーム開発を支える開発環境KLabのゲーム開発を支える開発環境
KLabのゲーム開発を支える開発環境
 
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしようC++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
nanapiにおける継続的インテグレーション
nanapiにおける継続的インテグレーションnanapiにおける継続的インテグレーション
nanapiにおける継続的インテグレーション
 

Go言語ハンズオン資料flagパッケージを使ってみる