torum

主に開発中のアプリにまつわる技術系の事。

クロスプラットフォームのネイティブなアプリ開発ついての独り言

Lazarus(というかObject Pascal/Free Pascal)の良い点は、真の意味でのクロスプラットフォームでなおかつネイティブ(native and also cross-platform)なアプリ開発が出来る事です。

Object Pascal/Free Pascalは、”write once compile anywhere” がモットー。

「真の意味で」と「ネイティブな」はどういうことかと言うと。。。

1)各OSで、ネイティブのバイナリ実行形式のアプリケーションが開発出来る

つまり、ランタイムとかスクリプトインタープリターとかを介するPython, Java, Ruby, JS, 等々は全然ネイティブじゃない。ネイティブじゃないと、出来ることも大幅に制約されるし、速度やリソースの面で劣る。一般ユーザーに、「動かすにはPython/Java/etc入れてね」とか環境汚さないで欲しい。。。C#は.NETランタイム上で動くから「ネイティブ」じゃないけど、Windows上ではネイティブ扱いにしたいマイクロソフト、といった所でしょうか。。。

2)各OSで、そのOSのネイティブなウィジェット(ウィンドウやボタンなど)を使ったデスクトップGUI生成

つまりWindowsならWinAPI, LinuxならQTなりGTKmacOSならCarbonとか。そうじゃないと、各OSのルック&フィールや文化に合わず、とても違和感のある使いづらいUIになってしまい、こまかな制御も効かず、まったく使い物にならない。大昔、これでJavaが大失敗した(Swingだっけ?Javaは糞。WindowsではJavaは容量を無駄にするゴミ。オラクルが糞。どこでも動くとか大ウソ。GUIもだめ。以上)。

3)サンドボックスの中ではない

つまりサンドボックス(ブラウザ内のWebアプリだったり所謂ハイブリッドProgressive Web AppsーPWAだったりWindowsのUWP)だと、ローカルのリソースにアクセス出来ない。例えば、ローカル(ネットワーク)のDBサーバーとかプリンター(単なる印刷でなく帳票とか)、普通のファイルにすらアクセスできない場合もある。これだったら無理せず普通のWebアプリでやるか、ネイティブアプリで作った方が良い。無理してElectron(注)のようなのを使って。。。、というのに利点があるのはレアなケースだと思う。

・注)Electron は個人的に微妙(GitHub Desktopは使っているけれど^^)。SPAにネイティブWindowのガワを被せて無理やりローカルリソースにアクセスする、という・・・。無理やり感が苦手。Web系の技術しか出来ない人が無理やりデスクトップ開発をしたい場合に使う印象。まぁWebデザインの自由度を持ち込めるからそれが利点か。あと、これって、大昔あった、HTA(.hta) – HTML Applications – を連想するんですよね。HTAって、ブラウザ内にHTML+Javascript表示しているだけってやつ。ブラウザ内でサンドボックスのはずが何故かローカル権限をもって、セキュリティ的に危険って一時話題になってあまり使われなくなったやつ。

ものによっては、1)が出来て2)が出来ない、または2)が出来て1)でない、というのも存在するけれど、すべてをちゃんと満たすには、C/C++ガリガリやるしか方法はない。。。ただ、C/C++で各OS意識したクロスプラットフォームGUI開発はすんごくめんどい、はず。ChromeブラウザとかMozillaとかみたいなリソースを持っている所ぐらいしかできない。

けど、しかし! Lazarus(というかObject Pascal/Free Pascal)を使えば、サクッとクロスプラットフォームでネイティブなアプリ開発が出来る・・・ただし、OSごとに色々(サードパーティーコンポーネントの対応状況に差が)ありますが…(ボソ)。

Lazarus(というかObject Pascal/Free Pascal)であれば、Linux/Windows両方で動くDaemon/Service系とかワンソースでOKだし、デスクトップアプリでも(ActiveXとかサードパーティー製アプリ使わなければ)普通にOK。単に、その環境でソースをコンパイルするだけでネイティブなバイナリが生成される。Electron本体みたいなのも作ろうと思えば作れる。

問題は、最近マイクロソフトが、Windowsからネイティブのアプリを締め出しにかかっていること。。。まぁ昔からだけど(ロングホーンとか、あれはなんだったのか)。だけど、現実的にはほとんどのアプリ、ブラウザを含めてWin32アプリだから、WindowsからWin32ネイティブアプリは無くせない。もし、ストアアプリ(UWP)のみ、強制!って事になったら、普通にWindowsを使うのを辞めるだけw

http://bto-pc.jp/btopc-com/select/windows-10-s-2017-05.html


参考:
“What would you use to make cross-platform desktop application?”

news.ycombinator.com

追記:

これは非常に共感できる。自分もオールドタイマーw

qiita.com

 

補足:

デスクトップPCと携帯・スマホは、まったく別モノ(別デバイス)と考えるべきもので、クロスプラットフォーム(cross-platform)というより、クロスデバイス(cross-device)と言った方が良い。元々のUWPの思想であるまったく同じアプリを携帯とPCで動かす、というのはベリーバッドのアイデア。タッチ操作とキーボード+マウスの操作性は根本的に違う上に、ディスプレイのサイズによる一覧性の違い(4Kディスプレイと携帯画面)考えると、GUIの設計思想やウィジェットからして、デスクトップとスマホは根本的に別物であるべき。

Appleでの話しだけど、分かってる人は分かってる。

iOS has no concept of a mouse cursor and runs only on touchscreen devices. MacOS has no support for touchscreen devices and requires a mouse pointer. “One user experience” is neither possible nor desirable.

Appleの「Marzipan」プロジェクトの目的はmacOS/iOSで動くアプリではなく、UIKitやAppKitに続く新しいフレームワークを開発者に提供すること? | AAPL Ch.

 

同じアプリで異なるデバイスにおいて共通のUXを、なんて無理であって、望ましくもない、と。それぞれ最適のUIを使え、と。

つまり、UWPは存在意義が。。。

 

 

 

さらに追記:

続きを書きました。

torum.hatenablog.com