🤖

commandファイルをDockに固定したい 〜コピペでMacOSアプリを作っちゃおう〜

に公開

概要 〜なにをするのか〜

.commandファイルはシェルスクリプトでいろいろ自動化ができるので便利なんだ
例えば以下の2つとか。

https://qiita.com/GeneLab_999/items/4edc7bf5a2fa159feb5f

https://github.com/hiroki-abe-58/sort_files

しかし、これはDockに固定できないぞ、、、
これは、commandファイルを実行するためのラッパーとして機能する
シンプルなアプリを作ってしまおうという試みだ。
日頃行っている自動化シェルをDockから呼び出せるようになって便利なのだよ

Windowsの方は以下
https://qiita.com/GeneLab_999/items/c24c0e4f968d9cf76a7c

1.MacOSアプリの基本構造を作成

mkdir -p ~/<YOUR APP NAME>.app/Contents/MacOS

2.アプリの実際の動作を定義する実行ファイルを作成

echo '#!/bin/bash
open -a iTerm.app /Users/<YOUR USER NAME>/<YOUR COMMAND NAME>.command' > ~/<YOUR APP NAME>.app/Contents/MacOS/<YOUR APP NAME>
  • #!/bin/bash: シェルスクリプトであることを示しています
  • open -a iTerm.app /Users/<YOUR USER NAME>/<YOUR COMMAND NAME>.command :命令本体。「iTerm2を開いて、指定された.commandファイルを実行する」という命令なのだよ

3.実行権限を付与

chmod +x ~/<YOUR APP NAME>.app/Contents/MacOS/<YOUR APP NAME>

4.plistファイルを作成する

plistファイルは「Property List(プロパティリスト)」の略称で、
macOSやiOSアプリケーションの設定情報やメタデータを保存するための特別なファイル形式なのだよ。
簡単に説明すると、plistファイルは「アプリの説明書」や「アプリの身分証明書」のようなものなのだよ。例えば:

  • アプリの名前
  • アプリの識別子
  • 実行する実際のプログラムの名前
  • アプリのバージョン
  • 対応しているOS
  • 使用する権限

などの情報が含まれているのだ。
macOSでは、すべての.appファイル(アプリケーション)はContentsフォルダの中にInfo.plistファイルを持っていて、このファイルがないとシステムはそれを正しいアプリとして認識できないのだ。

このファイルがないと、あなたが作成したRunkeeperApp.appはmacOSに「正式なアプリ」として認識されず、Dockに固定しても正しく動作しない可能性があります。

mkdir -p ~/<YOUR APP NAME>.app/Contents/Resources
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string><YOUR APP NAME></string>
    <key>CFBundleIdentifier</key>
    <string>com.yourname.<YOUR APP NAME></string>
    <key>CFBundleName</key>
    <string><YOUR APP NAME></string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
</dict>
</plist>' > ~/<YOUR APP NAME>.app/Contents/Info.plist

5.Dockにドラッグ&ドロップ

完成! アイコンも変えてあげるといいのだよ。

あとがき

WindowsとMacの両方でダブルクリックでシェル動かす方法ないの?

たぶんある。

PowerShell 7

Windows/macOS/Linux 共通で動いてくれるのでこんどやってみようと思う。

POSIX シェルで書く + shebang方法

以下みたいな感じで書けばWindows 側は WSL または Git Bash を使えばそのまま走るっぽい。今度やってみようと思う。

#!/usr/bin/env bash
echo "Hello $1"

Discussion