WebAssemblyに足りないもの
東京Node学園祭2016
2016/11/13�Yoshiki Shibukawa (@shibu_jp)
English Version: http://bit.ly/nodefest2016_shibu
お前誰よ
English Version: http://bit.ly/nodefest2016_shibu
君たちに最新情報を公開しよう
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyに足りないもの
English Version: http://bit.ly/nodefest2016_shibu
背景
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyを書くには?
English Version: http://bit.ly/nodefest2016_shibu
C/C++
English Version: http://bit.ly/nodefest2016_shibu
WELCOME TO HELL!!!!
English Version: http://bit.ly/nodefest2016_shibu
C/C++
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyには関係ないツライところ (1)
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyには関係ないツライところ (2)
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyも関係するところ (1)
English Version: http://bit.ly/nodefest2016_shibu
C/C++のパッケージマネージャ
English Version: http://bit.ly/nodefest2016_shibu
定番がない
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyにも関係するところ (2)
English Version: http://bit.ly/nodefest2016_shibu
CMake
English Version: http://bit.ly/nodefest2016_shibu
CMakeの欠点
English Version: http://bit.ly/nodefest2016_shibu
CMakeでfizzbuzz
foreach(i RANGE 1 100)� math(EXPR notFizz "${i} % 3")� math(EXPR notBuzz "${i} % 5")� if(NOT notFizz AND notBuzz) � message("fizz")� elseif(notFizz AND NOT notBuzz)� message("buzz")� elseif(NOT notFizz AND NOT notBuzz)� message("fizzbuzz")� else()� message("${i}")� endif()�endforeach()
English Version: http://bit.ly/nodefest2016_shibu
CMakeでズンドコキ・ヨ・シ!
set(kiyoshied false)�set(zun 0)�while(NOT kiyoshied)� string(RANDOM LENGTH 1 ALPHABET 01 number)� if(${number})� message("ズン")� math(EXPR zun "${zun}+1")� else()� message("ドコ")� if(${zun} EQUAL 4)� message("キ・ヨ・シ!")� set(kiyoshied true)� endif()� set(zun 0)� endif()�endwhile()
English Version: http://bit.ly/nodefest2016_shibu
cmake_minimum_required(VERSION 3.1.0)��# project global setting��project(workbench7)��set(WORKBENCH7_MAJOR_VERSION 0)�set(WORKBENCH7_MINOR_VERSION 1)�set(WORKBENCH7_PATCH_VERSION 0)�set(WORKBENCH7_VERSION 0.1.0)��# qtpm setting��set(VENDOR_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vendor)��# compiler setting��set(CMAKE_CXX_STANDARD 11)�if(MSVC)� set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")�else()� set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")�endif()��# enable Qt��set(CMAKE_AUTOMOC ON)�set(CMAKE_AUTOUIC ON)�set(CMAKE_AUTORCC ON)�set(CMAKE_INCLUDE_CURRENT_DIR ON)�include_directories(${CMAKE_CURRENT_BINARY_DIR})�if(DEFINED ENV{QTDIR})� set(CMAKE_PREFIX_PATH "$ENV{QTDIR}")�endif()��find_package(Qt5Core REQUIRED)�find_package(Qt5Gui REQUIRED)�find_package(Qt5Widgets REQUIRED)�# include extra settings��include("${CMAKE_CURRENT_SOURCE_DIR}/CMakeExtra.txt" OPTIONAL)
English Version: http://bit.ly/nodefest2016_shibu
# dependencies��set(QTPM_IS_ROOT_PROJECT FALSE)�add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/github.com___shibukawa___package1 ${CMAKE_CURRENT_BINARY_DIR}/package1)�include("${CMAKE_CURRENT_SOURCE_DIR}/vendor/github.com___shibukawa___package1/CMakeExtra.txt" OPTIONAL)�include_directories(${VENDOR_PATH}/github.com___shibukawa___package1/src)�add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/github.com___shibukawa___package2 ${CMAKE_CURRENT_BINARY_DIR}/package2)�include("${CMAKE_CURRENT_SOURCE_DIR}/vendor/github.com___shibukawa___package2/CMakeExtra.txt" OPTIONAL)�include_directories(${VENDOR_PATH}/github.com___shibukawa___package2/src)��# build setting��include_directories(src)��if(APPLE)� set(MACOSX_BUNDLE_BUNDLE_NAME Workbench7)� set(MACOSX_BUNDLE_GUI_IDENTIFIER "Workbench7")� set(MACOSX_BUNDLE_ICON_FILE MacOSXAppIcon.icns)� set_source_files_properties(Resources/MacOSXAppIcon.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")� set(MACOSX_BUNDLE_INFO_STRING "Workbench7-0.1.0, Copyright 2016 shibukawa.yoshiki")� set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${WORKBENCH7_MAJOR_VERSION}.${WORKBENCH7_MINOR_VERSION}" )� set(MACOSX_BUNDLE_LONG_VERSION_STRING "${WORKBENCH7_VERSION}")� set(MACOSX_BUNDLE_BUNDLE_VERSION "${WORKBENCH7_VERSION}")� set(MACOSX_BUNDLE_COPYRIGHT "(C) 2016 shibukawa.yoshiki")� add_executable(workbench7 MACOSX_BUNDLE src/main.cpp Resources/MacOSXAppIcon.icns)�
English Version: http://bit.ly/nodefest2016_shibu
elseif(WIN32)� set(winres "${CMAKE_CURRENT_SOURCE_DIR}/windows.rc")� if(MINGW)� if(NOT CMAKE_RC_COMPILER)� set(CMAKE_RC_COMPILER windres.exe)� endif()� set(winresobj "${CMAKE_CURRENT_SOURCE_DIR}/windows.rc.obj")� add_custom_command(OUTPUT "${winresobj}"� COMMAND ${CMAKE_RC_COMPILER}� -D GCC_WINDRES� -I ${CMAKE_CURRENT_SOURCE_DIR}� -I ${CMAKE_CURRENT_BINARY_DIR}� -o ${winresobj}� -i ${winres})� set(${sources} "${winresobj}")� else()� set(${sources} ${winres})� endif()� add_executable(workbench7 WIN32 src/main.cpp ${sources})�else()� add_executable(workbench7 src/main.cpp)�endif()�qt5_use_modules(workbench7 Core Gui Widgets)�target_link_libraries(workbench7 package1 package2)
English Version: http://bit.ly/nodefest2016_shibu
# installer setting��if(WIN32)� install(TARGETS workbench7 ${dlls} RUNTIME DESTINATION bin COMPONENT applications)� file(GLOB dlls ${CMAKE_CURRENT_BINARY_DIR}/*.dll)� install(PROGRAMS ${dlls} DESTINATION bin COMPONENT applications)� install(DIRECTORY� ${CMAKE_CURRENT_BINARY_DIR}/iconengines� ${CMAKE_CURRENT_BINARY_DIR}/imageformats� ${CMAKE_CURRENT_BINARY_DIR}/platforms� ${CMAKE_CURRENT_BINARY_DIR}/translations DESTINATION bin COMPONENT applications)� set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)� include(InstallRequiredSystemLibraries)� install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}� DESTINATION programs� COMPONENT applications)� set(CPACK_PACKAGE_NAME "Workbench7")� set(CPACK_PACKAGE_VENDOR "shibukawa.yoshiki")� set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Write your project description here")� set(CPACK_PACKAGE_VERSION_MAJOR "${WORKBENCH7_MAJOR_VERSION}")� set(CPACK_PACKAGE_VERSION_MINOR "${WORKBENCH7_MINOR_VERSION}")� set(CPACK_PACKAGE_VERSION_PATCH "${WORKBENCH7_PATCH_VERSION}")� set(CPACK_PACKAGE_VERSION "${WORKBENCH7_VERSION}")� set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.rst")� set(CPACK_PACKAGE_INSTALL_DIRECTORY "installer")� set(CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "applications (Workbench7)")� set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_BINARY_DIR}/WindowsAppIcon.ico")� set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_BINARY_DIR}/WindowsAppIcon.ico")� set(CPACK_NSIS_MENU_LINKS "programs/workbench7" "Workbench7")� include(CPack)�endif()
English Version: http://bit.ly/nodefest2016_shibu
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyにも関係するところ (3)
English Version: http://bit.ly/nodefest2016_shibu
まとめると
English Version: http://bit.ly/nodefest2016_shibu
みなさん、ワクワクしますよね!
English Version: http://bit.ly/nodefest2016_shibu
ちなみにqtpm
English Version: http://bit.ly/nodefest2016_shibu
conan.io
English Version: http://bit.ly/nodefest2016_shibu
WebAssemblyで何作る?
English Version: http://bit.ly/nodefest2016_shibu
考えられるもの
English Version: http://bit.ly/nodefest2016_shibu
ゲームを作る
English Version: http://bit.ly/nodefest2016_shibu
補足すると
English Version: http://bit.ly/nodefest2016_shibu
新ファイルフォーマットとかファイル圧縮
English Version: http://bit.ly/nodefest2016_shibu
単機能系のものが(現時点で)現実的と思う理由
English Version: http://bit.ly/nodefest2016_shibu
HTMLとは別のGUIの仕組み
English Version: http://bit.ly/nodefest2016_shibu
English Version: http://bit.ly/nodefest2016_shibu
フォントレンダリング
English Version: http://bit.ly/nodefest2016_shibu
HTML/CSS
English Version: http://bit.ly/nodefest2016_shibu
HTMLとは別のGUIの仕組みが欲しいケース
English Version: http://bit.ly/nodefest2016_shibu
まとめ
English Version: http://bit.ly/nodefest2016_shibu