HTMLマークアップ言語を使うpug(旧jade)

jadeを使用するまでの流れ

この項目は現状を記録しておくための雑記ですので本題は次の項目から記述して行きます。

普段、Railsを使ったアプリケーションなどを作成する際に、HTMLではなくHAMLを使用して記述していました。

静的なサイトを作成する際に、ずっとHTMLで記述していました。 しかしこれまでずっとRailsHAMLを使用していたというのもあり、HTMLでの記述はあまりに面倒だと思い始めまして。。 HAMLを使用できないか?と調べていたのですが、HAMLやSlimは主にRailsでの使用が前提なため思っていたものとは違う情報しかでてきませんでした。(この時点ではHTMLのマークアップ言語はHAMLとSlimしか知りませんでした)

調べているとJadeがあるらしいと、npmを使用し導入、自動コンパイルまで済み、あとはscssも同時にコンパイルさせたいなあと調べる中でjadeは今はpugという名前に変わっている。。。!?

ということで、pugの導入コンパイルコマンドscssも同時にコンパイルする(複数コマンドを同時に実行させる)方法を忘備録として残しておきたいと思います。

pugとは?

f:id:sotoogre:20200425181507p:plain

公式サイト(?)的なものよりgithubの方がわかりやすいのでそちらのリンクを貼っておきます。

こちらよりアクセス(pug - Github)

以下githubのReadmeより引用。

Pug is a high performance template engine heavily influenced by Haml and implemented with JavaScript for node and browsers.

Readmeにあるように、pugはHAMLに影響を受けているJavaScript テンプレートエンジンです。

HAMLのように閉じタグなどを使用せずに記述できるため、従来のHTMLよりも高速でマークアップを勧められます。

作業のまとめ

したいこと

  • scssで記述
  • scssファイルをcssファイルに自動でコンパイル(変換)
  • pugで記述
  • pugファイルをhtmlファイルに自動コンパイル(変換)
  • 以上の作業をnpmのコマンド一つで同時に行う

※scssファイル、pugファイルは特定のディレクトリを指定せず、ルートディレクトリ以下の全てのファイルを対象とします

※作業はmac 10.14.6で行います。他のバージョンやWindowsubuntuでは流れが違う可能性がありますので他のサイトを参考にするようお願いいたします。

作業の流れ

  1. 事前準備
    1. Xcodeのインストール
    2. Homebrewのインストール
    3. nodebrewのインストール
    4. Node.jsのインストール
  2. node-sassのインストール
  3. pug、pug-cliのインストール
  4. concurrentlyのインストール
  5. pugとsassの自動コンパイルコマンドを設定

※Node.jsのインストールまでが完了している方は2以降の作業のみになります。

※事前準備の項目については簡単に勧めて行きます

事前準備

Xcodeのインストール

HomebrewのインストールにはXcodeが必要です。

以下のコマンドを実行し、Xcodeをインストールします。

$ xcode-select --install

HomeBrew🍺のインストール

Homebrew公式サイト

以下を実行

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

nodebrewのインストール

Homebrewを使用してインストールします。

$ brew install nodebrew

Node.jsのインストール

1.インストール可能なバージョンを確認

$ nodebrew ls-remote

2.インストール

$ nodebrew install-binary {version}

最新版をインストール:

$ nodebrew install-binary latest

安定版をインストール:

$ nodebrew install-binary stable

3.インストールしたnodeを有効化

インストールされたバージョンを確認。

$ nodebrew ls
# インストールされているバージョンを確認
v12.16.1
v12.16.2

current: none   # インストール直後はnoneになっている

$ nodebrew use v12.16.2
# 使用するバージョンを指定する

$ nodebrew ls
# インストールされているバージョンを確認
v12.16.1
v12.16.2

current: v12.16.2

4.環境パスを通す

bashの場合

$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile

5.ターミナル再起動、もしくはsourceコマンドでパスを読み込む

6.nodeが使用できるか確認

$ node -v
v12.16.2

npmのインストール

Package.jsonファイルを作成

プロジェクトのルートディレクトリで以下を実行し、package.jsonを作成。(すでにある場合はこの作業は不要です。)

npm init

node-sassのインストール

node-sass(GitHub)

npm install node-sass --save-dev

pugのインストール

npm install pug --save-dev
npm install pug-cli --save-dev

concurrentlyのインストール

concurrently(GitHub)

npm install concurrently --save-dev

pugとsassの自動コンパイルコマンドを設定

package.jsonのscriptに以下を追加。

"watch": "concurrently \"pug . --out . --watch --pretty\" \"node-sass */scss/ --output */css/ --output-style compressed --watch --source-map true\""

※上記の場合では、scssフォルダのあるディレクトリにあるcssフォルダにcssファイルを保存、htmlはpugと同じフォルダに保存されます。

ディレクトリを指定する場合

"watch": "concurrently \"node-sass ./build/scss --output ./public/css --watch --output-style compressed\" \"pug ./build/pug --out ./public/ --watch --pretty\""

タスクの複数実行について

npm run command & command2のように複数実行することも可能なのですが、そうすると先のタスクが終了するまで次のタスクが実行されないため並行して実行したい場合には不便です。

そこでconcurrentlyを使用します。

bashでは以下のようにします。

concurrently "script1" "script2"

package.jsonに記述する際はダブルクオーテーションをバックスラッシュ\エスケープします。

タスク名では呼び出せないようなのでスクリプトを直接記述して行きます。

"タスク名": "concurrently \"スクリプト1\" \"スクリプト2\""

コマンドを実行

以下を実行することで、scssやpugを編集すると随時cssやhtmlファイルに変換されます。css、htmlファイルがない場合は自動で作成され、すでにファイルがある場合は上書きされます。

npm run watch

以上です。

以下、補足でスクリプトを記述しておきます。

補足:コンパイルスクリプトなど

jsonファイルにタスクを記述して行きます。

Sassのコンパイル

"sass": "node-sass ./build/scss --output ./public/css --output-style compressed"

Pugのコンパイル

"pug": "pug ./build/pug --out ./public/ --pretty"

コンパイルの複数実行

"build": "npm run sass & npm run pug"

Sassの自動コンパイルWatch/監視)

"node-sass ./build/scss --output ./public/css --watch --output-style compressed\"

Pugの自動コンパイルWatch/監視)

"pug ./build/pug --out ./public/ --watch --pretty\"

以上です。

ディレクトリなどは適宜変更してください。

補足:ウェブ上でHTMLをPugに変換するサイト

html2jade

Pug導入時に使用しました。