Submit Search
Upload
Golang tokyo #7 qtpm
•
Download as PPTX, PDF
•
2 likes
•
3,442 views
Yoshiki Shibukawa
Follow
golang tokyo #7 qtpm
Read less
Read more
Technology
Report
Share
Report
Share
1 of 15
Download now
Recommended
Mithril
Mithril
Yoshiki Shibukawa
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Yoshifumi Kawai
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
京大 マイコンクラブ
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
Yoshifumi Kawai
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai
Recommended
Mithril
Mithril
Yoshiki Shibukawa
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Yoshifumi Kawai
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
京大 マイコンクラブ
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
Yoshifumi Kawai
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
Yoshiki Shibukawa
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
The History of Reactive Extensions
The History of Reactive Extensions
Yoshifumi Kawai
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
Keisuke Utsumi
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発
Takahiro Kubo
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Yoshifumi Kawai
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UnityTechnologiesJapan002
Modern .NET
Modern .NET
信之 岩永
QtとC++でGUIプログラミング
QtとC++でGUIプログラミング
seanchas_t
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
Yoshifumi Kawai
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
Kazushige TAKEUCHI
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
PyCon JP 2014 plone terada
PyCon JP 2014 plone terada
Manabu Terada
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
CMake multiplatform build-tool
CMake multiplatform build-tool
Naruto TAKAHASHI
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
Makoto Haruyama
More Related Content
What's hot
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
The History of Reactive Extensions
The History of Reactive Extensions
Yoshifumi Kawai
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
Keisuke Utsumi
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発
Takahiro Kubo
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Yoshifumi Kawai
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UnityTechnologiesJapan002
Modern .NET
Modern .NET
信之 岩永
QtとC++でGUIプログラミング
QtとC++でGUIプログラミング
seanchas_t
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
Yoshifumi Kawai
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
Kazushige TAKEUCHI
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
PyCon JP 2014 plone terada
PyCon JP 2014 plone terada
Manabu Terada
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
What's hot
(20)
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
The History of Reactive Extensions
The History of Reactive Extensions
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
Modern .NET
Modern .NET
QtとC++でGUIプログラミング
QtとC++でGUIプログラミング
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
PySide/QtWebkitで楽々 slideshare Hack
PySide/QtWebkitで楽々 slideshare Hack
Deep Dive C# 6.0
Deep Dive C# 6.0
PyCon JP 2014 plone terada
PyCon JP 2014 plone terada
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Similar to Golang tokyo #7 qtpm
CMake multiplatform build-tool
CMake multiplatform build-tool
Naruto TAKAHASHI
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
Makoto Haruyama
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
Ransui Iso
Gstreamer Basics
Gstreamer Basics
Seiji Hiraki
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
Izumi Tsutsui
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
You&I
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
Masaya Aoyama
Let's play with Goldfish
Let's play with Goldfish
Tetsuyuki Kobayashi
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
Drecom Co., Ltd.
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
Al mininum 47redmine-2nd
Al mininum 47redmine-2nd
mikoto20000
Runtime c++editing
Runtime c++editing
Seiya Ishibashi
Similar to Golang tokyo #7 qtpm
(20)
CMake multiplatform build-tool
CMake multiplatform build-tool
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
Gstreamer Basics
Gstreamer Basics
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
Let's play with Goldfish
Let's play with Goldfish
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Al mininum 47redmine-2nd
Al mininum 47redmine-2nd
Runtime c++editing
Runtime c++editing
More from Yoshiki Shibukawa
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
Yoshiki Shibukawa
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
Yoshiki Shibukawa
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
Yoshiki Shibukawa
Excelの話
Excelの話
Yoshiki Shibukawa
アンラーニング
アンラーニング
Yoshiki Shibukawa
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
Yoshiki Shibukawa
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
Yoshiki Shibukawa
大規模JavaScript開発
大規模JavaScript開発
Yoshiki Shibukawa
Xpjug基調lt2011
Xpjug基調lt2011
Yoshiki Shibukawa
Expert JavaScript Programming
Expert JavaScript Programming
Yoshiki Shibukawa
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会
Yoshiki Shibukawa
Pomodoro technique
Pomodoro technique
Yoshiki Shibukawa
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
Bitbucket&mercurial
Bitbucket&mercurial
Yoshiki Shibukawa
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。
Yoshiki Shibukawa
Erlang and I and Sphinx.
Erlang and I and Sphinx.
Yoshiki Shibukawa
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30
Yoshiki Shibukawa
Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?
Yoshiki Shibukawa
1日~1週間でOSSに貢献する方法
1日~1週間でOSSに貢献する方法
Yoshiki Shibukawa
More from Yoshiki Shibukawa
(20)
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
Excelの話
Excelの話
アンラーニング
アンラーニング
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
大規模JavaScript開発
大規模JavaScript開発
Xpjug基調lt2011
Xpjug基調lt2011
Expert JavaScript Programming
Expert JavaScript Programming
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会
Pomodoro technique
Pomodoro technique
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Bitbucket&mercurial
Bitbucket&mercurial
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。
Erlang and I and Sphinx.
Erlang and I and Sphinx.
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30
Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?
1日~1週間でOSSに貢献する方法
1日~1週間でOSSに貢献する方法
Recently uploaded
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Recently uploaded
(9)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Golang tokyo #7 qtpm
1.
Copyright © DeNA
Co.,Ltd. All Rights Reserved. C++ビルド支援ツール qtpm Golang.tokyo #7 2017/7/3 渋川よしき DeNA Co., Ltd.
2.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. 社内GUIツール開発 ● GUIのツール作りたくなることありますよね? ● マルチプラットフォーム(mac/win)の時に何を使うのか? ● C++: Qt / GTK ● C#: Xamarin, GTK# ● JavaScript: Electron ● Java: Swing ● ラッパー系はいろいろつらいので避けたい ● メンテされなくなることが多い ● 純正でも死屍累々(Qt JambiとかQt binding for QtScript Engineとか) ● デバッグが辛い(go-qmlも謎のsegvで辛かった) ● 結局下まわりを見ないといけないとか、ラッパーの品質問題とか ● 動的言語だと型が欲しくなる ● 以前、Qt/JSのJSX(DeNAの)ラッパーを作ったりしたけど、ある日無駄なことをして
3.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. 社内GUIツール開発 ● GUIのツール作りたくなることありますよね? ● マルチプラットフォーム(mac/win)の時に何を使うのか? ● C++: Qt / GTK ● C#: Xamarin, GTK# ● JavaScript: Electron ● Java: Swing ● ラッパー系はいろいろつらいので避けたい ● メンテされなくなることが多い ● 純正でも死屍累々(Qt JambiとかQt binding for QtScript Engineとか) ● デバッグが辛い(go-qmlも謎のsegvで辛かった) ● 結局下まわりを見ないといけないとか、ラッパーの品質問題とか ● 動的言語だと型が欲しくなる ● 以前、Qt/JSのJSX(DeNAの)ラッパーを作ったりしたけど、ある日無駄なことをして
4.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. Qtが安定している ● 歴史が長い(1990〜)し、安定している ● コード品質、後方互換性(4系から5系でもほとんど修正不要) ● OSネイティブのルック&フィール ● メモリ消費量が今となっては激少ない(〜50MBとか) ● C++は型もあるし、C++11便利だし、内製ツールの規模ならビルドも早い ● WebKit/Chromiumベースのブラウザウィジェットもある ● QML / Qt Quick Controlは試したかったが、今回は学習の時間とか下調べの時間 とか、メリット、引き継ぎとか考えてやめた ● Qtは宣言型のJSONテンプレート+JSを使って開発するQt上の動的開発環境で 、モバイルを強く意識している ● 情報が少ない。QMLは旧ASCII MWで1冊。Qt Quick Controlは薄い本しかない ● 自分でやるにはいいけど・・・ ● Qt Quick Control 2になってだいぶいろんなUI部品が増えたがテーブルとか、 ツリービューはなかった
5.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. C++でツールをさっと作るときの課題(1) ● 今時のパッケージマネージャ完備の言語と比べるといろいろつらい ● 良い感じの共通のパッケージマネージャ基盤がない ● OSを限定すれば各OSのもろもろに頼るのはできるが・・・ ● そもそもライブラリごとにビルドシステムがばらばら ● configureスクリプトやらCMakeやらSconsやらNinjaやらXCodeやらVisual Studioの ソリューションファイルやら何やら ● 前提となるフレームワークもばらばら ● ちょっぴりGlibとか使っているコードとかあったら、必要なライブラリも全部あつめ て来ないといけない ● マルチプラットフォーム?なにそれ?なものも・・・ ● 結局、必要なライブラリを全部内包しちゃっているプロジェクトが多い ● Googleプロダクツとかも・・・ ● Go言語ならgo get一発なのに・・・
6.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. C++でツールをさっと作るときの課題(2) ● ビルドシステムがいろいろつらい ● QtでクロスプラットフォームだとQMakeかCMakeぐらいしかない ● QMakeはQt専用で、ライブラリがこの設定ファイルを内蔵している確率は ゼロに近い ● CMakeが最近のデファクトだけど、文法とかいろいろ難しい ● Fizzbuzzとかズンドコきよしが書けるぐらい高度な言語 ● やりたいこと→どう書けばいいか、の逆引きの分かりやすい解説が少ない
7.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. 既存のパッケージ管理ソリューション(2014年〜) ● BiiCode ● 死んだ ● CPM ● CMakeベース ● clib ● C言語のパッケージマネージャ ● sbt ● ヘッダーファイルだけの過激なソリューション ● このツールを作り始めた後にできたもの ● conan.io ● このツールを作り始めた後にできたやつ ● JFrogという会社が買収して、今のところ今後期待できそう ● qpm ● Qt用。QMakeベース ● vcpkg ● MS製。全レシピ内蔵の富豪的なやつ(ただしWindows用)
8.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. GoっぽいパッケージマネージャをGoで作ろう (2014年〜) ● X getで必要なコードを持ってきて ● X buildで設定ファイルレスでアプリケーションをビルドして ● X testでユニットテストして ● X vetでコードの品質チェックして ● X fmtでフォーマットを修正して ● ついでにWebAssemblyとかやりたかった(まだ実現してない)
9.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. つくった(github.com/qtpm) ● qtpmという名前のツール ● ファイル名のルールに従って集めてきてCMakeの設定ファイルを自動生成 ● ライブラリモードと、アプリケーションモード ● テストコードやリソースファイル、アイコンなども ● _windows.cpp、_darwin.cppみたいなやつも入れた ● 最低限の設定ファイル ● Toml形式 ● バージョンとか、必要な依存Qtモジュールとか、依存パッケージとか ● とりあえずQt用のC++コードがビルドできるような機能が組込で ● moc、ui、qrcといったQt用のプリプロセッサも実行 ● Qt使わないコードも使える ● インストーラも自動生成 ● WindowsはWiX経由で.msi、macは.dmgファイル ● 諸事情により(セキュリティソフトが殺してくるので).zipファイルを作る機能も
10.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. ツールの使い方の流れ ● qtpm init appでアプリケーションの雛形作成 ● qtpm getで必要なライブラリを収集 ● qtpm buildでアプリケーションをビルド ● macは標準のxcode command line toolsと、バイナリ配布のQtを利用 ● WindowsはVC++ Express 2013/2015 or MinGWと、バイナリ配布のQtを利用 ● インストール場所は自動探索 ● qtpm fmtでフォーマットを整える ● clang-formatを利用。なるべくQt標準っぽい設定ファイルをデフォルトで利 用するが・・・たまにフォーマット後にビルド通らなくなることが・・・ ● qtpm vetで文法チェック ● clang-tidyを利用 ● qtpm testでテスト ● CTest(ランナー)とQTest(フレームワーク)を利用 ● qtpm packでインストーラ作成
11.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. 仕事はだいぶ楽になった ● CMakeファイルベースの開発は徒手空拳でCMakeLists.txtと戦う必要がある ● IDEはこのファイルを読み込んで初めてファイルをリストに出してくれる ● Qt CreatorとCLionがサポートしている ● コマンド一発でCMakeLists.txtが最新化されるのでファイル追加が楽 ● ビルドスクリプトの試行錯誤が激減 ● インストーラまで一括作成 ● Goで作ったので、各種タスク実行がWindows(MinGW, コマンドプロンプト )、macOS環境でもすべて同じように動く ● パッケージは自分で追加しないといけない・・・ ● 今のところそこまでガンガン作っているわけではないので困ってない ● モジュール化は進むので、コードは分かりやすくなっているはず・・・
12.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. 補助ツールを作る時の退路を用意 ● 補助ツールのメンテがコストになってしまっては元も子もない ● SPOFになってしまってもいけない ● それが依存している何かがEOLになって使用不可能になるとか ● 中間生成物として完動するCMakeLists.txtを生成する ● 最悪、qtpmがなくても、このファイルさえあれば後工程が正しく動くよう にしてある qtpm pack 設定ファイル を読む CMakeLists.txt 生成 CMake実行 macdeployqt windeployqt CPack実行
13.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. もしこれから作り直すならこうしたい ● C/C++は主に超定番ライブラリと、それを使うユーザーライブラリで大きく2つ に分けられる ● zlibとかlibpngとか ● 超定番ライブラリは高確率でOSにも入っていたり ● 超定番ライブラリだけは特別扱いしてあげても良かったのでは ● Microsoftのvcpkgはそうなっている。このコードをまるごと頂いてもよさそう ● https://github.com/Microsoft/vcpkg ● ユーザーパッケージとフラットに扱う仕組みじゃなくてもいい ● クロスコンパイル ● いろんな処理系全部入りのDockerイメージが最近ある
14.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. WebAssembly対応 ● WebAssemblyが今後普及するならパッケージマネージャが必要とされるはず! ● ・・・と3年前に考えた ● QtとともにWebAsmもサポートしたら面白そうだなと思っていた ● 進捗 ● 処理系のダウンロード ● Emscriptenの処理系を自動でダウンロードしてくる機能が入っていたりもするが、 長らくEmscriptenのビルド済みバイナリが古いままだったので放置してた ● 最近WebAsm対応のビルド済みバイナリがダウンロードできるようになったらしい ● ビルド ● 趣味で使おうと思ったぐらいでほとんどテストしてない・・・ ● そのうちまた興味が湧いたらやってみようかと
15.
* Copyright (C) DeNA
Co.,Ltd. All Rights Reserved. まとめ ● C++は今時の言語と比べるともろもろ頑張る必要がある ● ビルドツールいろいろ ● パッケージマネージャのデファクトはなかった ● Goを使ってGoっぽくC++ができるビルドツール兼パッケージマネージャ作った ● CMakeベース ● とりあえず便利に使ってます ● 退路もきちんと用意してる ● 作ってみての課題も見えた ● 定番ライブラリのサポートをまるっとやりたかった ● クロスコンパイルもやりたいよね・・・ ● WebAssembly対応も一応考えていた ● Emscriptenの安定版がなかなか出ないのですっかり忘れてた
Download now