Monthly Archives: 1月 2014

Macでシェルスクリプトをapp化する

Macのアプリケーションは.appという拡張子のついたフォルダに、決められた構成で必要なファイルを配置する事で、OSからアプリケーションとして実行されます。例えば、最小構成であれば、このようなディレクトリ構造になってます。

・hoge.shをhoge.appにバンドルする場合

こういう構成にして、各設定ファイルが適切に設定されていた場合、hoge.app/Contents/MacOS/hoge.shは、hoge.appがダブルクリックされた際に実行されるようになります。

そして、この時に重要なのが、「Info.plist」です。ハマったので最初に書いておきますが、このファイルの先頭は大文字です。うまく行かないなぁと思ってたら、Info.plistがinfo.plistになっていました。笑えない。さて、肝心な中身ですが、hoge.appに、hoge.shをバンドルし、アイコンをicon.icnsにしたい場合次のように記述します。

CFBundleNameとCFBundleDisplayNameは正直適当で大丈夫です。実行するシェルスクリプトとアイコンを正しく指定してあげてください。また、うまく行かない場合は、.shが単体でダブルクリックしてうまく動くか、シェルスクリプトに実行権限がついているか、Info.plistの頭が小文字になっていないか、フォルダ構成が間違っていないかを再度チェックしてください。また、変更が反映されない場合、一度見えないところに.appを退避させて、改めて表示させると情報がリフレッシュされる事もあるので、変なマークが着いてたりする場合は色々移動させて戻してとかやってみましょう。

はい、ここまでで一応おしまいなのですが、ここから余談。何故こんな事をしたいと思ったかというと、Java 1.7から、Macに標準で付属しているjarバンドラーを用いてapp化が出来なくなってしまったからである。ひょんなことから、Java 1.7を使って書いたコードをapp化しなくてはならなかったのですが、今までの方法ではどうしても出来なかったので、シェルスクリプトで実行可能jarファイルを叩く事によって、javaの起動をするようにして、app化しました。なので、実際は環境によってはappが正常に動作しないと思うので、配布等をするときは自己責任で御願いします。

そこで、javaをコマンドラインから実行する時に、スプラッシュ画面を設定したり、command + tab押したときのアイコンを変えたりしたい。ということで、実際に使ったJavaを起動するシェルスクリプトをここに書いておきます。

シェルスクリプトと同じディレクトリに、hogeというフォルダがあり、その中にhoge.jarが入っていて、スプラッシュ画像が../../Resources/splash.jpgの時のコード。

これでアプリケーションっぽい.appを作る事が出来ますね。

サーバ管理で知っておくべきコマンド〜その1

僕は実はすごく微妙な世代の人間で、すごくカリカリUNIXやらLinuxを触っていた人間ではない。なので、実際にサーバを管理したりする時にもちろんターミナルから色々操作する訳だが、その使い方にはそんなに精通していない。なので、ここで忘れない為に、色々調べた物を書いておきます。知っている物も含めて。

・vmstat
vmstatは、”性能解析や障害解析を行う際に最も基本的なコマンド”らしい。知らなかった。用法はこんな感じ。

見方はman見れば書いてあります。主なものだけ書きます。

memory
- avm アクティブな仮想ページ
- fre フリーなメモリ
cpu
- us ユーザもしくは低優先度のプロセスに使用されている時間
- sy システムに使用されている時間
- id CPU待機時間

・dmesg
dmesgは、”kernelがロードした物理的なデバイスの状況を表示する”コマンド。ハードウェア的な疑いを持つ場合はこれを見ると良い。ディスクの読み込みに失敗してないかとか。lessかけると見やすい。モノによってはログが残っているけど、残っていない場合は直接これで見る。

・top
topは、”現在のシステム状況をリアルタイムに表示する”コマンド。プロセスのCPU使用率等をリアルタイムに見る時に便利。

・ps
psは、”プロセスの状態を見る”コマンド。ハイフン無しオプションで情報の粒度を決定できる。

・tcpdump
tcpdumpは”ネットワーク上に流れるパケットをモニタリングする”コマンド。さくっと見る場合、こんな感じに見れる。

インターフェースはifconfigから確認してください。