![Page 2: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/2.jpg)
![Page 3: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/3.jpg)
![Page 4: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/4.jpg)
about @junnama
✴ アルファサード株式会社 代表取締役 ✴ W3Cメンバー ✴ ご当地/懇親会スポンサーになりました! ✴ CMS「PowerCMS」(Perl製)の開発 ✴ MTのプラグインを⼀番たくさん書いている⼈ ✴ macOSネイティブアプリ開発
![Page 5: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/5.jpg)
23%
77%
![Page 6: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/6.jpg)
macOSネイティブアプリ
![Page 7: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/7.jpg)
![Page 8: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/8.jpg)
for Mac OS X
![Page 9: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/9.jpg)
![Page 10: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/10.jpg)
![Page 11: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/11.jpg)
![Page 12: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/12.jpg)
Xojo
![Page 13: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/13.jpg)
https://xojo.grapecity.com
![Page 14: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/14.jpg)
Xojo (ゾージョー)
✴ CrossBasic => REAL Basic => REAL Studio ✴ ⾔語はBasic! ✴ macOS/Windows/Linux/iOSアプリを作成 ✴ クロスプラットフォーム ✴ Single Desktop 16,000円∼ ✴ 開発は無料(ビルドしたアプリを配布する段階でラ
イセンスが必要)
![Page 15: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/15.jpg)
本⽇のお題
macOSネイティブアプリ
作成におけるPerlの活⽤
![Page 16: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/16.jpg)
macOS = Unix
![Page 17: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/17.jpg)
Dim Sh As New ShellSh.Execute( "ls" )MsgBox( Sh.ReadAll )
![Page 18: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/18.jpg)
http://junnama.alfasado.net/online/2013/12/mac_os_x.html
![Page 19: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/19.jpg)
screencapture
![Page 20: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/20.jpg)
screencapture foo.pngscreencapture -R 117,226,100,100screencapture -t pdf foo.pdf
screencapture
![Page 21: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/21.jpg)
![Page 22: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/22.jpg)
✴ 現在の座標の周辺のキャプチャを取得
✴ Canvas に表⺬
✴ 中央の⾊(Color)を取得
✴ ⾊名に変換して表⺬する
screencapture + Xojo
![Page 23: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/23.jpg)
say
![Page 24: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/24.jpg)
![Page 25: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/25.jpg)
say Hello World
say
![Page 26: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/26.jpg)
![Page 27: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/27.jpg)
mdfind
![Page 28: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/28.jpg)
mdfind -onlyin /Applications/ 'kMDItemContentTypeTree=="com.apple.application"
mdfind
※Spotlightのコマンドラインツール
![Page 29: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/29.jpg)
✴ リストボックスからドラッグされた時
✴ ⼀意の名前のファイルをテンポラリに
✴ ファイルを不可視にしてドラッグ
✴ タイマーを⾛らせる
✴ mdfindでドロップされた場所を得る
mdfind + Xojo
![Page 30: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/30.jpg)
![Page 31: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/31.jpg)
Dim d As Date = New DateDim hex As StringDim bytes As Stringbytes = MD5( Str( round( rnd * 3000 ) + 1 ) )Dim hex As String = EncodeHex( bytes )F = F.Child( "dragitem-" + hex +"-"F = F + Format( d.TotalSeconds, "#") + ".abcd" )FS = BinaryStream.Create( F, true )FS.closeF.visible = FalseDim di As DragItemDraggingItem = F.Name
mdfind
![Page 32: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/32.jpg)
di = New DragItem (self,System.MouseX,System.MouseY-Main.Top,64, 64)di.FolderItem = Fdi.DragWatchFile.Mode = Timer.ModeMultipleReturn False
mdfind
Dim Command As String = "mdfind -name " + DraggingItemDim Sh As New ShellSh.Execute( Command )Dim Res As String = Sh.ReadAllif Res <> "" Then F = GetFolderItem( Res ) ...
![Page 33: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/33.jpg)
さて、Perl
![Page 34: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/34.jpg)
macOS = Unix
![Page 35: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/35.jpg)
Perl, PHP, Ruby, Python...
![Page 36: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/36.jpg)
![Page 37: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/37.jpg)
my $StorageClient = Net::Azure::StorageClient->new( type => 'Blob', account_name => $you_account_name, primary_access_key => $your_primary_access_key, protocol => 'https', api_version => '2012-02-12' );my $res = $StorageClient->get( $url );print $res->content;
![Page 38: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/38.jpg)
use strict;use lib qw( lib );use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/;...
![Page 39: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/39.jpg)
GetOptions(\my %options, qw/ account=s accesskey=s path=s action=s acl=s file=s get_all=i thread=i metadata=s pass=s proc=s/);…
![Page 40: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/40.jpg)
cd path/to/app; perl app.pl --action=get --path https://foo.blob....
![Page 41: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/41.jpg)
Application = Folder
![Page 42: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/42.jpg)
![Page 43: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/43.jpg)
![Page 44: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/44.jpg)
![Page 45: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/45.jpg)
Dim AppName As String = CurrentBuildAppNameAppName = ReplaceAll( AppName, " ", "\ " ) Dim AppPath As StringAppPath = CurrentBuildLocation + "/" + AppName + ".app"Dim Command As Stringcommand = "cp /path/to/src.zip " + AppPath + "/Contents/MacOS/src.zip"Call DoShellCommand( Command )command = "cd " + AppPath + "/Contents/MacOS; unzip src.zip"Call DoShellCommand( Command )command = "cd " + AppPath + "/Contents/MacOS; rm src.zip"Call DoShellCommand( Command )
ビルドの際にPerlスクリプトをコピーする
![Page 46: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/46.jpg)
cd path/to/app;
![Page 47: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/47.jpg)
Dim App as new applicationDim MyApp As FolderItemMyApp = App.ExecutableFileDim Name As String = MyApp.Name + ".app"MyApp = GetFolderItem( MyApp.NativePath,3 ).ParentDim CMD As String = “cd ” + MyApp.ShellPath + “;”CMD = CMD + “perl src/app.pl --account ”CMD = CMD + EscapeShell ( Account )CMD = CMD + “ --token ” + EscapeShell( Token )CMS = CMD + “ --action put --path ” + EscapeShell( Path )CMS = CMD + “ --file ” + EscapeShell( File.ShellPath )
![Page 48: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/48.jpg)
cd path/to/MyApp/Contents/MacOS;perl ./app.pl --action=get --path https://foo.blob....
![Page 49: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/49.jpg)
DEMO
![Page 50: YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用](https://reader033.vdocuments.mx/reader033/viewer/2022042600/58ce7df31a28ab210a8b4ee3/html5/thumbnails/50.jpg)
ありがとうございました!
アルファサードではエンジニアを募集中です!