Slide 1

Slide 1 text

Go言語でAPIサーバーを立てて得た知見 Umeda.go / 2018年10月5日(金) SCC Osaka Co.,LTD.

Slide 2

Slide 2 text

五島 僚太郎 自己紹介 ごとう りょうたろう

Slide 3

Slide 3 text

活動 イベント ・OsakaRubyKaigiスタッフ(この時にumeda.goのお声がけを頂く) ・naniwa.rbの運営へ(https://naniwarb.doorkeeper.jp/events/80283)  ※20日に第一回開催します! OSS活動...? ・rails newする時--templateに渡すとdocker周りの設定もしてくれるテンプレ  (https://github.com/Islands5/rails_template_source) ・mecab-golangに少し貢献  (https://github.com/bluele/mecab-golang) とかやりながら社内SE、受託開発を行っています!

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

APIサーバー

Slide 6

Slide 6 text

どんなやつ??

Slide 7

Slide 7 text

文章校正API やること ・入力されたテキストを受け取 り、文章解析 ・類語、読みにくい文の注意 e.g. 文長いのに読点ないぞ 口語表現やで 体言止めが続きすぎやな

Slide 8

Slide 8 text

1 2 3 普段Railsを書いてる人がGoを触ってみた感想 (めちゃ主観です) 文字列の取扱い API作成で必要になりそうな知識 アジェンダ

Slide 9

Slide 9 text

1 2 3 普段Railsを書いてる人がGoを触ってみた感想 (めちゃ主観です) 文字列の取扱い API作成で必要になりそうな知識 アジェンダ

Slide 10

Slide 10 text

GoでAPIを作る際の選択肢(Awesome-go参考) 掲載Webフレームワーク ・およそ 38件

Slide 11

Slide 11 text

GoでAPIを作る際の選択肢(Awesome-go参考) 掲載Webフレームワーク ・およそ 38件 お、多い...

Slide 12

Slide 12 text

薄いgoのWebフレームワークないかな〜... echoがいいよ! 前職CTO(@zaru)

Slide 13

Slide 13 text

Echoに決定! (※今思い返してもいい選択でした)

Slide 14

Slide 14 text

Echoのコード例

Slide 15

Slide 15 text

フレームワークは決まった... さあ開発だ!!

Slide 16

Slide 16 text

色々ぶつかりますね...

Slide 17

Slide 17 text

API作成で必要になったこと 課題 ・ajaxで叩くAPIのため、CORS(Cross-Origin Resource Sharing)設定 ・https対応 ・プロセス管理 ・Goで作ったバイナリで、443ポートをListenする

Slide 18

Slide 18 text

CORS設定 Echoのミドルウェアをほんの数行追加するだけでOK 参考(https://echo.labstack.com/middleware)

Slide 19

Slide 19 text

https対応 参考(https://echo.labstack.com/middleware,https://qiita.com/smith_30/items/147ba45fa74b2fc265b6) ※自ドメインがLet’s Encrypt認証局に何回リクエストを送ってるかチェックできる(https://crt.sh/)

Slide 20

Slide 20 text

ミドルウェアのサポートが手厚い!

Slide 21

Slide 21 text

Echo便利

Slide 22

Slide 22 text

プロセス管理 参考(https://papix.hatenablog.com/entry/2015/08/05/131113) supervisorを利用 ・/etc/init.dにプロセス周りの処理を書かなくていい! ・自動起動

Slide 23

Slide 23 text

Goで作ったバイナリで443ポートをlisten 参考(http://matope.hatenablog.com/entry/2014/09/28/031155) well known port(0..1023)では普通に起動するとPermissionDeniedになる 対策 ・iptables等でポートフォワーディング ・(nginx等で)リバースプロキシ ・(setcap)バイナリにケーパビリティの付与

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

1 2 3 普段Railsを書いてる人がGoを触ってみた感想 (めちゃ主観です) 文字列の取扱い API作成で必要になりそうな知識 アジェンダ

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Goの文字列のクセ 文章中から、特定の文字列をみつけて何文字目か知りたい... strings.Index(s string, target string) int で実現できそう。

Slide 28

Slide 28 text

strings.Index(“あいうえおかきくけこ”, “お”)

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

12

Slide 31

Slide 31 text

strings.Index(“あいうえおかきくけこ”, “お”)

Slide 32

Slide 32 text

strings.Index(“あいうえおかきくけこ”, “お”) 4じゃね!?

Slide 33

Slide 33 text

Goの文字列のクセがすごい Goの文字は型が3つある (string, byte, rune) 字数を数えるには ・runeの配列にキャストしてlen() ・utf8.RuneCountInString(string) と少し工夫(動的型付け出身者の意見) 文字として出力するには、stringへ戻さなければいけない

Slide 34

Slide 34 text

字数カウント

Slide 35

Slide 35 text

字数カウント 30

Slide 36

Slide 36 text

字数カウント 10

Slide 37

Slide 37 text

文字列を参照する 227

Slide 38

Slide 38 text

文字列を参照する 12345

Slide 39

Slide 39 text

文字列を参照する あ

Slide 40

Slide 40 text

Goの文字列のクセがすごい この辺りが整理できてなかったので、戸惑った 実際取ろうと思えばこんな感じ ※Goにおける文字列、バイト、ルーンと文字 (https://www.ymotongpoo.com/works/goblog-ja/post/strings/)

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

1 2 3 普段Railsを書いてる人がGoを触ってみた感想 (めちゃ主観です) 文字列の取扱い API作成で必要になりそうな知識 アジェンダ

Slide 43

Slide 43 text

Goを触ってみた所感 よかった点◯ ・型って便利(e.g. Hash, HashWithIndifferentAccess, BSON::Document) ・テストに対する見えない力 - Railsはリスタートしなくてもコードを書き換えると適用される - Goは変更を確認するため、コンパイルし直す必要がある #=> テストを書いて実行する方が早い ・並列処理超簡単goroutine、チャネル最高

Slide 44

Slide 44 text

Goを触ってみた所感 めんどうな点△ ・型(´・ω・`) - 特にMongoDBにクエリ投げる時/レスポンスを使う時...今まで気にしなすぎ? ・GOPATH、GOROOT関連が複雑に絡み合って... - デプロイ周り難しい? - capistranoのcurrent切り替えの時とか...(デプロイ先でバイナリ作ろうとするからか なorz) - シングルバイナリを配置する方式?? - みなさんのデプロイ周りの経験をご教授ください!! ・日付のフォーマットがw(でも読む際はわかりやすい)

Slide 45

Slide 45 text

まとめ API作成で必要になりそうな知識 - Echo使うとmiddlewareのサポートで色々楽に対応できる - プロセス管理はsupervisorがよかった - well-known-portをlistenする手法の紹介 文字列 - Goの文字列処理はあらかじめ頭を整理しておくとよい Goを触ってみた所感 - 全体的に書きやすい - 型、型推論、go fmtがいい仕事をしてくれてるんだと思います

Slide 46

Slide 46 text

SCC Osaka Co.,LTD. 文字列に関するサンプルコード (https://play.golang.org/p/FPs_Bh7xvdo)

Slide 47

Slide 47 text

SCC Osaka Co.,LTD. ご清聴ありがとうございました!

Slide 48

Slide 48 text

Goについて 参考(http://matope.hatenablog.com/entry/2014/09/28/031155)