【C4】C++テクニカルセッション「C++Builderでモバイル開発にトライ！
ベータ評価レポート」 (ver032)
NTTデータ ビジネスブレインズ
シニア・スペシャリスト 伊賀敏樹

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

1
2

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

はじめに

はじめに発表内容については私自身の見解であり、必ずしも所属企業および所属組織における立場、戦略、意見を代表するものではありません。

3

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

アジェンダ• はじめに• アジェンダ• 自己紹介• C++Builder って どんなもの?
• ベータ評価環境• ベータ・デモ
• まとめ
• Q&A
4

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2
5

自己紹介

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

自己紹介【業務】• NTTデータビジネスブレインズに勤務– 多種多様なシステム構築に従事。
– 方式屋、フレームワーカー– 実プロジェクトにプログラマーとしての投入• NTTデータビジネスブレインズについて

NTTデータビジネスブレインズは、2003年にNTTデータおよび日本板硝子による 株式構成によって設立された、ITを活用したトータルソリューションを提供する会社です。さまざまな情報システム構築にたずさわり、またパッケージソフト の開発および販売をおこなうなど、多様なビジネスを展開しています。日本板硝子におけるシステム構築で培ったノウハウとNTTデータの高い技術力を武器 に、法人顧客を中心としてビジネスを拡大していっております。 詳細は、www.nttdbb.com をご覧ください。

6

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

自己紹介【ライター】• ブロガー
いがぴょんの日記

http://www.igapyon.jp/igapyon/
http://d.hatena.ne.jp/igapyon/• テクニカル・ライター
書籍 / 雑誌 / Web記事の執筆
いま• いがぴょんの『C++言語入門 ～ C++Builderでビジュアルプログラミング』
http://www.embarcadero.com/jp/cbfan/cpp-lang/7

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

自己紹介【OSS】• blanco Framework 【開発フレームワーク】• Benten 【翻訳支援ツール】• Eclipse 日本語化 【翻訳作業そのもの】– 言語パック (サードパーティ版)– Pleiades への翻訳投込• その他多数の OSS を Develop

8

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

プログラミング言語経歴
業務におけるプログラミング言語の利用経歴分布

3(小学校・中学校時代のマシン語経験などは除く)

Java

単位: 年

7

C/C++

13

C++経験のほとんどはVisual C++ によるもの

9

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C#.NETマイブーム

LLVM / Clang
http://llvm.org/
これも C++Builder に注目する理由のひとつ

10

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3
11

C++Builder ってどんなもの?

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C++Builder って どんなもの? (1/2)• とても長い歴史をもつ C++ 統合開発環境– 1997 年 ver.1– 2010 年 XE (ver.15)– 2013 年 XE5 (ver.19)– 参考: Visual C++ 1.0 は 1993 年• 統合開発環境は Windows 上で動作
• Delphi (Object Pascal) の C++ 版– 新機能は Delphi が基本的に優先される• 単体で動作できるロードモジュール (EXE) を生成可能• 2Way ビジュアルデザイナ

12

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C++Builder って どんなもの? (2/2)• マルチデバイス対応• 強力なコンポーネント関連機能– コンポーネントの利用が便利• 同梱コンポーネントが充実– コンポーネントの作成が非常に簡単• 高い生産性を実現できる• そして、いよいよ モバイルデバイス対応 New!
13

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C++Builder の画面イメージ

14

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C++Builder のソースコード基本構成
ファイル名

15

ファイル
形式

ProjectSample.cbproj

プロジェクトファイル

XML

ProjectSample.cbproj.local

プロジェクトファイル

XML

ProjectSample.cpp

エントリポイントを含む
ソースファイル

テキスト
ファイル

ProjectSamplePCH1.h

プリコンパイル済みヘッダファイル

テキスト
ファイル

UnitSample.h

フォームのヘッダファイル

テキスト
ファイル

UnitSample.cpp

フォームのソースファイル

テキスト
ファイル

UnitSample.fmx

フォーム (FireMonkey) のデザイン情報

テキスト
ファイル

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ProjectSample.cpp#include <fmx.h>#pragma hdrstop#include <tchar.h>
USEFORM("UnitSample.cpp", FormSample);

比較的シンプルで直観的なコード

extern "C" int FMXmain() {try {Application->Initialize();
Application->CreateForm(__classid(TFormSample), &FormSample);
Application->Run();}catch (Exception &exception) {Application->ShowException(&exception);}catch (...) {try {throw Exception("");
FireMonkey}
アプリケーションのcatch (Exception &exception) {Application->ShowException(&exception);
エントリポイント}}return 0;}16

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ProjectSamplePCH1.h#include <fmx.h>#include <tchar.h>

シンプルで直観的なコード

プリコンパイル済み
ヘッダファイル

17

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UnitSample.h#ifndef UnitSampleH#define UnitSampleH#include <System.Classes.hpp>#include <FMX.Controls.hpp>#include <FMX.Forms.hpp>#include <FMX.StdCtrls.hpp>#include <FMX.Types.hpp>

シンプルで直観的なコード

class TFormSample : public TForm {__published: // IDE で管理されるコンポーネント
TButton *ButtonSayHello;
TLabel *LabelMessage;
void __fastcall ButtonSayHelloClick(TObject *Sender);private: // ユーザー宣言
public : // ユーザー宣言__fastcall TFormSample(TComponent* Owner);};

フォームのヘッダファイル

extern PACKAGE TFormSample *FormSample;#endif18

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UnitSample.cpp#include <fmx.h>#pragma hdrstop#include "UnitSample.h"

シンプルで直観的なコード#pragma package(smart_init)#pragma resource "*.fmx"
TFormSample *FormSample;__fastcall TFormSample::TFormSample(TComponent* Owner): TForm(Owner) {}void __fastcall TFormSample::ButtonSayHelloClick(TObject *Sender) {LabelMessage->Text = "ようこそ、こんにちは。";}
フォームのソースファイル

19

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UnitSample.fmx
object FormSample: TFormSample
Left = 0
Top = 0Caption = #12469#12531#12503#12523
ClientHeight = 152
ClientWidth = 233
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [dkDesktop, dkiPhone, dkiPad]
DesignerMobile = False
DesignerWidth = 0
DesignerHeight = 0
DesignerDeviceName = ''DesignerOrientation = 0
object ButtonSayHello: TButton
Height = 22.000000000000000000
Position.X = 72.000000000000000000
Position.Y = 96.000000000000000000
TabOrder = 0
Text = #12371#12435#12395#12385#12399'!'
Width = 80.000000000000000000
OnClick = ButtonSayHelloClickend
object LabelMessage: TLabel
Font.Size = 18.000000000000000000
StyledSettings = [ssFamily, ssStyle, ssFontColor]
Height = 41.000000000000000000
Position.X = 8.000000000000000000
Position.Y = 16.000000000000000000
Text = #25384#25334#34920#31034#38936#22495
Width = 217.000000000000000000
endend20

通常は C++Builderのデザイン画面で編集

可読性の良いテキストファイル

フォーム(FireMonkey)のデザイン情報

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

私にとっての C++Builder• 商用 Clang ベース統合開発環境• iOS (New!) および Android (予定) 開発環境
• C++11 学習環境

• 連載記事執筆対象 (苦笑)21

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

422

ベータ評価環境本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ベータ評価環境• Apple MacBook Pro (A1398)– Xcode 5.0.x• Parallels Desktop 9 for Mac• Microsoft Windows 8 Pro (64 bit)
• Apple iPhone 5 (iOS 7.0.x)• Apple iOS Developer Program• インターネット接続環境– Wi-Fi 環境• エンバカデロ RAD Studio XE5 Architect C++ iOS beta
– C++Builder は RAD Studio に含まれます23

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

524

ベータ・デモ本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

評価にさきだって乗り越えたもの• Apple iOS Developer Program へ登録– 私は銀行振込を選択しました。
– Apple に電話をする必要がありました。
– 時間的な余裕を割り当てておきましょう。

• デベロッパ証明書やデバイス登録など作業一式– 『Delphiでかんたん iOSアプリプログラミング』を参考にしながら作業を実施しました。

• OS X、Windows 8、iOS への慣れ!
– 特に Windows 8 で手こずりました!?
– 私には外付けマウスが必要でした。
25

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C++Builder の起動• 【その01】– OS X 上で Parallels Desktop をもちいて Windows 8を起動
– C++Builder の起動• 【その02】– RAD PAServer の起動

26

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デスクトップアプリケーション• 【その03】– モバイルアプリケーションに先立って…
C++Builder の「FireMonkey デスクトップ アプリケーション」ウィザードを体験– Windows アプリケーションを MAC OS X 用に切り替
えて動作– コード断片• TLabel Text:初めてのアプリ• TButton Text:こんにちは
OnClick: ShowMessage(“Hello!”);27

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

デモ実行の前の準備• 【その04】– Refrector の利用– iPhone 5 の AirPlay によって iPhone の画面を Mac
OS X 上の Refrector に表示– ★iPhone 5 の画面を Mac OS X 上に転送する有償アプリケーション。

28

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。モバイルアプリケーション・ウィザード• C++Builder の「FireMonkey Mobile Application」ウィザードをひととおり体験– 「タブレット用マスタ/詳細」ウィザードは、タブレット用となっており、iPhone 5 には不向きなものです。
– 統合開発環境が提供する「新規プロジェクトウィザード」には、利用者に向けたさまざまなメッセージが含まれていることがあります。
– Windows (32bit) としても動作させてみましょう。

29

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Blank Application• 【その05】– Blank Application ウィザード– コード断片• TLabel Text:はじめてのモバイルアプリ• TButton Text:こんにちは
OnClick: ShowMessage(“こんにちは”);30

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

スマートフォン用マスタ/詳細• 【その06】– スマートフォン用マスタ/詳細 ウィザード– コード断片• (なし)– 「表示」→「LiveBinding デザイナ」で内容をおおまかに確認• 【その11】– Windows 上で動作させてみる

31

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

タブ• 【その07】– タブ ウィザード– コード断片• (なし)– 画面下部のタブを操作

32

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ナビゲーション付きタブ• 【その08】– ナビゲーション付きタブ ウィザード– コード断片• (なし)– Next と Back が加わった

33

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ナビゲーション付きヘッダー/フッター• 【その09】– ナビゲーション付きヘッダー/フッター ウィザード– コード断片• (なし)– タブなしで Next と Back のみ付いたもの

34

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ヘッダー/フッター• 【その10】– ヘッダー/フッター ウィザード– コード断片• (なし)– 単にヘッダーとフッターが付いたもの

35

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi 向けモバイル チュートリアル• モバイル チュートリアル：Delphi モバイル アプリ
ケーション開発（iOS および Android）–

http://docwiki.embarcadero.com/RADStudio/XE5/ja/%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB_%E3%
83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9ADelphi_%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%EF%BC%88iOS_%E3%81%8A%E3%82%
88%E3%81%B3_Android%EF%BC%89– とても良くできたチュートリアル (ただし Delphi 向け)• C++Builder に読み替えて操作– Android の手順はスキップ– iOS シミュレータの手順はスキップ– 「.」は「->」に読み替えるとうまくいくことが多い
36

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Web ブラウザコンポーネントを使用する• 【その12】– Blank Application ウィザード– コード断片• TToolBar (上)• TButton (左上)– StyleLookup: priortoolbuttonbordered– OnChange: WebBrowser1->GoBack();• TEdit (上。TButton をのぞく残りスペース)– OnChange: WebBrowser1->Navigate(Edit1->Text);• TWebBrowser– Align : alClient
37

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

コンボボックス コンポーネントを使用してリストから項目を選択する• 【その13】– ヘッダー/フッター ウィザード– コード断片• TComboBox (比較的上部)– 項目エディタ→項目の追加– 構造ペインで値を更新• TCalendar (画面中央)

38

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

写真を撮って共有する• 【その14】– Blank Application ウィザード– コード断片• TToolBar (上)• TButton (左上)– StyleLookup: cameratoolbuttonbordered– 標準アクション→メディアライブラリ→TTakePhotoFromCameraAction– イベント: OnDidFinishTaking: Image1->Bitmap->Assing(Image);• TButton (上)– StyleLookup: searchtoolbuttonbordered– 標準アクション→メディアライブラリ→TTakePhotoFromLibraryAction– イベント: OnDidFinishTaking: Image1->Bitmap->Assing(Image);• TImage (中央)– Align: alClient• TActionList

39

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

位置センサを使用する• 【その15】– ヘッダー/フッター ウィザード– コード断片• TWebBrowser– Align : alClient• TLocationSensor– Active: True
– Distance: 1– イベント: OnLocationChange––––––––––

40

char buf1[256];
char buf2[256];
sprintf(buf1, "%2.6f", NewLocation.Latitude);sprintf(buf2, "%2.6f", NewLocation.Longitude);UnicodeString url = "https://maps.google.com/maps?q=";
url += buf1;
url += ",";
url += buf2;
url += "&output=embed";
WebBrowser1->Navigate(url);

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

RAD Studio サンプル
• http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/– via ID:29490

41

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

642

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

まとめまとめ (1/2)• C++Builder によって、モバイルデバイスのアプリケーション開発が簡単に• コンポーネントの充実ぐあいが重要– 開発したい機能に集中できる• モバイルデバイスごとの UI デザインガイドライン– おのおのの UI 文化についても関心を• Delphi のコードを読めると いろいろ便利– Oracle PL/SQL のコードが読める人は有利!?

43

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

まとめ (2/2)• Delphi + LLVM / clang⇒ C++Builder• RAD Studio– 年間サポート／メンテナンスプログラム• Android 対応が楽しみ

44

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

745

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Q&A