App化してみるShellScriptMacAppleScriptはじめになんやかんや作業の自動化にシェルスクリプトをよく使うのですが、いちいちターミナルを開いて.shファイルをドラック&ドロップしてっていうのすらめんどくさくなったので、ダブルクリックで実行できる.appファイル化してみました。仮想環境を複数立ち上げるのとかがめんどくさくて行き着いたとかそーゆーレベル感の話になりますので必要最低限のことしか書きません。macOSにはAutomator.appとう自動化ツールつくれーるがあるんですけど今回は使いません。(イマイチ使い方がわかっていない)Automatorを使った方法は下記の記事などを参考にしてください。10.13.6あまり関係ないと思いますが。.Appファイルのお作法的なやつなんでも良いのでまずは.appファイルの中身をみてみます。macOSだとチェス.appというのがデフォルトで入っているかと思うので、とりあえずそれを開いてみます。するとこんな感じで中身を確認することができます。〇〇.appContentsInfo.plistMacOSResourcesから構成されています。Info.plist:アプリケーションに関する設定などを記述するファイル。MacOS:ここに実行するシェルスクリプトファイルを突っ込みます。Resources:ここにアプリのアイコン(.icns)や使用する画像などを突っ込みます。準備ここからもろもろを準備していきます。World!"を表示させるアプリケーションを作っていきます。フォルダを作成し、Hello.appなどお好きなアプリ名にリネームします。今回はデスクトップに作成した前提で進めます。中身を開き、"Contents"という名前のフォルダを同様に作成します。同様に"Contents"の中身に"MacOS"と"Resources"というフォルダを作成します。器はこんな感じになります。ターミナルで下記を実行してもOKです。~/Desktop/Hello.app/Contents/Resources先にHello.appという名前にしてますが、適当な名前のフォルダの状態で進めて一番最後にHello.appにリネームしてもOKです。実行させたい.shファイルを~/Desktop/Hello.app/Contents/MacOS/に用意します。下記シェルスクリプトをテキストエディットなどにコピペし、~/Desktop/Hello.app/Contents/MacOS/の中にHello.shという名前で保存してください。Hello.appの中に直接保存できない場合は、デスクトップなどに一度保存してから指定の場所に移動してください。~/Desktop/Hello.app/Contents/MacOS/Hello.shをターミナルで叩いてスクリプトの実行権限を付与しておきます。Info.plistの準備Info.plistを作成していきます。下記テキストをテキストエディットなどにコピペし、~/Desktop/Hello.app/Contents/の中に必ずInfo.plistという名前で保存してください。Hello.appの中に直接保存できない場合は、デスクトップなどに一度保存してから指定の場所に移動してください。いろいろな情報を書き込むことができますが、今回は実行するシェルの情報のみをCFBundleExecutableというキーに対応させて書き込みます。<string>Hello.sh</string></dict></plist>ここまでの中身はこんな感じここまでの設定が終了した段階で、Hello.appをダブルクリックすると動作するようになっているかと思います。(おまけ)アイコンを設定する上記までの設定で、シェルスクリプトの実行自体はできるようになりましたが、アイコンがデフォルトのままなので変更する場合の設定を記載しておきます。.icnsファイルの作成アイコンとなる.icnsファイルを作成していきます。DeveloperサイトのIconに関するところAppIcon.iconsetという名前のフォルダを作成します。適当に512×512サイズか512×512@2xサイズのPNGファイルを用意します。プレビュー.appで開きます。各サイズのファイルに調整し、AppIcon.iconsetに下記ファイル名で書き出します。解像度を144に設定して書き出してください。icon_512x512@2x.pngicon_512x512.pngicon_256x256@2x.pngicon_256x256.pngicon_128x128@2x.pngicon_128x128.pngicon_32x32@2x.pngicon_32x32.pngicon_16x16@2x.pngicon_16x16.pngちなみに全てのサイズを揃えなくてもicnsは作れるのでよしなにやってください。私は@2xの作成をサボりました・・・5.ターミナルで下記コマンドを実行してiconsetをicnsファイルに変換します。以上でicnsファイルの準備は終了です。さんのコメントにとても良きシェルスクリプトを見つけたので貼っておきます。sipsコマンドを利用してリサイズ&リネームしてくれる感じです。cdでpngのあるディレクトリに移動してから実行してください。実行するとpngのファイル名を聞かれるので、拡張子なしのファイル名を入力してEnter。"${filename}.iconset"Info.plistにアイコン設定情報を追記Info.plistの準備で作成したInfo.plistに追加する形で記述を増やします。CFBundleIconFileというキーに対して設定するicnsファイルの名前を設定します。(AppIcon.icnsまで設定してもOKです。<string>AppIcon</string></dict></plist>ここまで設定して保存をするとアプリケーションのアイコンが変わるはず・・・なのですが、キャッシュやらなんやらが関係してすぐに反映されないことがあります。いうか多分ダメ・・・いくつか方法はありますが、一番簡単なのは.app本体を適当なところにコピペするとコピーした方は意図したアイコンに変更されていると思います。おわりになんとなくカッコ良さそうだからという理由だけでApp化しましたが、シェルの中身を変えるだけでいろいろなものに使えると思うので気が向いたら試してみてください!おわり。最近PythonとAWS関連の勉強をはじめました。お手柔らかにお願いします。upLoginユーザーは見つかりませんでした。