• Login
    • ログインしていません

  • Tool Set
    • 1ページ戻る

    • 1ページ進める

    • お気に入りに登録

    • しおりを挟む

  • Save
    • ページの復元をする

      サイトにアクセスした際に、前回閲覧していたページへ自動的に遷移するようにセットします。

  • Toppage Button
    • ボタンを非表示にする

  • Scroll Direction
    • ボタンによる
      スクロール方向を逆転

Programing

Prismのインストールと使い方

Prismをnpmパッケージでインストールし、初期設定方法と使い方を解説していきたいと思います。

Prismとは

まず初めに Prism(Prism.js)についての紹介をしたいと思います。
Prism.jsとはWebサイトでソースコードを表示する際に、
ソースコードに色付けをするシンタックスハイライトを行うためのライブラリになります。

本サイトのソースコードのシンタックスハイライトは、
Prism.jsを使用して下記のようにソースコードを表示しています。
※ シンタックスハイライトの上部に記述言語名、コピー機能、フォントサイズアップ・ダウン機能が表示されているものがありますが、Prism.jsの機能ではなく新たに実装したものになります。

//- JSのソースコードをシンタックスハイライトで表示
const txt = (() => {
  return 'このソースコードは即時関数で本テキストを返す処理を行っています。'
})();

Prism.jsを使うにあたって

今回はNPMパッケージをインストールし、
Prism.jsのソースコードを自サイトのJSファイルにバンドル(統合)して、
htmlの記述をシンタックスハイライトに変換する方法を紹介します。

Prism.js 公式サイトでは
・CDN(Content Delivery Network)を使用する
・サイト内で必要な機能のJSファイルをジェネレータを使い作成し使用する
・NPMパッケージは使うが、ソースコードをjsファイル内に記述する
3通りの方法でPrism.jsのインストール→使用方法を説明しています。
使い方は人それぞれなので、自分に合った方法で使用すればいいと思います。

Prism.jsをインストールする

NPMパッケージのPrism.jsをバンドルし、html記述をシンタックスハイライトにするには、
構築環境としてwebpack, Babelが必須になります。

コマンドをターミナルで実行し、必要なNPMパッケージをインストールします。
実行するコマンドはこちらです。

npm install prismjs babel-plugin-prismjs

prismjsが本体のコードになり、
babel-plugin-prismjsがプラグインを読み込むためのものになります。公式サイトのプラグインリストはこちら

Prism.jsを読み込む

Prism.jsを実際に使うために行うことが大きく分けて4STEPあります。

Step1 シンタックスハイライトで使用したい言語、プラグインを選び Babel で設定する
Step2 HTMLを記述する
Step3 使用するプラグインに合わせてCSSファイルを読み込む
Step4 JSファイル内でPrism.jsを設定する

実際にどうするのかを見ていきたいと思います。

Step1 シンタックスハイライトで使用したい言語、プラグインを選びBabelで設定する

Prism.jsはデフォルトでもいくつかの言語は表示することができます。
下記以外の言語を表示させたい際には Babel での登録が必要となります。
markup: markuphtmlxmlsvgmathmlssmlatomrss
CSS: css
C-like: click
Javascript: javascriptjs
サポートしている全言語については 公式サイトの Supported languageを確認してください。

続いてプラグインですが、
公式サイトに掲載されている Plugins の名前をそのまま登録することはできず、
インストールされた prism ディレクトリ内(node_modules/prism/plugins)にあるディレクトリ名を使用して登録する必要があります。

Babel に設定するために、本サイトでは babel.config.js を使用しています。
記述方法は下記を参考にしているので、本サイトの設定はそのままに近い内容になっています。
babel-plugin-prismjsで紹介されているプラグインに関する記述内容は下記のようになります。NPMパッケージについてはこちら

{
  "plugins": [
    [
      "prismjs",
      {
        "languages": ["javascript", "css", "markup"],
        "plugins": ["line-numbers"],
        "theme": "twilight",
        "css": true
      }
    ]
  ]
}

"css": trueを設定した場合、
"theme": "テーマ名"を必ず設定しないといけません。
そして、CSSをJSファイル内にバンドル(統合)することになるため、
webpack へcss-loderを読み込ませる必要が出てきます。

本サイトではテーマに関するCSSはJSファイルにバンドルさせるのではなく、
SCSSファイルに import して、cssファイルの一部としてサイトに読み込ませています。

というのも、
プラグインに関するCSSは Babel の記述内でバンドル(統合)設定ができなく、
別にJS内で読み込ませる形になり、設定箇所が散見する形になるため、
テーマに関するCSS、プラグインに関するCSSはまとめてSCSSファイルへ import する形を取りました。

本サイトの Babel 設定内容

{
  "plugins": [
    [
      "prismjs",
      {
        "languages": ["javascript", "css", "markup", "scss", "pug", "php"],
        "plugins": ["line-numbers", "command-line"],
      }
    ]
  ]
}

Step2 HTMLを記述する

Prism.jsの基本的なhtml構成を下記のように公式サイトの Basic usageで説明しています。

 
   
    // 表示したいソースコードの記述 
  

プラグイン(line-numbers)を設定したい場合
※ line-numbers に限らずプラグインの機能を付与するクラス名の指定箇所は、基本的にはpre要素もしくはcode要素につけることになっているようです。

// 下記のうちのどれか
//  ・body要素にクラス名をつける(全てのシンタックスハイライトに行番号が付与されてしまう)
//  ・pre要素の親もしくは祖先要素にクラス名をつける(クラス名が付与されている要素の中の全てのシンタックスハイライトに行番号が付与されてしまう)
//  ・pre要素にクラス名をつける(このpre要素にしか行番号は付与されない)
//  ・code要素にクラス名をつける(jsが実装された時にクラス名がpre要素に移動され行番号が付与される)

<body class="line-numbers">
  ...
  
...
 
       
        // 表示したいソースコードの記述 
      
    
... </body>

Step3 使用するプラグインに合わせてCSSファイルを読み込む

Step1 で話した通りテーマ用のCSS、プラグイン用のCSSは一つのSCSSファイル内に読み込ませて、
読み込みを取りまとめたSCSSファイルを本体のSCSSファイルに読み込ませています。

// CSSファイルを取りまとめるSCSSファイル
// ファイル名: _prism.scss
@import "~prismjs/themes/prism-tomorrow.min.css";
@import "~prismjs/plugins/line-numbers/prism-line-numbers.min.css";
@import "~prismjs/plugins/command-line/prism-command-line.min.css";

// サイトの共通SCSSファイル
// ファイル名: common.scss
@import "./prism"

~prismjsという記述は、node_modules/prismjsと同等の意味になります。

テーマファイルの種類は全部で 8種類
本サイトでは TomorrowNight を採用しています。

  • Default:prism[.min].css
  • Dark:prism-dark[.min].css
  • Funky:prism-funky[.min].css
  • Okaidia:prism-okaidia[.min].css
  • Twilight:prism-twilight[.min].css
  • Coy:prism-coy[.min].css
  • SolarizedLight:prism-solarizedlight[.min].css
  • TomorrowNight:prism-tomorrow[.min].css

プラグインの種類は全部で 26種類
本サイトで使用されているプラグインはline-numberscommand-lineです。
各プラグインに対応したディレクトリがあるので、その中のCSSファイルを読み込むことでスタイルを聞かせることができます。
/node_modules/prismjs/plugins/プラグイン名/prism-pluginName[.min].css

Step4 JSファイル内でPrism.jsを設定する

公式サイトの Usage with Webpack, Browserify, & Other Bundlersでも記載されている通り
Prism.jsをimportするだけで実行&シンタックスハイライト化が完了します。
実行タイミングはDOMContentLoadedのタイミングで実行されますが、
実行タイミングをコントロールしたい場合は、manual フラグを設定することで任意のタイミングで実行ができるようになります。

// Prism.jsの読み込み
import Prism from 'prismjs';

// シンタックスハイライトbuildの自動実行をキャンセル
Prism.manual = true;

// 手動でのシンタックスハイライト化実行
Prism.highlightAll();

Prism.jsを使ってシンタックスハイライトを効かせてみる

実際にどのように記述するかを記載していきます。
Prism.jsのデフォルト機能(プラグインを含む)の内容で実装する内容は、
 ・行番号を表示する
の1件です。
Babel の設定も必要なので、本サイトで使用しているPrism.jsに関する箇所の設定内容も記載します。
※ 記述言語表示、ファイル名表示の実装、copy,fontSizeUp,fontSizeDown機能追加についてはPrism.jsのデフォルト機能ではないので記述していません。

const plugins = [
  [
    "prismjs",
    {
      "languages": ["javascript", "css", "html", "markup", "scss", "pug", "php"],
      "plugins": ["line-numbers", "command-line"],
    }
  ]
];

module.exports = {
  presets, // ブラウザターゲットの設定記述を入れた変数
  plugins,
};
pre.c-code
  code(class='language-js line-numbers').
    // 表示したいソースコードの記述 
import Prism from 'prismjs';

(() => {
  Prism.manual = true;
  Prism.highlightAll();
})();

これでシンタックスハイライトが当たったPrism.jsの実装が完了しました。
細かいカスタマイズ方法についてはPrism.js 公式サイトでくわしく記載されているので、そちらを参照してください。

Drug用ハンドル