Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(Go未経験チームで) Goで動画分析基盤を作った話し

(Go未経験チームで) Goで動画分析基盤を作った話し

Shinobu Noguchi

March 27, 2019
Tweet

Other Decks in Technology

Transcript

  1. 野口 忍 株式会社 WILL Group インキュベーション本部 テックリード やってる事 ・インフラとかSRE的な事 AWS,GCP,Docker,CI/CDなどなど

    ・サーバーサイド開発 (PHP,Go) ・フロントエンド開発 (AngularJS,Vue.JS) ・マネージメント その他何でもやってます 自己紹介
  2. Dooonutの動画配信アーキテクチャ (ざっくり) ユーザー 企業担当者 管理画面 EC2 S3 Elastic Transcoder エンコード

    RDS メタ情報書き込み メタ情報書取得 エンコード済み 動画取得 動画再生プレイヤー EC2 動画配信 再生情報 書き込み 動画アップ
  3. 導入時に悩んだ事 これもフレームワーク同様に選択肢があって当時はglideを選択しました。 パッケージ管理 package: main import: - package: github.com/go-sql-driver/mysql -

    package: github.com/labstack/echo version: 3 - package: github.com/BurntSushi/toml - package: github.com/aws/aws-sdk-go version: 1.12.76 subpackages: - aws glide.yaml .yamlでインポートしたいパッケージを記載して glide installすればパッケージが 一括でインストールされます。glide up で一括アップデート!
  4. Goの記法に慣れるまで REST APIの開発での恩恵は抜群でした! こういった形でJSONレスポンスをあらかじめ構造体で定義しておく事ができます。 ・テストが楽になる ・コードレビューもやりやすくなる 構造体 〜バンザイ! type videoSummaryByID

    struct { ID string `json:"id"` Title string `json:"title"` Video string `json:"videoData"` PlayCount int `json:"playCount"` PlayCountUnique int `json:"playCountUnique"` Status string `json:"status"` UpdatedAt string `json:"updatedAt"` }
  5. Goの記法に慣れるまで 例外処理は無いですがエラーハンドリングはあります。 エラーがあるか無いか? if err != nil{} で処理をハンドリングしています。 ちゃんとコードを書こうという意識が上がった ・try

    catch囲っておけばまあ。。ねえ。みたいな意識は無くなる 例外処理が無い 〜意外と良いやん! // ファイルをオープン f, err := os.Open("golang.txt") // エラーハンドリング if err != nil{ fmt.Println("error") }
  6. Goの記法に慣れるまで 〜短い変数名 // ファイルをオープン f, err := os.Open("golang.txt") 先程のエラー処理のところのファイルオープンの処理 //

    ファイルをオープン file, err := os.Open("golang.txt") 疑問:fileじゃだめなのか? 答え fileでもOKです。 ただし、Goではスコープが限られたローカル変数は短い変数名が推奨されています
  7. Goの記法に慣れるまで 〜短い変数名 // クリックとコンバージョンとクリックのユニーク値取得 clicks, err := dBHandler.clickData(ID) conversion, err

    := dBHandler.conversionData(ID) clicksUnique, err := dBHandler.clicksUniqueData(ID) 実際のところ (極端な例ですが) // クリックとコンバージョンとクリックのユニーク値取得 cl, err := dBHandler.clickData(ID) co, err := dBHandler.conversionData(ID) clu, err := dBHandler.clicksUniqueData(ID) 短くすると分かりにくい事もあるので短い事が良いだけでも無い C何とかが続いて頭が痛くなってくる 短くするのも「さじ加減」が大事 普通の命名規則同様によほど変じゃなければコードレビューは通す
  8. エンジニア絶賛募集中です!! フロントエンド ・AngularJS ・Vue.JS ・TypeScript 技術セット サーバーサイド ・Go ・PHP ・Python

    インフラ関連 ・AWS ・GCP ・Docker ・フロントエンドからインフラまでやりたい方 ・新規事業で開発したい方 ・英語使いたい方 求む!! 各種ツール ・Github ・Slack ・JIRA