【テンプレートからファイル生成】hygenの使い方

hygenはnode.jsで作られたコードジェネレーターです。Reactプロジェクトにてファイル生成の効率化を目的に紹介されているケースが多いですが、テンプレートからファイル生成する用途で幅広く活用できるツールかと思います。ここでは、hygenの基本的な利用方法を紹介します。

インストール

Macにインストールします。
( 参考: http://www.hygen.io/docs/standalone )

brew tap jondot/tap
brew install hygen

動作確認

フォルダを作成して移動します。

$ mkdir my-project
$ cd my-project/

以下フォルダ構成でファイルを作成して動作確認します。

$ tree
.
└── _templates
    └── my-generator1
        ├── help
        │   └── index.ejs.t
        ├── my-action1
        │   └── my-template1.txt.ejs.t
        └── my-action2
            ├── index.js
            ├── my-template1.txt.ejs.t
            └── my-template2.txt.ejs.t

5 directories, 5 files

上記フォルダ構成の場合、下記3つのコマンドが利用できるようになります。

hygen my-generator1 help
hygen my-generator1 my-action1
hygen my-generator1 my-action2

_templatesフォルダ配下第1階層のフォルダ名(今回はmy-generator1)第2階層のフォルダ名(今回はhelp, my-action1, my-action2)がコマンドで指定する名前になります。

「フォルダ名の変更」「フォルダの追加」をすることで、コマンドをカスタマイズできます。

help表示

_templates/my-generator1/help/index.ejs.t にてコマンドのドキュメントを記載しています。
( 参考: http://www.hygen.io/docs/generators/#documenting-your-generators )

---
message: |
  hygen my-generator1 my-action1 --var1 [VAR1] --var2 [VAR2] --var3 [VAR3]
  hygen my-generator1 my-action2
---

hygen my-generator1 help を実行します。

$ hygen my-generator1 help

Loaded templates: _templates
[object Function] help:
hygen my-generator1 my-action1 --var1 [VAR1] --var2 [VAR2] --var3 [VAR3]
hygen my-generator1 my-action2

コマンド引数から変数の値を設定

_templates/my-generator1/my-action1/my-template1.txt.ejs.t の内容は以下のようにしています。

---
to: src/1/<%= var1 %>.txt
---

var1=<%= var1 %>
var2=<%= var2 %>
var3=<%= var3 %>

Frontmatterで生成するファイル名などのメタ情報を設定します。
( 参考: http://www.hygen.io/docs/templates/#frontmatter )

テンプレートに埋め込む変数は <%= your_variable %> の形式で指定します。
( 参考: http://www.hygen.io/docs/templates/#local-variables )

以下のようにコマンドを実行します。

$ hygen my-generator1 my-action1 --var1 aaa --var2 bbb --var3 ccc

Loaded templates: _templates
       added: src/1/aaa.txt

src/1/aaa.txt が生成されました。

コマンド引数で指定した値が以下のように展開されています。

801-tool-hygen_01.png

対話形式で変数の値を設定

次に、対話形式で変数の値を設定する方法を確認します。

hygen my-generator1 my-action2 を実行したとき、対話形式で変数の値を設定できるようにしています。

_templates/my-generator1/my-action2フォルダ 配下のファイルは以下のように記述しています。

---
to: src/2/<%= name %>_1.txt
---

category  = <%= category %>
name      = <%= name %>
create2   = <%= create2 %>
year      = <%= year %>
month     = <%= month %>
date      = <%= date %>

_templates/my-generator1/my-action2/my-template2.txt.ejs.t では、ファイル生成するかどうかを変数の値によって制御しています。
( 参考: http://www.hygen.io/docs/templates#conditional-rendering )

---
to: "<%= create2 ? `src/2/${name}_2.txt` : null %>"
---

category  = <%= category %>
name      = <%= name %>
create2   = <%= create2 %>
year      = <%= year %>
month     = <%= month %>
date      = <%= date %>

対話形式の設定は、_templates/my-generator1/my-action2/index.js で行っています。
( 参考: http://www.hygen.io/docs/generators#advanced-interactive-prompt )

module.exports = {
  prompt: ({ prompter }) => {
    const args = [
      {
        type: 'select',
        name: 'category',
        message: 'category',
        choices: [
          'aaa',
          'bbb',
          'ccc'
        ]
      },
      {
        type: 'input',
        name: 'name',
        message: 'name',
        initial: 'abcdefg'
      },
      {
        type: 'confirm',
        name: 'create2',
        message: 'create2'
      }
    ]

    return prompter
      .prompt(args)
      .then(({ category, name, create2 }) => {
          const now = new Date()
          const year = now.getFullYear()
          const month = now.getMonth() + 1
          const date = now.getDate()

          return { category, name, create2, year, month, date }
        }
      )
  }
}

以下のように対話形式でファイル生成することができます。

801-tool-hygen_10.gif

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。