はじめに
本記事、および後に続く一連の記事は、Pythonでデスクトップアプリ/スマホアプリを作りたい人に向け、PythonのGUIフレームワークの1つである__kivy__の考え方・始め方・使い方について解説した記事になります。
今回はその第一弾として、早速kivyでのプログラミングに入る前に、「なぜkivyを使うか」という視点で、アプリを作る上で考えておくべき諸項目について簡単にまとめておきたいと思います。
アプリ・言語・フレームワークについて
なぜネイティブアプリか
一言で「アプリ」と言っても、実際は「ネイティブアプリ」と「Webアプリ」の2種類が存在します。そしてこれから解説しようとしているkivyは、いわゆる「ネイティブアプリ」を作るためのフレームワークとなります。
[1]Webアプリとネイティブアプリの違いとは
[2]ネイティブアプリとwebアプリはどちらを使うべきか
補足として、デスクトップアプリに限れば、Dockerのような仕組みを使ってWebサーバごと配布・インストールしてしまえば、所謂「Webアプリ」をインターネットなしに使うことも可能といえば可能です。
いずれにせよ、これから作ろうとしているアプリケーションの提供形態として「ネイティブアプリ」という形が本当にベストなのか、作り始める前に一度整理おくと良いかと思います。
なぜPythonか
Pythonが素晴らしいプログラミング言語であることは間違い無いのですが、そのデメリットとして最も頻繁に挙げられる「処理の遅さ」は、今回のGUIアプリ製作のような「重くなりがち」なプログラムを作る際には常につきまとってくる課題です。
Pythonの多くのライブラリ同様、kivy自体にも処理の高速化のために様々な工夫がなされており、簡単な画面であれば問題なく動作するのですが、画面上の部品を何百・何千の単位で一度に操作しようとすると、どうしても動作の遅さが気になり始めます。アプリの規模(?)がどんどん強大化し、次第に「苦労してでもC++で書いていたらもっとキビキビ動いたはずなのになぁ」と頻繁に後悔するようなことにもしなれば、それはとても悲しいことです。
またネイティブアプリの商用配布を考えたとき、プログラムのコードを暗号化・難読化の必要がある場合も多いです。普段、機械学習やWebのバックエンド等でPythonを使っている方々には馴染みがないかもしれませんが、Pythonの暗号化や難読化は、もちろん不可能ではありませんが、ちょっと一手間かかるという事も、頭に留めておいて損はありません。
改めて、Pythonを使うことよる開発の簡便さ・組み込んで使えるライブラリの豊富さが、本当に出来上がったアプリの起動・挙動の遅さを補って余りあるものなのか、一度考えてみることも大切だと思います。
なぜkivyか
PythonのGUIフレームワークには、他にもいくつかの選択肢があります。
[1]【わかりやすく解説】PythonのGUIライブラリを比較10選 おすすめはどれ?
[2]【Python】GUIライブラリの比較・おすすめ
各記事にある通り、kivyは今も(2018年9月時点)人気と勢いのあるGUIフレームワークであることは間違いないです。日本語の文献が少ないのも、次第と解消されていくでしょう。
ただ、これら記事で書かれておらず、私がkivyを使っていて最も苦労したのが、__「日本語入力ができない」__という点です。
正確には、方法が無いわけではないですが、機能がだいぶ制限されているか、割りと手間がかかりバグが出やすい方法になります。
乱暴な言い方をしてしまえば、GUIの構成要素なんてのは
- 文字や画像を表示するための”ラベル”
- 何かを操作するための”ボタン”
- 何かを入力するための”フォーム”
の3つが約9割を占めます。そのうちの1つに作り方・使い方に制限があるのは、割りと致命的なように思います。そしてこの問題は、公式の対応を見る限り、もうしばらくの間は解消されないでしょう。
とはいえ繰り返しになりますが、方法が全く無いわけではないですし、私が取った方法(別のGUIフレームワークの部品を流用する)も一応ありますので、それについては後ほどご紹介します。
ここまでのまとめ
長くなりましたので一度まとめます。ここまでだいぶネガティブな内容ばかりを挙げてしまいましたが、私自身はkivyが大好きです。それ故に、こうしたネガティブな側面を敢えて先に紹介することで、「せっかく勉強したのに、せっかく作ったのに、○○ができないせいで全部ムダになった!」といった不幸を減らしたいと考えております。
さて、ここまでのポイントをまとめると
- ネイティブアプリならではのメリット/デメリットを考慮する必要がある
- 本当に大規模なアプリは挙動が重い
- 日本語入力には少々手間がかかる
です。これらを考慮すると、
- ネット環境やブラウザなどが無い端末にも手軽に配りたいアプリ
- (画面的な意味で)割りと小規模なアプリ
- Pythonの強み(開発の楽さ、豊富なライブラリ)を活かせるアプリ
- 日本語入力の必要が少ないアプリ
のようなアプリであれば、本当の意味でkivyを使う価値があるのではないかと私は考えています。
最後に
ここまでお付き合い頂きありがとうございました。
最後に、kivyの素晴らしさについて簡単にご紹介します。
以後の記事にて詳しく紹介しますが、kivyには、kivy語と呼ばれる、開発を簡単にするための非常に独特な機構を有しております。この機構は、画面上の構成要素を、ある意味レゴブロックのように「積み上げる・組み立てる」ことを可能にします。
これにより、HTML等のコードと比較しても、部品同士の位置関係が非常に解りやすく、レイアウト変更、色やサイズの微調整が非常に簡単です。また「積み上がったブロックのような画面構成」という仕様から、要素にIDをつけたりブロックの親関係・子関係を辿ることでの「任意の部品へのアクセス」が非常に簡単で、『このボタンを押したら○○と××の色を赤くしたい』のような処理が一切の苦労なく記述出来ます。それによって、簡単なアプリであればものの5分とかからずに完成します。
...とまぁ、文字で説明してもあまり説得力がないと思いますので、次回以降、手を動かしながら実感していただければと思います。
「導入編」は以上になります。
次回から、基礎編を進めていきたいと思います。
ありがとうございました。