意外と便利でしょ？ジョブ管理？ヒネモス


弊社でジョブ管理を主目的として利用しているHinemosのバージョンアップ(4.1→6.1)するにあたり調査と検証を受け持ちました。
「Hinemosって何？」「ジョブ管理って何？」のレベルから数か月で、自分で作成した処理をのせて自動実行する設定を行うところまでできるようになったので、Hinemosは初心者でもわりと入っていきやすいツールですし、様々な機能がありとても便利です。
今回はHinemosのジョブ管理機能で便利な機能などを厳選していくつか紹介していきます。

#ジョブ管理に関する機能たち
##ジョブ・ジョブネット・ジョブユニット
Hinemosのジョブ管理において基本となる概念です。
ジョブをまとめるジョブネットが便利です。cronと違い、複数のジョブをまとめて実行や通知ができます。
![ジョブ解説.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/1d430b4f-73a8-fa46-5cb0-3f9ed206e162.jpeg)
###・ジョブ
何らかの処理を登録できる最小単位。実行したいコマンド、シェルスクリプトなどを登録できる。
画像で示したものは通常のものですが、他にも様々な機能をもったジョブが存在します。(一部を後述します)
###・ジョブネット
文字通り、複数のジョブをネット(網)でまとめたもの。一連のジョブのまとまりごとに作って構築するイメージ。
###・ジョブユニット
ジョブネットをさらにまとめたもの。Hinemosで登録できる最上位層。プロジェクト名などを付けるのが一般的。

## 待ち条件(≒条件分岐)
条件分岐もcronではできないことです。
待ち条件とは、ジョブの条件分岐を設定するもの。
ただ、ここで注意すべきなのは**"待ち"**条件という表現。
通常イメージされる条件分岐と比較してみます。
###通常イメージされる条件分岐
多くのプログラミング言語で条件分岐を書く場合、`if`や`switch`などで書きますが、
プロセスのイメージは以下のようなイメージになると思います。
1. (構文内に記述された)条件式を評価する
2. 結果に応じて、分岐する

つまり、**条件式で分岐して振り分けて処理を実行するイメージ**

![トリミング1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/af0448da-283b-a6d2-c078-efeed43035e0.jpeg)


###Hinemosの待ち条件
基本的に**待ち**なので各ジョブやジョブネットで待ち条件を設定して、その前のジョブの終了を待ってから実行することになります。

`if`や`switch`とは逆のイメージで、
分岐というよりは、**条件クリアしたものを待って処理を実行するイメージ**
![トリミング2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/cdea518f-38a3-1ab8-123d-77adf2ea2ab4.jpeg)


## 承認ジョブ
承認ジョブはHinemos6.0からの機能です。
下の図のように通常のジョブの間に承認ジョブを入れると、承認が得られるまで後続ジョブが実行されないというものです。人の判断が必要な作業を挟む場合などに便利だと思います。
特に、全てを自動化することができない状況においてはかなり便利な機能といえます。
承認ジョブまで到達し、承認待ちになったタイミングでメール通知できる機能もあります。
![承認ジョブ説明.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322392/4f9eaac4-06d7-05d0-a95c-122fba69960c.jpeg)
#Hinemosがcronと比較して優位な点
Hinemosの公式HPで、cronに触れながらHinemosの特長が書かれています。
[ジョブ特集 | Hinemos](https://www.hinemos.info/technology/special_content/job "Qiita")

この中から、特にcronとの大きな違いだと感じる点などをまとめます。

|  | Hinemos | cron |
|-----------|------------|:------------|
| サーバーのジョブ一元管理 | 実行結果の確認する際にクライアントから一元的に確認することが可能 | サーバーに接続する必要があるため複数サーバーのジョブを一度に確認できない|
| 複数ジョブの順次実行 | 待ち条件の設定で可能 | 日時指定での実行は可能だが、順次実行はできない。|
|サーバーを跨ぎのジョブ実行| 異なるサーバーで動く複数のジョブをジョブネットなどでまとめれば可能 | サーバーごとでの設定になるため、不可能 |

サーバーのジョブ一元管理に関しては、ジョブネットでまとめられて整理ができる点がかなり大きいです。
これにより、複数ジョブの順次実行・サーバーを跨ぎのジョブ実行が可能になると言えます。


#Hinemosとcronの使い分け
と、ここまでステマのようにHinemosを推しに推していますが(ステマではありません)、cronが使えないわけではありません。
Hinemosとcronは用途ごとに使い分けができる思います。
Hinemosの使用感からいうと、以下のようなイメージでしょうか。

##Hinemos
**複数処理の連なり・まとまりで一つの大きな作業となるもの**は、Hinemosのほうが向いている印象です。
前述したジョブネットなどを利用すればグルーピングできるので、全体管理しやすいです。
GUIでの操作なので、慣れていない人でも管理は簡単かもしれません。
##cron
**頻度が高く単発の処理**に向いています。
もっと言うと、サーバー内の管理・監視の意味合いの処理で利用することが多いです。
具体的に言うと、
サーバーのシャットダウン、データバックアップ、ディスク使用量の確認、ソフトウェア更新など

コマンドラインでの操作に慣れているのであれば、使いやすいかもしれません。
メール通知の設定などはコマンドでの設定なので、Hinemosに比べて簡単だと思います。
##どう使う？
cronよりもHinemosのほうが、引き出しは多いと言えます。Hinemosはあげたらキリがないほど機能が盛り沢山です。

ただ、Hinemosでできることであっても、cronのほうが楽に設定できたり便利に利用できたりする場面はあるので上手に使い分けられるのがベストプラクティスかと思います。
#最後に
今回はかなり限定的に機能を紹介しましたが、Hinemosにはまだまだたくさん機能があります。
cronで実現が厳しそうなことがでてきたときはHinemosの導入を検討していかがでしょうか。

#参考リンク
[Hinemosへようこそ | Hinemos](https://www.hinemos.info/)

インストールに必要な資材等やマニュアルはリリースノート(下記リンク)にあります。
https://github.com/hinemos/hinemos

バージョンが古いときの記事ですが、インストールが詳しく説明されている記事です。
[Hinemos ver5.0のインストールからエージェントインストールまで](https://qiita.com/0ta2/items/8f9fb87938cc3083db89)