SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
認証GWのプロトタイプで
Golang使ってみた
納村 康司
かもめエンジニアリング株式会社
2017年10月24日
認証GWのプロトタイプでGolang使ってみた
1
■ 自己紹介・会社紹介
■ あるときこんなお仕事が
■ Golangを使うチャンス
■ Golangのいいところ
■ Golangのはまりケース2つ
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
自己紹介
2
■ 氏名 納村 康司(おさむら こうじ)
@osakichi(Twitter)、osakichi(GitHub)
■ 所属 かもめエンジニアリング株式会社
http://kamome-e.com/
■ 役割 取締役・技術者
■ 事業内容 コンピュータソフトウェアおよびハードウェアの
研究、開発、販売、サポート (主に認証関係)
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
かもめの活動分野
3
■ 製品分野 通信事業者・企業向けの
認証パッケージソフトウェアおよびソリューション
■ 主力製品 アプリSSO認証ソリューション「KAMOME SSO」
統合認証基盤「KFEP」
RADIUS認証サーバ「Fullflex」、などなど
■ 開発言語 Java、C++、C、ちょっとJavaScriptやPython
Golangは社内/社外に布教中
(他社から引き継いだ「Fullflex」はGolangだけど)
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
他にもかもめはこんなことも
4
当社プロダクトに関係するテーマで
小規模勉強会を開催しています。
『Diameter プロトコルガイド』を
出版しました。
会議中の落書きを
缶バッチにしました。
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
5
あるとき
こんなお仕事が
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
案件ご要望内容
6
■ サービスで様々な認証方式を使えるソリューションが欲しい。
ID/PW以外にも、ワンタイムパスワードとか、指紋認証とか。
■ フロントアプリからは統一されたAPIで利用したい。
■ 多要素認証に対応し、かつ認証方式が増えても、
フロントアプリの改修は行わないようにしたい。
■ まずはプロトタイプを作成して、コンセプト検証から。
コンセプト検証なので開発言語は何でもいい。
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
7
いわゆる
「認証ゲートウェイ」
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
構成概念図
8Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
フロント
アプリ
(既存)
認証GW(開発範囲)
API
受付
ID/PW認証
対応モジュール
OTP認証サーバ
(他社製品)
指紋認証サーバ
(他社製品)
OTP認証
対応モジュール
指紋認証
対応モジュール
ID/PW認証サーバ
(既存)
・
・
・ ・
・
・
共通API
認証方式ごとに
対応モジュールに
処理を振り分け
認証方式の
追加は
モジュールの
追加で対応
認証方式固有の
プロトコル処理は
対応モジュールで処理
フロントアプリからは
何れの認証方式も
共通のAPIで利用
9
Golangを使う
チャーンス!
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
Golangによる実装方針
10
■ 共通APIの提供および各種認証サーバのAPI呼び出しには、
net/httpパッケージを利用。
■ 共通APIのJSONパラメタは、当面interface{}に変換して
柔軟に設計を検討、設計が固まったらstruct{}にして高速化。
■ 認証対応モジュールはinterface{}でI/Fを共通化。
新たな認証方式の対応に備える。
■ 少なくともプロトの段階までは、標準パッケージだけを使う。
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
11
Golangのいいところ
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
Golangのいいところ(1)
12
■ とりあえず動かすプロトタイプから、
ガチガチに設計したプロダクトまで、対応の幅が広い。
■ ネイティブコードを生成しVMに依存しない。
■ コンパイラのエラーメッセージが分かりやすい。
■ 使用するパッケージの選択に悩まなくてよい。
(標準パッケージで一通りのことはできる)
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
Golangのいいところ(2)
13
■ 統一されたコーディングスタイルが、
標準で提唱されている。
■ 文法がJava、C++/C、JavaScript、Python等々と比べて
どれとも似ていない(各言語を渡り歩くと特に重要)。
■ などなど、などなど。。。
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
14
はまりケース1
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
はまりケース1(1)
15Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "fmt"
func main() {
x := "Hello World!" // 初期値
if true { // 何らかの条件文(とりあえず常にtrue)
x := "different≠another" // 条件により値置き換え
}
fmt.Println(x)
}
■ :=演算子は便利だけど、 LL感覚で多用すると危険
■ 結果が"different≠another"にならない???
コンパイルエラーも出ないので発見しづらい
はまりケース1(2)
16Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "fmt"
func main() {
var x = "Hello World!" // 初期値
if true { // 何らかの条件文(とりあえず常にtrue)
x = "different≠another" // 条件により値置き換え
}
fmt.Println(x)
}
■ 変数スコープの問題だけど明示的にvarを書いた方が無難
■ これで結果が"different≠another"と意図したものになった
(型推論ぐらいは使ってもいいかも)
17
はまりケース2
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
はまりケース2(1)
18Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "bufio"
import "encoding/json"
import "os"
func main() {
var data interface{}
reader := bufio.NewReader(os.Stdin)
json, _, _ := reader.ReadLine() // JSONデータをキー入力して
json.Unmarshal(json, &data) // 内部データに変換
}
■ importしているパッケージが使えない?
■ コンパイラに「json.Unmarshal()が無い」と怒られる
はまりケース2(2)
19Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "bufio"
import "encoding/json"
import "os"
func main() {
var data interface{}
reader := bufio.NewReader(os.Stdin)
raw, _, _ := reader.ReadLine() // JSONデータをキー入力して
json.Unmarshal(raw, &data) // 内部データに変換
}
■ パッケージ名と被る変数名は使わない(まぁあたりまえ)
■ どうしても特定の名前を変数で使いたい場合は、
パッケージ名の方を変える方法もあるらしい
まとまってないまとめ
20
■ Golangはプロトタイプコードからプロダクト開発にまで、
幅広く便利に使える。
■ いろいろ言われている「いいところ」はホントに素敵。
(特にC++/Cから流れてくると実感)
■ 微妙なクセやはまりどころもあるので、研鑽を積みましょう。
■ 継続して社内/社外に布教中。
フルスクラッチで何かを作る機会を虎視眈々と。
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
ありがとうございました!

Weitere ähnliche Inhalte

Ähnlich wie 認証Gwのプロトタイプでgolang使ってみた20171024

[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...Insight Technology, Inc.
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索Masahiko Sawada
 
SORACOM Canalを使った キャンペーン端末事
SORACOM Canalを使った キャンペーン端末事SORACOM Canalを使った キャンペーン端末事
SORACOM Canalを使った キャンペーン端末事Tosihiyuki Hirai
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ Takuya Mikami
 
Speech Framework
Speech FrameworkSpeech Framework
Speech FrameworkGaprot
 
ICT技術がもたらす旅館の更なる可能性
ICT技術がもたらす旅館の更なる可能性ICT技術がもたらす旅館の更なる可能性
ICT技術がもたらす旅館の更なる可能性Osaka University
 
スタートアップを目指す零細企業のエンジニア採用事情
スタートアップを目指す零細企業のエンジニア採用事情スタートアップを目指す零細企業のエンジニア採用事情
スタートアップを目指す零細企業のエンジニア採用事情Kohji Osamura
 
Terraform with Bitbucket pipeline
Terraform with Bitbucket pipelineTerraform with Bitbucket pipeline
Terraform with Bitbucket pipelineMasatomo Ito
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1Atsushi Tadokoro
 
メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門Atsushi Tadokoro
 
39 works:ドコモにおける オープンイノベーションプログラムの紹介
 39 works:ドコモにおける オープンイノベーションプログラムの紹介 39 works:ドコモにおける オープンイノベーションプログラムの紹介
39 works:ドコモにおける オープンイノベーションプログラムの紹介Osaka University
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)Toshiharu Sugiyama
 
Delphi Community Edition Meet up !
Delphi Community Edition Meet up !Delphi Community Edition Meet up !
Delphi Community Edition Meet up !Jun Hosokawa
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)Masataka Sato
 
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)parrotstudio
 
大規模ログ分析におけるAmazon Web Servicesの活用
大規模ログ分析におけるAmazon Web Servicesの活用大規模ログ分析におけるAmazon Web Servicesの活用
大規模ログ分析におけるAmazon Web Servicesの活用Shintaro Takemura
 

Ähnlich wie 認証Gwのプロトタイプでgolang使ってみた20171024 (20)

[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
SORACOM Canalを使った キャンペーン端末事
SORACOM Canalを使った キャンペーン端末事SORACOM Canalを使った キャンペーン端末事
SORACOM Canalを使った キャンペーン端末事
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ
 
ドリコムのインフラCI
ドリコムのインフラCIドリコムのインフラCI
ドリコムのインフラCI
 
Speech Framework
Speech FrameworkSpeech Framework
Speech Framework
 
ICT技術がもたらす旅館の更なる可能性
ICT技術がもたらす旅館の更なる可能性ICT技術がもたらす旅館の更なる可能性
ICT技術がもたらす旅館の更なる可能性
 
スタートアップを目指す零細企業のエンジニア採用事情
スタートアップを目指す零細企業のエンジニア採用事情スタートアップを目指す零細企業のエンジニア採用事情
スタートアップを目指す零細企業のエンジニア採用事情
 
Terraform with Bitbucket pipeline
Terraform with Bitbucket pipelineTerraform with Bitbucket pipeline
Terraform with Bitbucket pipeline
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
 
メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門
 
39 works:ドコモにおける オープンイノベーションプログラムの紹介
 39 works:ドコモにおける オープンイノベーションプログラムの紹介 39 works:ドコモにおける オープンイノベーションプログラムの紹介
39 works:ドコモにおける オープンイノベーションプログラムの紹介
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
 
Delphi Community Edition Meet up !
Delphi Community Edition Meet up !Delphi Community Edition Meet up !
Delphi Community Edition Meet up !
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
1ヶ月で作り切る!スタートアップのための Rails 爆速開発術 (20170306)
 
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
 
大規模ログ分析におけるAmazon Web Servicesの活用
大規模ログ分析におけるAmazon Web Servicesの活用大規模ログ分析におけるAmazon Web Servicesの活用
大規模ログ分析におけるAmazon Web Servicesの活用
 

認証Gwのプロトタイプでgolang使ってみた20171024