Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
認証GWのプロトタイプで
Golang使ってみた
納村 康司
かもめエンジニアリング株式会社
2017年10月24日
認証GWのプロトタイプでGolang使ってみた
1
■ 自己紹介・会社紹介
■ あるときこんなお仕事が
■ Golangを使うチャンス
■ Golangのいいところ
■ Golangのはまりケース2つ
Copyright©2017 KAMOME...
自己紹介
2
■ 氏名 納村 康司(おさむら こうじ)
@osakichi(Twitter)、osakichi(GitHub)
■ 所属 かもめエンジニアリング株式会社
http://kamome-e.com/
■ 役割 取締役・技術者
■ 事...
かもめの活動分野
3
■ 製品分野 通信事業者・企業向けの
認証パッケージソフトウェアおよびソリューション
■ 主力製品 アプリSSO認証ソリューション「KAMOME SSO」
統合認証基盤「KFEP」
RADIUS認証サーバ「Fullflex...
他にもかもめはこんなことも
4
当社プロダクトに関係するテーマで
小規模勉強会を開催しています。
『Diameter プロトコルガイド』を
出版しました。
会議中の落書きを
缶バッチにしました。
Copyright©2017 KAMOME En...
5
あるとき
こんなお仕事が
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
案件ご要望内容
6
■ サービスで様々な認証方式を使えるソリューションが欲しい。
ID/PW以外にも、ワンタイムパスワードとか、指紋認証とか。
■ フロントアプリからは統一されたAPIで利用したい。
■ 多要素認証に対応し、かつ認証方式が増えて...
7
いわゆる
「認証ゲートウェイ」
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
構成概念図
8Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
フロント
アプリ
(既存)
認証GW(開発範囲)
API
受付
ID/PW認証
対応モジュール
OTP認証サ...
9
Golangを使う
チャーンス!
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
Golangによる実装方針
10
■ 共通APIの提供および各種認証サーバのAPI呼び出しには、
net/httpパッケージを利用。
■ 共通APIのJSONパラメタは、当面interface{}に変換して
柔軟に設計を検討、設計が固まったらs...
11
Golangのいいところ
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
Golangのいいところ(1)
12
■ とりあえず動かすプロトタイプから、
ガチガチに設計したプロダクトまで、対応の幅が広い。
■ ネイティブコードを生成しVMに依存しない。
■ コンパイラのエラーメッセージが分かりやすい。
■ 使用するパッ...
Golangのいいところ(2)
13
■ 統一されたコーディングスタイルが、
標準で提唱されている。
■ 文法がJava、C++/C、JavaScript、Python等々と比べて
どれとも似ていない(各言語を渡り歩くと特に重要)。
■ などな...
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 := "He...
はまりケース1(2)
16Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "fmt"
func main() {
var x = ...
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/jso...
はまりケース2(2)
19Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
package main
import "bufio"
import "encoding/jso...
まとまってないまとめ
20
■ Golangはプロトタイプコードからプロダクト開発にまで、
幅広く便利に使える。
■ いろいろ言われている「いいところ」はホントに素敵。
(特にC++/Cから流れてくると実感)
■ 微妙なクセやはまりどころもある...
Copyright©2017 KAMOME Engineering, Inc. All rights reserved.
ありがとうございました!
Upcoming SlideShare
Loading in …5
×

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

642 views

Published on

GoビギナーズLT大会! 「最近、Go言語始めました」の会 #4

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

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

×