アルファサード株式会社 代表取締役 野田 純生のブログ


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


公開日 : 2013-12-04 21:06:07


先月目出たく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, )
カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ