Perlで書いたスクリプトにXojoでGUIを被せる。

| コメント(0) | トラックバック(0)

先月目出たくCPANデビューを果たしたり色々あったのですが、ご無沙汰でブログ書けてませんでした...

メモも兼ねて。久しぶり、そう、もう10年近く振りになるのか、デスクトップアプリを作ってみたくなったので、Xojoを落として使ってみました。以前はREALBasic(それより前はCross Basic)、その後REAL Studioと改名され、現在はXojo(ソージョーと呼ぶらしい)。

その? CPANに上げたPerlモジュールを社員に使わせたいんだけど、黒い画面が苦手な女の子(すでに子、じゃないけど)だったら? やっぱりGUIのアプリが欲しくなるよね。作れるかな? というのがきっかけでした。Xojo にはShellというクラスがあって、Mac/Windows/Linuxともにシェルコマンドが叩けるというので、Perlでスクリプトを書いてそれを叩けば(結果をうけとれれば)作れるんじゃね? と思って書いたらちゃんと動きました。MacOSのアプリケーションの実体は「フォルダ」なので、アプリケーションパッケージ内にPerlモジュールをコピーしてしまえば配布する時はそのままでいいので。

アプリのスクリーンショット

作成したのはWindows Azure のBlobストレージのクライアントアプリ。ファイルやフォルダをドラッグ&ドロップでアップロード、ダウンロードできたり。Azure BlobのAPIはXMLを返すのだけど、XojoではXMLの処理ができるのでAPIからの値の受け渡しのみPerlでやればあとはXojo側で実装できます。1日程あれば基本的な動作確認ができることろまで作れる(その後が色々大変なのではあるけれども)。


  CONST DEBUG_PATH = "/Users/alfasado/Desktop/MyApp"
  Dim App as new Application
  Dim SelfPath As FolderItem
  Dim Debug As Boolean
  SelfPath = App.ExecutableFile // 実行している自身のパスを得る
  if CountFields( SelfPath.Name, "." ) = 2 And NthField( SelfPath.Name, ".", 2 ) = "debug" Then
    Debug =True // デバッグ時にはモジュールのパスを指定
  End If
  Dim Path As String
  if Debug = True Then
    Path = DEBUG_PATH
  Else
    Dim Name As String = SelfPath.Name + ".app"
    SelfPath = GetFolderItem( SelfPath.NativePath ).parent
    SelfPath = SelfPath.Child( Name )
    SelfPath = GetFolderItem( SelfPath.NativePath )
    Path = SelfPath.ShellPath // スペース等をバックスラッシュでエスケープしたパスが返る
    MsgBox( Path )
    // /Users/alfasado/Desktop/MyApp/\:Users\:alfasado\:Desktop\:MyApp\:My\ Application.app
    Path = NthField( Path, "\:", 1 ) + Name + "/Contents/MacOS"
  End If
  Dim Cmd As String = "cd " + Path + "; perl src/app.pl"
  Dim Sh As New Shell
  Sh.Execute( Cmd )
  MsgBox( Sh.Result )
  // app.plで printした結果が取得できる

あとは、ビルドしたあとで、パッケージにモジュールをコピーすればOK。

cd /Users/alfasado/Desktop/MyApp/Builds\ -\ AZBlobClient0.5.carbon.Xojo_binary_project/Mac\ OS\ X\ \(Intel\)/AZBlobClient.app/Contents/MacOS/
cp /Users/alfasado/Desktop/MyApp/lib.zip lib.zip
cp /Users/alfasado/Desktop/MyApp/src.zip src.zip
unzip lib.zip
unzip src.zip
rm lib.zip
rm src.zip

MacOSにはPerlとか標準で入っているから、普段軽量プログラミング言語を使っていてデスクトップツールを作りたい人なんかにXojoいいかも。REAL Studio一時不安定なイメージを持っていたけど、1週間程使い込んだ印象では安定して動きます。ライセンス購入したら(デスクトップライセンスを購入したよ)日本語のサポートも受けられますよ。

追記。こんな感じのパスになるのは、


    // /Users/alfasado/Desktop/MyApp/\:Users\:alfasado\:Desktop\:MyApp\:My\ Application.app

GetFolderItemの引数がまずかったせいらしい。FolderItem.PathTypeAbsolute(0), FolderItem.PathTypeShell(1), FolderItem.PathTypeURL(2), FolderItem.PathTypeNative(3) という定数があって、2つめの引数に指定するときれいに取れる。この場合は、3(FolderItem.PathTypeNative)を指定。


GetFolderItem( SelfPath.NativePath, 3, )

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/711

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2013年12月 4日 21:06に書いたブログ記事です。

ひとつ前のブログ記事は「MTのダイナミックパブリッシングでは $this は $ctx(class MTViewer)である。」です。

次のブログ記事は「(Xojo)ListBoxからFinderにドロップしたDragItem.FolderItemのパスを得る」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6