Glade3に対応したGTK+3ベースのアプリケーションを開発できるようになる予定です。
Quicklyコマンドについて
先ほど実行したコマンドについて説明します。以下は、アプリケーションの「最初のひな形」を作成するためのコマンドです。
"ubuntu-application"はテンプレート名で、"uwr-sample"はアプリケーション名です。テンプレートには以下のようなものを指定できます。
- ubuntu-application
- 一般的なGUIアプリケーションを作るときに使用します。ステータスバー付きのメインウィンドウにメニューバー、簡易的な設定ダイアログとAboutダイアログ、それにヘルプウィンドウが生成されます(図2)。
- ubuntu-cli
- コンソールアプリケーションを作るときに使用します。テンプレートの中では一番シンプルなコードが生成されますので、簡単なPythonツールを作ってPyPIなどで公開したいときにも便利です。
- ubuntu-pygame
- pygameを使ったゲームを作るときに使用します。作成した段階で、簡単なシューティングゲームが動きます(図3)。
- ubuntu-flash-game
- Flashを使ったゲームアプリを作るときに使用します。このテンプレートだけは他と異なり、アプリケーション名の後ろにゲーム本体にしたいSWFファイルを指定する必要があります。
アプリケーションは任意の名前を指定できます。ただし、既存のPythonモジュール名と被るような名前をつけると、モジュールインポート時にバッティングがおきて動作しないことがありますので注意してください。
createコマンドによりアプリケーションの作成が成功すると、以降生成されたディレクトリの中で以下のようなコマンドを実行できます。
- quickly tutorial:ヘルプウィンドウを表示します。
- quickly run:アプリケーションを実行します。
- quickly edit:編集対象となるファイルをエディターで開きます。
- quickly design:GUI設計ツールであるGladeを起動します。
- quickly debug:デバッガであるWinpdbを起動し、アプリケーションを実行します。
- quickly test:testsディレクトリにあるテストスクリプトを実行します。
- qucikly save "comments":変更したファイルをbzrコマンドでコミットします。
- quickly package:debファイルを生成します。
- quickly release:Launchpadプロジェクトを作成し、データをプッシュします。
テンプレートごとに使えるコマンドリストは"quickly commands"で表示できます。より詳しいことや上記以外のコマンドについては、"quickly help コマンド"を参照してください。
アプリケーションの修正
実際にアプリケーションの処理を変更する手順を見ていきましょう。
ソースコードの編集
"quickly edit"コマンドを実行すると、編集対象となるファイルを指定されたエディターで開きます。QUICKLY_EDITOR/EDITOR/SELECTED_EDITORといった環境変数が設定されている場合はそれをエディターとして使います。いずれも設定されていない場合はgedit(Xが起動していない環境ならnano)を使用します。
開かれるのはアプリケーションディレクトリ以下にあるすべてのファイルではなく、アプリケーション開発者が頻繁に編集する可能性が高いものだけです。初期状態だと以下のようなファイルが開かれます。
__init__.py: アプリケーション起動後に最初に呼び出されるスクリプトです。オプション解析や設定値の初期化のコードをここに記述しています。
*AppliName*.py: メインウィンドウは「AppliNameWidow.py」、Aboutダイアログは「AboutAppliNameDialog.py」といったように、各種GUIツールのハンドラを記述するコードは「名前+アプリ名+ウィジェット名」といった命名規則で生成されます。
test_*.py: testsディレクトリにあるテストスクリプトです。
*.page: Mallard形式のヘルプファイルです。
例えば、アプリケーション起動時にログを残したい場合、__init__.pyに以下のような4行を追加します。
debugレベルのログは-vオプションをつけたときのみ表示されるため、アプリケーションに-vオプションを渡すには以下のようにrunコマンドを実行してください。
コミット
修正した内容が問題ない場合、それをバージョン管理システムにコミットします。Quicklyでは、以下のコマンドを実行するとアプリケーション作成時に一緒に生成したBazaarリポジトリにコミットできます。そのため、Bazaarコマンドと併用して作業を行うと良いでしょう。
ただし、saveコマンドは引数なしで"bzr add"を実行するため、余計なファイルがリポジトリに追加されてしまうことがあります。本格的にソースコードを編集するようになったら、saveコマンドではなく"bzr commit"を使った方が良いでしょう。
GUIでBazaarを使いたい場合はbzr-explorerパッケージや、geditならgedit-developer-pluginsパッケージに含まれるBazaar拡張を使うと便利です。なお、残念ながらQuicklyはBazaar以外のバージョン管理システムをサポートしていません。他のバージョン管理システムを使いたい場合は、Bazaarに依存しているコマンドであるsave/package/share/releaseあたりを使用しないよう注意してください。
GUIの変更
"quickly design"を実行するとGUI設計ツールであるGladeが起動します。GUIアプリケーション作成時は、GladeでUIの部品(ウィジェット)を配置し、適切な名前をつけ、ソースコード上で各ウィジェットに対する動作(ハンドラ)を設定するという手順になります。Quicklyでは一通りウィジェットとハンドラができあがった状態になっていますので、まずはこれを少しずつ改変しながら開発に慣れていくと良いでしょう。
例えばメニューの「Edit - 切り取り/コピー/貼り付け/削除」は使わないことにして、削除してみましょう。Gladeが起動したら"UwrSampleWindow.ui"タブを開いて、中に表示されるウィンドウの"Edit"を選択します。さらに"Edit"をクリックするとメニューが展開されるので、「切り取り」を選択してください。すると画面右のウィジェットツリーで"mnu_cut"が選択された状態になります(図4)。あとはこれを右クリックして削除するだけで完了です。
Gladeで保存した上で、"quickly run"を実行してください。Editメニューから「切り取り」がなくなっていることがわかると思います。同様に"mnu_copy"/"mnu_paste"/"mnu_delete"も削除します。あとついでにセパレーターである"separatormenuitem2"も削除します。これでEditメニューは「設定」だけになりました。
最後に忘れずに"quickly save"で保存します。
パッケージングとリリース
一通りソースコードの編集が終わったら、リリースを行います。Quicklyにおけるリリースとは、「Launchpadに作成済みの自分のプロジェクトサイトのPPAでパッケージを公開する」作業を指します。具体的には、"quickly release"コマンドを実行することで、以下のステップが自動で実行されます。
- 設定していない場合は、Launchpad上のプロジェクト名を入力する
- Launchpadからプロジェクトページの情報を取得する
- Launchpadから自分のアカウント情報を取得し、setup.pyのauthorとauthor_emailを更新する
- bzrのログからバージョン番号を決定し、リリースタグを設定した上でコミットする
- ソースコードをlp:~user_name/project_name/quickly_trunkにpushする
- ソースパッケージを作成し、プロジェクトPPAにアップロードする
- Launcpadのプロジェクトページを更新する
いずれも、LaunchpadとBazaarに強く依存した作業になっており、Launchpad上にあらかじめアカウントを作成し、PPAでパッケージを公開するためにGPG鍵を登録し、プロジェクトページを作っておく必要があります。これらの設定はすべてブラウザから行えます。詳しいことは、LaunchpadのHelpページを確認してください。
releaseコマンドの実行例として、今回の作業の結果を以下のページに公開しています。
プロジェクトページではマイルストーンが設定されていること、コードページではユーザーページのBazaarブランチが登録されていること、そしてユーザーのPPAページで該当パッケージがビルドされていることが確認できます。
もしLaunchpadの操作に不慣れな場合は、staging領域を使うと良いでしょう。これは、Launchpad全体をコピーしたテスト用のサイトで、定期的に本家と同じ状態になるようデータのリセットが行われています。つまり、ここで行った操作は本家には反映されませんので自由にテストすることができるのです。quiclyには"--staging"というオプションがあり、これをつけてreleaseコマンドを使うと"launchpad.net"ではなく"staging.launchpad.net"が使われます。
Launchpad自体を使わずにDebianパッケージだけを作りたいのであれば、"quickly package"コマンドを使うことでローカルにdebファイルが生成されます。ただしバージョン名や作者名はLaunchpadから取得できないため、自分でsetup.pyをあらかじめ更新しておく必要があります。
また、Quicklyで作成したアプリケーションはgettextによる国際化にも対応しています。release/packageコマンドを実行するとpoディレクトリとpotファイルが作成されます.それをja.poにリネームした上で翻訳しbzr addすると、次回release/packageの際に翻訳済みのリソース(moファイル)が生成・インストールされるようになります。
まとめ
簡単にですが、Quicklyの使い方について説明しました。GUIアプリケーションの開発における最初のハードルは「とりあえず動くもの」を用意することですが、Quicklyはそれを簡単に実現してくれますので、プロトタイプを作成するにはもってこいのツールです。
Quicklyで作ったアプリケーションは国際化に対応している上に、テストやデバッグのためのコマンドもあります。ただしPyGI/GTK+3に対応していない、テンプレートの数が少ないといった問題点も多く、Quicklyだけで開発のすべてをカバーできるという状況にはなっていません。現時点では、あくまでUbuntuでアプリケーションを作るときの基本的な作法を学べる、ぐらいに思っておくと良いでしょう。
Ubuntu App Developerサイトでは、Quicklyを使った具体的な手順を動画として公開していますのでこちらも参考にしてください。
動画:http://developer.ubuntu.com/get-started/
上記動画の台詞を文章にしたもの:http://developer.ubuntu.com/wp-content/themes/wordpress-theme-ubuntudeveloper/transcript-quickly-tutorial.txt
さらにUbuntuコミュニティでは半年に一度のペースで、UbuntuAppDeveloperWeekというアプリケーション開発者向けのチュートリアルイベントを開催しています。先月行われたイベントでもQuicklyを紹介していますので、今後は数多くのアプリケーションがQuicklyで開発されるかもしれません。