SlideShare a Scribd company logo
インタフェースの
実装パターン
2014/08/09 (土)
@Go lang勉強会
自己紹介
上田拓也
KLab株式会社
仕事:
Webviewと戦う仕事
趣味:
Go言語, JS
twitter : @tenntenn
はじめに
● このプレゼンは以下の記事をまとめたものです
○ インタフェースの実装パターン
○ http://qiita.
com/tenntenn/items/eac962a49c56b2b15
ee8
● たぶん15分じゃ終わらないので,間に合わな
かったら,qiitaを見て下さい
アジェンダ
● typeで型を宣言する
● メソッド
● 基本的なインタフェースの実装
● 関数にインタフェース実装させる
● 構造体に埋め込んでインタフェースを実装する
● 埋め込みを使ったインタフェースの部分実装
● 埋め込みを使ったインタフェースの動的実装
typeで型を宣言する
構造体型とインタフェース型の宣言
// 構造体型の宣言
type Hoge struct {
// フィールドリスト
}
// インタフェース型の宣言
type Fuga interface {
// メソッドリスト
}
typeを型の宣言の文法
TypeDecl = "type" ( TypeSpec | "(" { TypeSpec
";" } ")" ) .
TypeSpec = identifier Type .
Type = TypeName | TypeLit | "(" Type ")" .
TypeName = identifier | QualifiedIdent .
TypeLit = ArrayType | StructType | PointerType
| FunctionType | InterfaceType
| SliceType | MapType | ChannelType .
typeを型の宣言の文法(ざっくり)
● type 識別子 型
○ 識別子:型名
○ 型
■ 型名
● int, string, fmt.Stringer
■ 型リテラル
■ (型)
既存の型に新しい名前をつける
● intに新しくHexという名前をつける
type Hex int
型リテラル
● 配列型  :[10]int
● 構造体型 :
struct { /* フィールドリスト */ }
● ポインタ型:*int
● 関数型  :function(s string) int
● インタフェース型:
interface { /* メソッドリスト */}
● スライス型:[]int
● マップ型 :map[string]int
● チャネル型:chan bool
関数型に名前をつけて型を宣言する
● net/httpパッケージのHandlerFuncは関数型にtype
で名前をつけたもの
type HandlerFunc func(wResponseWriter, r
*Request)
メソッド
メソッドの定義方法
// pはレシーバ
func (p *Person) String() string {
return fmt.Sprintf(
"%s %s (%d)",
p.FirstName,
p.LastName,
p.Age,
)
}
type Person struct {
FirstName string
LastName string
Age int
}
構造体型以外にもメソッドを設ける
● インタフェース型以外なら,どんな型でもレシー
バにできる
○ もちろん,型リテラルはダメ
type Hex int
func (h Hex) String() string {
return fmt.Sprintf(
"0x%x",
int(h),
)
}
関数にメソッドを持たせる
type HandlerFunc func(
w ResponseWriter,
r *Request,
)
func (f HandlerFunc) ServeHTTP(
w ResponseWriter,
r *Request,
) {
f(w, r)
}
基本的なインタフェースの実装
インタフェース型の宣言
type TypeName interface {
// メソッドリスト
Method1()
Method2()
}
インタフェースの実装
● メソッドリストのメソッドをすべて実装していれ
ば,インタフェースを実装したことになる
type Stringer {
String() string
}
// HexはStringerインタフェースを実装
type Hex int
func (h Hex) String() string {
return fmt.Sprintf("0x%x", int(h))
}
実際に,fmtパッケージで
定義されているインタ
フェース
インタフェースの実装
● int型の100をHex型にキャスト
● fmt.Stringer型の変数に代入して
いる
var stringer fmt.Stringer
stringer = Hex(100)
関数にインタフェース実装させる
関数にインタフェース実装させるには
● 関数の型リテラルにtypeで名前をつける
● 作った型にインタフェースで指定されているメ
ソッドを設ける
http.HandlerFuncの例
type HandlerFunc func(
w ResponseWriter,
r *Request,
)
func (f HandlerFunc) ServeHTTP(
w ResponseWriter,
r *Request,
) {
f(w, r)
}
http.HandlerFuncの例
● ServeHTTPメソッドを実装していれば,http.
Handlerインタフェースを実装したことになる
type Handler interface {
ServeHTTP(
w ResponseWriter,
r *Request,
)
}
http.HandlerFuncの例
● 関数をhttp.Hanlderとして振る舞わせる
f := http.HandlerFunc(func(
w http.ResponseWriter,
r *http.Request,
) {
fmt.Fprintf(w, "hello, world")
})
// 第1引数:pattern string
// 第2引数:handler http.Handler
http.Handle("/", f)
http.HandlerFuncの例
● 通常はhttp.HandleFuncを使う
● HandleFunc内では,関数をHandlerFunc型に
キャストして,http.Handleを呼んでいる
func HandleFunc(
pattern string,
handler func(ResponseWriter, *Request),
)
構造体に埋め込んでインタフェースを実装する
埋め込み
● 構造体には匿名フィールドとして,指定した型の
値を埋め込むことができる
● 埋め込んだ値のフィールドやメソッドはあたかも
埋め込み先のフィールドやメソッドのように利用
できる
埋め込みの例
type Name struct {
FirstName string
LastName string
}
func (n *Name) String() string {
return fmt.Sprintf("%s %s")
}
type Person struct {
*Name // *Name型の値を埋め込む
Age int
}
埋め込みの例
n := &Name{
FirstName: "Taro",
LastName: "Yamada",
}
p := &Person{
Name: n, // *Name型のnを埋め込む
Age: 20,
}
// nのメソッドをpのメソッドのように呼べる
fmt.Println(p.String())
埋め込みによるインタフェースの実装
● 埋め込んだ値がインタフェースを実装していた
場合,埋め込み先の構造体も,そのインタ
フェースを実装したことになる
// nがインタフェースを実装しているので,
// pもインタフェースを実装したことになる
var stringer fmt.Stringer = p
fmt.Println(stringer.String())
埋め込みを使ったインタフェースの部分実装
複数のメソッドを持つインタフェース
● インタフェースの宣言時に,メソッドリストに複数
のメソッドを指定できる
type Person interface {
Title() string
Name() string
}
一部のメソッドだけ実装させる
type person struct {
firstName string
lastName string
}
// Nameメソッドだけだと
// Personインタフェースは実装したことにならない
func (p *person) Name() string {
return fmt.Sprintf(
"%s %s", p.firstName, p.lastName
)
}
type Person interface {
Title() string
Name() string
}
残りは埋め込み先で実装させる
type female struct {
*person
}
func (f *female) Title() string {
return "Ms."
}
type male struct {
*person
}
func (m *male) Title() string {
return "Mr."
}
実装の切り分けは外部から隠蔽する
func NewPerson(
gender Gender,
firstName, lastName string,
) Person {
p := &person{firstName, lastName}
if gender == Femail {
return &femail{p}
}
return &male{p}
}
type Gender int
const (
Female = iota
Male
)
埋め込みを使ったインタフェースの動的実装
インタフェース型の埋め込み
● 型名がついていればどんな型でも匿名フィール
ドにして埋め込むことができる
type Hoge struct {
chan int // ダメ
[]int // ダメ
fmt.Stringer // OK
}
型リテラルは
ダメ
インタフェース型の埋め込み
func main() {
p := Person{
Stringer: nil,
FirstName: "Taro",
LastName: "Yamada",
Age: 20,
}
fmt.Println(p.Stringer) // nil
p.Stringer = ???
}
type Person struct {
fmt.Stringer
FirstName string
LastName string
Age int
}
fmt.Stringerインタフェースを実装していれば代入できる
埋め込む構造体をバインドする
● 埋め込んだインタフェース型の匿名フィールドに
インタフェースを実装した値を動的に代入できる
● 代入するインタフェースを実装した値は,埋め込
み先の構造体にアクセスできないと意味がない
○ 埋め込み先を参照できるクロージャにインタフェースを実
装させればよい
埋め込む構造体をバインドする
func BindStringer(
p *Person,
f func(p *Person) string) fmt.Stringer,
{
return StringerFunc(func() string {
return f(p)
})
} type StringerFunc func() string
func (sf StringerFunc) String() string {
return sf()
}
まとめ
● なんでもstructで型を作るのはGo言語っぽくな
い
○ typeとメソッドをちゃんとおさえる
● 埋め込みとインタフェースの実装をうまく使う
○ インタフェースの実装を埋め込む値に移譲するパターン
● The Go Programming Language Specificationを見なが
ら,黒魔術を考えるの楽しい
○ http://golang.org/ref/spec

More Related Content

What's hot

Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki
 

What's hot (20)

エキスパートGo
エキスパートGoエキスパートGo
エキスパートGo
 
nginx入門
nginx入門nginx入門
nginx入門
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
 
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
 
std::pin の勘所
std::pin の勘所std::pin の勘所
std::pin の勘所
 
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
 
実践!Django + GraphQL 実装
実践!Django + GraphQL 実装実践!Django + GraphQL 実装
実践!Django + GraphQL 実装
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
俺のTerraform CI/CD ライフサイクル
俺のTerraform CI/CD ライフサイクル俺のTerraform CI/CD ライフサイクル
俺のTerraform CI/CD ライフサイクル
 

Viewers also liked

cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
Hidenori Takeshita
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
 
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
Satoshi Noda
 

Viewers also liked (20)

Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
 
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
 
Goとテスト
GoとテストGoとテスト
Goとテスト
 
Go入門
Go入門Go入門
Go入門
 
HighBatch
HighBatchHighBatch
HighBatch
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #gocon
 
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間
 
Github第8章
Github第8章Github第8章
Github第8章
 
Go+revel
Go+revelGo+revel
Go+revel
 
Goを知る
Goを知るGoを知る
Goを知る
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
 
Dockerぐらし!
Dockerぐらし!Dockerぐらし!
Dockerぐらし!
 
勉強会への一歩を踏み出すために
勉強会への一歩を踏み出すために勉強会への一歩を踏み出すために
勉強会への一歩を踏み出すために
 
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
 
マイクロサービスにおけるクエリー言語について
マイクロサービスにおけるクエリー言語についてマイクロサービスにおけるクエリー言語について
マイクロサービスにおけるクエリー言語について
 

Similar to インタフェースの実装パターン

Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
Takuya Ueda
 
50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック
miso- soup3
 
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
No Bu
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
gintenlabo
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
Shogo Kawahara
 

Similar to インタフェースの実装パターン (20)

マスター・オブ・reflectパッケージ II
マスター・オブ・reflectパッケージ IIマスター・オブ・reflectパッケージ II
マスター・オブ・reflectパッケージ II
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
Literate Computing for Infrastructure - インフラ・コード化の実践におけるIPython (Jupyter) Not...
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
 
Go Friday 傑作選
Go Friday 傑作選Go Friday 傑作選
Go Friday 傑作選
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 

More from Takuya Ueda

More from Takuya Ueda (20)

Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
 
WebAssembly with Go
WebAssembly with GoWebAssembly with Go
WebAssembly with Go
 
GAE/Goとsyncパッケージ
GAE/GoとsyncパッケージGAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
 
そうだ、Goを始めよう
そうだ、Goを始めようそうだ、Goを始めよう
そうだ、Goを始めよう
 
マスター・オブ・goパッケージ
マスター・オブ・goパッケージマスター・オブ・goパッケージ
マスター・オブ・goパッケージ
 
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
 
Go1.8 for Google App Engine
Go1.8 for Google App EngineGo1.8 for Google App Engine
Go1.8 for Google App Engine
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
 
Static Analysis in Go
Static Analysis in GoStatic Analysis in Go
Static Analysis in Go
 
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
 
Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオン
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポートGopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
 
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめGoogle Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
 
Cloud functionsの紹介
Cloud functionsの紹介Cloud functionsの紹介
Cloud functionsの紹介
 
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現するgoパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
 
Cloud Functionsの紹介
Cloud Functionsの紹介Cloud Functionsの紹介
Cloud Functionsの紹介
 
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (14)

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 

インタフェースの実装パターン