OSDN Git Service

epub版の追加に伴う更新
[ring-lang-081/ring.git] / docs / ja-jp / source / distribute_ring2exe.txt
1 .. index:: 
2         single: Ring2EXE による Ring アプリケーションの配布方法; はじめに
3
4 ===============================================
5 Ring2EXE による Ring アプリケーションの配布方法
6 ===============================================
7
8 Ring アプリケーションの配布方法を学びます。
9
10 現在は、スグレモノである RingEXE (Ring 1.6 以降) があります。
11
12 Ring2EXE で Windows, Linux, macOS およびモバイル・アプリケーションを手軽に配布できます。
13
14 .. note:: Ring ノートパッドの配布メニューも使えます (最も簡単な方法)。
15
16 .. index:: 
17         pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE の用法
18
19 Ring2EXE の用法
20 ===============
21
22 .. code-block:: none
23
24                 ring2exe ファイル名.ring [オプション]
25
26 プログラムの入力として ファイル名.ring を指定します
27
28 このファイルが生成されます。
29
30 .. code-block:: none
31
32                 ファイル名.ringo          (Ring オブジェクトファイル - コンパイラにより生成)
33                 ファイル名.c              (このプログラムにより生成された
34                                                ringo ファイルの内容を有する
35                                                C ソースコードファイルです)
36                 ファイル名_buildvc.bat    (Visual C/C++ で filename.c をビルドするために実行します)
37                 ファイル名_buildgcc.bat   (GNU C/C++ で filename.c をビルドするために実行します)
38                 ファイル名_buildclang.bat (CLang C/C++ で filename.c をビルドするために実行します)
39                 ファイル名.obj            (Visual C/C++ コンパイラにより生成されます)
40                 ファイル名.exe            (Visual C/C++ リンカにより生成されます)
41                 ファイル名                (実行ファイル - Linux および macOS プラットフォームにおいて)
42
43 .. index:: 
44         pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE の動作方法
45
46 Ring2EXE の動作方法
47 ===================
48
49 最初に Ring コンパイラで Ring オブジェクトファイル (\*.ringo) を生成します。
50
51 C コンパイラ (オプション扱い) が存在する場合、このオブジェクトファイルは C ソースコードファイル内部へ埋め込まれます。
52
53 その後に、コンパイラと Ring ライブラリ (Ring 仮想計算機も組み込まれます) で実行ファイルを生成します!
54
55 C コンパイラが存在しない場合は Ring 実行ファイルのコピーを行い、アプリケーション名へ名称変更されます。
56
57 そして Ring オブジェクトファイルは (\*.ringo) 起動時に実行される ring.ringo が実行ファイルとなります。
58
59 よって Ring2EXE を使用する電子計算機へ C コンパイラを導入したほうが簡単で良いです。
60
61 .. index:: 
62         pair: Ring2EXE による Ring アプリケーションの配布方法; 用例
63
64 用例
65 ====
66
67 test.ring の内容は、
68
69 .. code-block:: ring
70
71         see "Hello, World!" + nl
72
73 Windows, Linux または macOS 用の実行可能ファイルをビルドするには
74
75 .. code-block:: none
76         
77                 ring2exe test.ring 
78
79 プログラムを実行するには (Windows)
80
81 .. code-block:: none
82
83                 test 
84
85 プログラムを実行するには (Linux と macOS)
86
87 .. code-block:: none
88
89                 ./test
90
91
92 .. index:: 
93         pair: Ring2EXE による Ring アプリケーションの配布方法; オプション
94
95 オプション
96 ==========
97
98 .. code-block:: none
99
100                 -keep            : 一時作業用ファイルを削除しない
101                 -static          : スタンドアロン形式による実行ファイルのビルド 
102                                    (ring.dll/ring.so/ring.dylib を使用しない)
103                 -gui             : GUI アプリケーションのビルド (コンソールウィンドウの非表示)
104                 -dist            : 配布対象のアプリケーションを準備
105                 -allruntime      : 配布物へ全てのライブラリを同梱
106                 -mobileqt        : モバイル版 Ring アプリケーションの配布準備で用いる Qt プロジェクトを準備
107                 -noqt            : 配布物から RingQt を削除
108                 -noallegro       : 配布物から RingAllegro を削除
109                 -noopenssl       : 配布物から RingOpenSSL を削除
110                 -nolibcurl       : 配布物から RingLibCurl を削除
111                 -nomysql         : 配布物から RingMySQL を削除
112                 -noodbc          : 配布物から RingODBC を削除
113                 -nosqlite        : 配布物から RingSQLite を削除
114                 -noopengl        : 配布物から RingOpenGL を削除
115                 -nofreeglut      : 配布物から RingFreeGLUT を削除
116                 -nolibzip        : 配布物から RingLibZip を削除
117                 -noconsolecolors : 配布物から RingConsoleColors を削除
118                 -nomurmuhash     : 配布物から RingMurmurHash を削除
119                 -nocruntime      : 配布物から C ランタイムを削除
120                 -qt              : 配布物へ RingQt を追加
121                 -allegro         : 配布物へ RingAllegro を追加
122                 -openssl         : 配布物へ RingOpenSSL を追加
123                 -libcurl         : 配布物へ RingLibCurl を追加
124                 -mysql           : 配布物へ RingMySQL を追加
125                 -odbc            : 配布物へ RingODBC を追加
126                 -sqlite          : 配布物へ RingSQLite を追加
127                 -postgresql      : 配布物へ RingPostgreSQL を追加
128                 -opengl          : 配布物へ RingOpenGL を追加
129                 -freeglut        : 配布物へ RingFreeGLUT を追加
130                 -libzip          : 配布物へ RingLibZip を追加
131                 -libuv           : 配布物へ RingLibuv  を追加
132                 -consolecolors   : 配布物へ RingConsoleColors を追加
133                 -murmurhash      : 配布物へ RingMurmurHash を追加
134                 -cruntime        : 配布物へ C ランタイムを追加
135
136 .. index:: 
137         pair: Ring2EXE による Ring アプリケーションの配布方法; スタンドアロン形式によるコンソールアプリケーションのビルド方法
138
139 スタンドアロン形式によるコンソールアプリケーションのビルド方法
140 ==============================================================
141
142 “-static” オプションはコンソールアプリケーションの実行ファイルをビルドします (静的リンク)。
143
144 こうすると Ring 動的リンクライブラリ (ring.dll, ring.so または ring.dylib) を使用しません (不要になります)。
145
146 ほかのライブラリを使うには、アプリケーションでライブラリをインクルードしてください。 
147
148 .. code-block:: none
149
150                 ring2exe test.ring -static
151
152
153 .. index:: 
154         pair: Ring2EXE による Ring アプリケーションの配布方法; RingAllegro アプリケーションの配布方法
155
156 RingAllegro アプリケーションの配布方法
157 ======================================
158
159 この内容のコードが test2.ring にあります。
160
161 .. code-block:: ring
162
163
164         # Ring2EXE ツールのテスト用プログラムです!
165         # RingAllegro の用法
166
167         load "gameengine.ring"   # ゲームエンジンへ制御権を渡します。
168
169         func main                # ゲームエンジンから呼び出されます。
170
171                 oGame = New Game # ゲームオブジェクトの作成
172                 {
173                         title = "My First Game"
174                 }     
175
176
177 ゲームの配布用に実行可能ファイルのビルドと準備をするには
178
179 “-dist” および “-allruntime” オプションで全てのライブラリをインクルードします。
180
181 .. code-block:: none
182
183         ring2exe test2.ring -dist -allruntime
184
185 前述のコマンドを実行後、出力先は:
186
187 * Windows : target/windows フォルダ
188
189 * Linux   : target/linux フォルダ
190
191 * macOS   : target/macos フォルダ
192
193 前述のコマンドは、全ての Ring ランタイムライブラリを配布物へ追加します。
194
195 しかし RingAllegro のみ必要な場合は、このコマンドのほうが良いです。
196
197 .. code-block:: none
198
199         ring2exe test2.ring -dist -allegro -cruntime
200
201 これは、不要なランタイムファイルを除外することで配布物の容量を削減します!
202
203 また “-gui” オプションでコンソールウィンドウを非表示にできます。
204
205 よって、このコマンドのほうが良いです。
206
207 .. code-block:: none
208
209         ring2exe test2.ring -dist -gui -allegro -cruntime
210
211 .. index:: 
212         pair: Ring2EXE による Ring アプリケーションの配布方法; RingQt アプリケーションの配布方法
213
214 RingQt アプリケーションの配布方法
215 =================================
216
217 この内容のコードが test3.ring にあります。
218
219 .. code-block:: ring
220
221         # Ring2EXE ツールのテスト用プログラムです!
222         # RingQt の用法
223
224         load "guilib.ring"
225
226         new qApp {
227                 new qWidget() {
228                         setwindowtitle("Hello, World!")
229                         resize(400,400)
230                         show()
231                 }
232                 exec()
233         }
234
235
236 GUI アプリケーションの配布用に、実行可能ファイルのビルドと準備をするには
237
238 “-dist” および “-allruntime” オプションで全てのライブラリをインクルードします。
239
240 .. code-block:: none
241
242         ring2exe test3.ring -dist -allruntime
243
244 前述のコマンドを実行後、出力先は:
245
246 * Windows : target/windows フォルダ
247
248 * Linux   : target/linux フォルダ
249
250 * macOS   : target/macos フォルダ
251
252 前述のコマンドは全ての Ring ランタイムライブラリを配布物へ追加します。
253
254 RingQt のみ必要ならば、このコマンドのほうが良いです。
255
256 .. code-block:: none
257
258         ring2exe test3.ring -dist -qt -cruntime
259
260 これは、不要なランタイムファイルを除外することで配布物の容量を削減します!
261
262 また “-gui” オプションによりコンソールウィンドウを非表示にできます。
263
264 よって、このコマンドのほうが良いです。
265
266 .. code-block:: none
267
268         ring2exe test3.ring -dist -gui -qt -cruntime
269
270 .. index:: 
271         pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル用アプリケーションの配布方法 (RingQt)
272
273 モバイル用アプリケーションの配布方法 (RingQt)
274 =============================================
275
276 “-mobileqt” オプションで RingQt アプリケーション (test3.ring) 用の Qt プロジェクトを準備します。
277
278 用例 :
279
280 .. code-block:: none
281
282         ring2exe test3.ring -dist -mobileqt
283
284 前述のコマンドを実行後、 target/mobile/qtproject フォルダに Qt プロジェクトがあります。
285
286 メインのプロジェクトファイルは project.pro です。 Qt Creator IDE で開くことができます。
287
288 またリソースファイルもあります : project.qrc
289
290 別の重要なファイルは C++ メインファイルです : main.cpp
291
292
293 .. index:: 
294         pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル版 Cards ゲームのビルド方法 (RingQt)
295
296 モバイル版 Cards ゲームのビルド方法 (RingQt)
297 ============================================
298
299 このフォルダにある Cards ゲームは Ring を使用した Android パッケージのビルド方法の良例であると考えられます:
300         ring/application/cards
301
302 Cards ゲームのフォルダには三本のファイルがあります
303
304 * cards.ring  : ゲームのソースコード
305
306 * cards.jpg   : ゲームで使用される画像ファイル
307
308 * project.qrc : Qt プロジェクトで使用されるリソースファイル
309
310 リソースファイルの内容:
311
312 .. code-block:: none
313
314         <RCC>
315                 <qresource>
316                         <file>cards.ringo</file>
317                         <file>cards.jpg</file>
318                 </qresource>
319         </RCC>
320
321 二本のリソースファイルがあります。
322
323 一本目のファイルは cards.ringo (Ring オブジェクトファイル) であり、二本目のファイルは cards.jpg (画像ファイル) です。
324
325 まず、 Ring2EXE でリソースファイル (target/mobile/qtproject/project.qrc) を生成します。
326
327 しかし、このファイルの内容は cards.ringo のみです (Ring2EXE は Ring コンパイラを呼び出すことにより生成します)。
328
329 このリソースファイルへ画像を追加してから必ず更新してください : cards.jpg
330
331 更新後にメインのアプリケーションファイルへリソースファイルをコピーします。
332
333 Ring2EXE の再実行時に更新済みリソースファイルを使用します!
334
335 これでモバイル用の Card ゲームのビルドが行えます。
336
337 (1) このコマンドを実行します
338
339 .. code-block:: none
340
341         ring2exe cards.ring -dist -mobileqt
342
343 (2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
344
345 (3) Qt Creator でビルドと実行を行います。
346
347
348 Cards ゲームで画像ファイルを検出する方法は?
349
350 RingQt にはシンプルな関数があります: AppFile()
351
352 関数はデスクトップまたはモバイルプラットフォームでアクセスするファイルを決定するために使えます。
353
354 このコードは cards.ring からの引用です。
355
356 .. code-block:: ring
357
358         mypic = new QPixmap(AppFile("cards.jpg"))
359
360 必要ならば AppFile() 関数を画像ファイルに使用します!
361
362 .. index:: 
363         pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル版 Weight History アプリケーションのビルド方法 (RingQt)
364
365 モバイル版 Weight History アプリケーションのビルド方法 (RingQt)
366 ===============================================================
367
368 このフォルダにある Weight History アプリケーションは Ring による Android パッケージのビルド方法であり
369 Ring2EXE と Qt を使用したモバイル・アプリケーションを配布するための別例であると考えられます:
370
371         ring/application/weighthistory 
372
373 Weight History アプリケーションのフォルダには四本のファイルがあります
374
375 * weighthistory.ring : アプリケーションのソースコード
376
377 * weighthistory.db : SQLite データベース
378
379 * project.qrc : Qt プロジェクト用のリソースファイル
380
381 * main.cpp : Qt プロジェクト用のメイン C++ ソースファイル
382
383 モバイル用の Weight History アプリケーションをビルドするには
384
385 (1) このコマンドを実行
386
387 .. code-block:: none
388
389         ring2exe weighthistory.ring -dist -mobileqt
390
391 (2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
392
393 (3) Qt Creator でビルドと実行を行います。
394
395 リソースファイル (project.qrc) には以下のファイルが記載されています。
396
397 .. code-block:: none
398
399         <RCC>
400                 <qresource>
401                         <file>weighthistory.ringo</file>
402                         <file>weighthistory.db</file>
403                 </qresource>
404         </RCC>
405
406 weighthistory.ringo は Ring オブジェクトファイルであり Ring2EXE が Ring コンパイラを呼び出すことで生成します。
407
408 weighthistory.db はデータベースファイルです。
409
410 main.cpp には小規模な更新があるため、モバイル機器の書き込み可能なリソースの場所へデータベースファイルをコピーしてください。
411
412 .. code-block:: none
413
414     QString path3 ;
415     path3 = path+"/weighthistory.db";
416     QFile::copy(":/weighthistory.db",path3);
417
418 この作業はデータベースファイルのみ行う必要があります!
419
420 Ring2EXE 使用時、ツールは project.qrc および main.cpp の確認を行い、存在する場合は更新されたファイルとして
421
422 Ring2EXE により生成されたデフォルト版である target/mobile/qtproject を使用します。
423
424 よって Ring2EXE でファイルを更新した後に、更新する時にアプリケーションのフォルダへファイルをコピーするために使用してください。
425
426 .. index:: 
427         pair: Ring2EXE による Ring アプリケーションの配布方法; フォームデザイナーをモバイル機器用にビルドするには (RingQt)
428
429 フォームデザイナーをモバイル機器用にビルドするには (RingQt)
430 ===========================================================
431
432 モバイル用のアプリケーションをフォームデザイナー・アプリケーション (ring/applications/formdesigner) でビルドをするには
433
434 (1) このコマンドを実行
435
436 .. code-block:: none
437
438         ring2exe formdesigner.ring -dist -mobileqt
439
440 (2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
441
442 (3) Qt Creator でビルドと実行を行います。
443
444 ring/application/formdesigner フォルダにはリソースファイルがあります : project.qrc
445
446 Ring2EXE により自動的に使用されます。
447
448 .. code-block:: none
449
450         <RCC>
451                 <qresource>
452                         <file>formdesigner.ringo</file>
453                         <file>image/allevents.png</file>
454                         <file>image/checkbox.png</file>
455                         <file>image/close.png</file>
456                         <file>image/combobox.bmp</file>
457                         <file>image/datepicker.bmp</file>
458                         <file>image/dial.png</file>
459                         <file>image/formdesigner.png</file>
460                         <file>image/frame.png</file>
461                         <file>image/grid.bmp</file>
462                         <file>image/hyperlink.png</file>
463                         <file>image/image.png</file>
464                         <file>image/label.png</file>
465                         <file>image/layout.png</file>
466                         <file>image/lcdnumber.png</file>
467                         <file>image/listview.png</file>
468                         <file>image/lock.png</file>
469                         <file>image/new.png</file>
470                         <file>image/open.png</file>
471                         <file>image/progressbar.png</file>
472                         <file>image/project.png</file>
473                         <file>image/pushbutton.png</file>
474                         <file>image/radiobutton.png</file>
475                         <file>image/save.png</file>
476                         <file>image/saveas.png</file>
477                         <file>image/select.png</file>
478                         <file>image/slider.png</file>
479                         <file>image/spinner.bmp</file>
480                         <file>image/statusbar.png</file>
481                         <file>image/tab.png</file>
482                         <file>image/textarea.png</file>
483                         <file>image/textfield.png</file>
484                         <file>image/timer.png</file>
485                         <file>image/toolbar.png</file>
486                         <file>image/tree.bmp</file>
487                         <file>image/videowidget.png</file>
488                         <file>image/webview.png</file>
489                 </qresource>
490         </RCC>
491
492 Cards ゲームと同様、フォームデザイナーは AppFile() 関数を画像ファイル名を決定するために使用します。
493
494 このコードは ring/applications/formdesigner/mainwindow/formdesignerview.ring からの引用です。
495
496 .. code-block:: ring
497
498         func CreateToolBar
499                 aBtns = [
500                                 new qtoolbutton(win) {
501                                         setbtnimage(self,AppFile("image/new.png"))
502                                         setclickevent(Method(:NewAction))
503                                         settooltip("New File")
504                                 } ,
505                                 new qtoolbutton(win) {
506                                         setbtnimage(self,AppFile("image/open.png"))
507                                         setclickevent(Method(:OpenAction))
508                                         settooltip("Open File")
509                                 } ,
510                                 new qtoolbutton(win) {
511                                         setbtnimage(self,AppFile("image/save.png"))
512                                         setclickevent(Method(:SaveAction))
513                                         settooltip("Save")
514                                  } ,
515                                 new qtoolbutton(win) {
516                                         setbtnimage(self,AppFile("image/saveas.png"))
517                                         setclickevent(Method(:SaveAsAction))
518                                         settooltip("Save As")
519                                  } ,
520                                 new qtoolbutton(win) {
521                                         setbtnimage(self,AppFile("image/close.png"))
522                                         setclickevent(Method(:ExitAction))
523                                         settooltip("Exit")
524                                 }
525                         ]
526
527                 tool1 = win.addtoolbar("files")  {
528                         for x in aBtns { addwidget(x) addseparator() }
529                 }
530
531 この用例でサブフォルダでの画像の用法を理解できます。
532
533
534 .. index:: 
535         pair: Ring2EXE による Ring アプリケーションの配布方法; Qt リソースファイルの作成方法 (Folder2qrc)
536
537 Qt リソースファイルの作成方法 (Folder2qrc)
538 ==========================================
539
540 大量の画像とファイルを有する大規模 RingQt プロジェクトがある場合、モバイル・アプリケーションの配布時にリソースファイル (\*.qrc) へファイルを必ず追加してください。
541
542 Ring 1.6 以降では Folder2qrc ツールにより、一つずつファイルを追加する必要がなくなるので時間の節約になります。
543
544 用例:
545
546 .. code-block:: none
547
548         folder2qrc formdesigner.ring
549
550 アプリケーションフォルダに移動している間に、メインソースファイルの決定をするために
551 Folder2qrc は現在のフォルダとサブフォルダにある全てのファイルを確認します。
552 そして mainfile.ringo の後にリソースファイルを追加します (この用例ではformdesigner.ringo です)。
553
554 出力ファイル : project.qrc
555
556 ファイルを開く、または削除するためにリソースは不要です!
557
558
559 .. index:: 
560         pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE に関する重要情報
561
562 Ring2EXE に関する重要情報
563 =========================
564
565 * Ring2EXE で配布物を準備すると、古い配布物にあるファイルを全て削除します。
566
567 例えば target/windows が使用される場合は
568
569 .. code-block:: none
570
571         ring2exe test3.ring -dist -allruntime
572
573 target/windows にあるファイルは再びファイルを追加する前に削除されます。
574
575 これは、モバイル機器用の配布物を準備するときに重要となります。
576
577 .. code-block:: none
578
579         ring2exe test3.ring -dist -mobileqt
580
581 リソースファイルの修正時、 project.qrc やメインファイル main.cpp をアプリケーションフォルダへコピーすることを忘れないように注意してください!
582
583 前述のコマンドを再実行すると、 Ring2EXE で更新版を使えます!
584
585 * Ring2EXE は Ring 記述しています。こちらからソースコードを読むことができます
586
587         https://github.com/ring-lang/ring/blob/master/ring2exe/ring2exe.ring
588
589 * ライブラリの情報は個々の独立したファイルに記録されています。よって将来、新しいライブラリへ対応する場合は、このファイルを自動的に更新できます。
590
591         https://github.com/ring-lang/ring/blob/master/ring2exe/libs
592