初心者におすすめのデスクトップアプリ開発のフレームワークは?
GUIプログラミングほぼ未経験の人間が趣味でデスクトップアプリを開発する場合のおすすめフレームワークを教えてください。
プログラミング自体はJsvaとPythonを触ったことがあります。
求める点としては、
- モダンな格好良いUIを作れる(追記)
- なるべくサクサク動くアプリが作れる
- ライブラリが充実していてやれることが多い
- 情報、特に日本語の資料が充実してる
- 無料で開発できる。ライセンスが緩い。
- 最悪Windowsで動けば良い。もちろんスマホアプリに対応しているに越したことはない。
一応自分なりに調べて見つけた候補としては、
Electron
これが一番無難そう?コミュニティが成熟していて情報もライブラリも豊富。JavaScriptは自分でも名前を着たことがあるくらい有名な言語だし勉強してみてもいいかもと思える。
一方でアプリサイズが大きくて動作も重めらしい。Tauriというのもあるらしく、こちらは小さく軽いがJavaScriptとRustを同時に学ぶのはしんどそう。また発展途上で情報も少ない。
WPF
Windowsで動けばいいならこれでWindows標準?が一番楽そう。C#もJavaに似ているということでそこまで苦ではないかも。ただ画像検索した感じではUIは野暮ったいような… UWP(React Native)というのもあるらしいが情報が少ないのと公開法が特殊なのが不安要素。
Flutter
求める点の多くを満たしているように思える。ただそもそもはモバイル用のフレームワークらしい。デスクトップアプリの開発にも使えるとのことだが、モバイルと遜色なく使えるのか、一応できますという程度なのか不明。
またDartという言語で書くらしい。Javaに似ているとのことなのでそこまで難しくないかもしれないがどうせ勉強するなら人気な言語のほうが良い。FletというPython版もあるようだけど、情報があまりなく、本当にまったく同じに使えるのか、速度はどうなるのかなど不明。
JavaFx
求める点の多くを満たしていて、しかもJavaで書ける。一瞬、これで決まりかと思うも、本家のJavaでは既に廃止されている模様。今からわざわざ始める価値があるだろうか?
自分の中では今のところFlutterとJavaFxがごく僅差で優勢という感じですが、なにぶん未経験ゆえに定性的なことは調べられても定量的なことが分からず困っています。「自分ならこれにする」とか「この部分は気にするほどじゃないぞ」とか「ここの認識は間違ってるぞ」とか「ほかにもこんな選択肢があるぞ」などあれば是非アドバイスください。
なんでも良いので触ってみるのが一番では?
何をやりたいか書いていないので、どれでも良いよとしか言えない
本家のJavaでは既に廃止されている模様
別に廃止されていませんよ
OracleJDKに同梱されなくなったことを勘違いしていませんか?
OpenJFXは今もありますし、LibericaJDKのように同梱されている環境もあります
@SurferOnWwwさん、@ligunさん、回答頂きどうもありがとうございます。
なにか特定のアプリをつくるというよりも、これを勉強しておくと色々簡単にできて便利だよというフレームワークを知りたいと思っています。
@ligunさん、OpenJFXに引き継がれているというのは一応知っていました。ただ"OpenJFXなんか形だけでほとんど活動してない"とか"JavaFXはディスコンになるからこれから勉強するには適さないよ"みたいな記述も見かけたので気になっていました。@ligunさんの認識ではそのようなことはないということですか?
最新技術を追いたいのか、枯れてるモノで作りたいのか、情報が少なくても大丈夫か、難易度はどの程度がいいのか、速度的な要件はあるのか、3Dやリアルタイム処理、デバイスなどとの絡みの有無、Windows以外のプラットフォームについてなど要件に依ります。
そういう何の前提もなく無責任に気分で選べということなら、WPFでいいと思います。ただしかなり難解です。
@dameyodamedameさん、回答頂きどうもありがとうございます。
最新技術を追いたいのか、枯れてるモノで作りたいのか、
難しいところです。モダンなUIで作りたいのであまり古臭いものは困りますが、バグが多かったり情報が少なすぎても困ります。
情報が少なくても大丈夫か、
多い方が良いです。上に挙げた例だと、Tauri、UWP、Fletは少ないと感じました。
難易度はどの程度がいいのか
簡単な方がいいです。JavaとPythonはCUIならなんとかなりました。CやC++はメモリ管理が厳しいと思います。
速度的な要件はあるのか、
早いほうが良いです。
3Dやリアルタイム処理
少なくてもリアルタイム処理は欲しいです。3Dはできるに越したことはないくらいです。
デバイスなどとの絡みの有無
デスクトップPC、マウス、キーボードは必須です。他はできるに越したことはないくらいです。
Windows以外のプラットフォームについて
Windowsは必須で他はできるに越したことはないくらいです。
優先順位としては Windows >> Mac=Linux=Android > iOS くらいです。
WPFはUIがなんか野暮ったい感じがするのが気になります。ModernWpfUIみたいなライブラリもあるようですが使えるコントロールも限られているみたいですし……
なにか特定のアプリをつくるというよりも、これを勉強しておくと色々簡単にできて便利だよというフレームワークを知りたいと思っています。
何がしたいのかが決まっている/決まっていないでは話が大きく異なってくると思います。
何も決まってないようですが、そういうことですと、ここのような Q&A サイトで、質問者さんのスキルや好みなど個人的事情は何も知らない赤の他人の意見を聞くより、自分で少し調べてみて、自分で判断するのが良いと思うのですが。
もしくは Face-to-face でやり取りできて、個人的事情も分かってもらえそうな環境(学校など)で聞くとか。
決まっているのであれば、例えば(あくまで例えばです)、極端な例かもしれませんが、SQL Server のテーブルのレコード一覧を表示し、ユーザーがそれを見てレコードの追加・削除・変更を行い、結果をデータベースに反映するというような場合、.NET Framework 版の Windows Forms アプリ一択です・・・というようなアドバイスは出てくると思いますが。
見た目が優先というかデザイン的な流行りが気になるならHTML/JavaScript/CSS的な記述が出来るElectronか、それに近いflutterやtauriなどを使うのもありかもしれません。3DもWebGLなどの技術に基づく何某かを使えばそれなりにリアルタイムで動きます。ただ難易度が高めだったり、情報が多くなかったりします。
結局要求がザックリしててデザイン重視で難易度低め情報多めなら、何となくデスクトップではなくwebでreactやらspaで作ればいいのではないでしょうか?この際速度には目を瞑ればいいでしょう。慣れたらelectronに手を出す感じです。
OpenJFX、少なくとも公式を見る限りだとJavaの更新に合わせてバージョンアップもしてますしGitHubのコミットもそれなりの頻度であるのでディスコンになるとかの情報がなにのことなのかわかりません。
積極的に追いかけてるわけではないのでそういった情報があるのかまでは確認していません。
どの環境を使えばいいか迷う気持ちは(自分もよくあるので)わかるのですが、最初に書いたようにとりあえず目についたもの一つ試してみるのが早いと思います。
この質問が建ってからこの時間までの間に手を出していれば、その分雰囲気つかめていたかもしれませんし
選択に失敗して時間を無駄にすることを考えてるのかもしれませんが正直今後実装していく時間に比べると些細なものなのと、一つ軸になるものを知ると比較ができるようになるので無駄にはならないはずです。
他の方と述べてるようにやっぱり具体的な話や背景がないとこれと絞りづらいです。
例えば自分だけが使う、簡単にボタンや選択肢をクリックするだけの自動化ツールみたいなのがすぐ欲しいとかだったらPython+tkinterじゃだめなの?って思いますし、フリーや有償ソフトとして不特定多数に配るのでしたらWPF(C#)とかでいいじゃんと思います。
JavaFXだって第一選択肢としてはあげませんが、その人がJavaが得意だったり、あるいは既にJavaでロジックがある上でGUI組みたいとかなら勧めますし
JavaFXは情報が少なすぎます。キャッチアップも出来ていませんが、数年前に軽く使ってみた感想だと
- 開発環境がショボくて手作り感がある
- あるバージョンからJREに含まれないので展開しにくい
- CSSなどは使えるけどユーザー少なすぎてそもそも動作が不安(不具合に遭遇したことはない)
など、あまりオススメはしません。感覚的にはJavaならSwingと迷う感じです。OpenJFXとして生きているものの、Oracleに捨てられた印象が強すぎて、マニアが趣味で追っかけるくらいのモノだと思っています。