Go言語でAPI開発して得た知見 / development of sentence check api with Go lang
by
Islands5
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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)