Recommended
PPTX
PPTX
FINAL FANTASY Record Keeperを支えたGolang
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PDF
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
UniRx - Reactive Extensions for Unity
PPTX
Chunked encoding を使った高速化の考察
PDF
NextGen Server/Client Architecture - gRPC + Unity + C#
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
PDF
The History of Reactive Extensions
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
PDF
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
PDF
PPTX
Unityで使える C# 6.0~と .NET 4.6
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
PDF
A Framework for LightUp Applications of Grani
PDF
PDF
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
PPTX
PDF
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
ODP
PySide/QtWebkitで楽々 slideshare Hack
PPTX
PDF
PyCon JP 2014 plone terada
PDF
Groovy Bootcamp 2015 by JGGUG
PDF
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
PDF
ODP
Qt名古屋勉強会へのお誘い(OSC名古屋2017LT)
More Related Content
PPTX
PPTX
FINAL FANTASY Record Keeperを支えたGolang
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PDF
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
UniRx - Reactive Extensions for Unity
PPTX
Chunked encoding を使った高速化の考察
PDF
NextGen Server/Client Architecture - gRPC + Unity + C#
What's hot
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
PDF
The History of Reactive Extensions
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
PDF
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
PDF
PPTX
Unityで使える C# 6.0~と .NET 4.6
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
PDF
A Framework for LightUp Applications of Grani
PDF
PDF
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
PPTX
PDF
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PPTX
今から始める、Windows 10&新.NETへの移行戦略
PDF
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
ODP
PySide/QtWebkitで楽々 slideshare Hack
PPTX
PDF
PyCon JP 2014 plone terada
PDF
Groovy Bootcamp 2015 by JGGUG
PDF
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Similar to Golang tokyo #7 qtpm
PDF
ODP
Qt名古屋勉強会へのお誘い(OSC名古屋2017LT)
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
PDF
PPTX
20130228 Goノススメ(BPStudy #66)
PDF
PDF
More from Yoshiki Shibukawa
PPTX
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
PDF
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
PPTX
Kiroを使ってみた - そこから見える今どきの開発 - Kiro Meetup Japan #1
PDF
多すぎるユニットテストは却ってよくない?私が実践しているテストコードのリファクタリング
PDF
ITコンサルが改善するのはビジネスだけじゃない! サークル的活動で業界貢献 技育祭2024秋
PPTX
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
PPTX
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
PPTX
Go & multi platform GUI Trials and Errors
PPTX
PPTX
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Oktavia全文検索エンジン - SphinxCon JP 2014
PDF
Oktavia Search Engine - pyconjp2014
PDF
PDF
PDF
Expert JavaScript Programming
PDF
PDF
PDF
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
PDF
Recently uploaded
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
PPTX
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の安定版がなかなか出ないのですっかり忘れてた