SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

AngularJSアプリ開発を支援する便利モジュール

Markdownテキストを整形するAngular Markedとコードをハイライト整形するAngular Highlightjs

AngularJSアプリ開発を支援する便利モジュール(11)


  • X ポスト
  • このエントリーをはてなブックマークに追加

ソースコードを見やすくハイライト表示する - Angular Highlightjs

 Angular Highlightjsは、与えられたソースコードをハイライト表示するためのモジュールです。標準で118種類の言語に対応していますので、日常的によく利用している言語であれば、ほぼ問題なく対応できます。また、54種類のスタイルを提供していますので、サイトデザインに応じて表示を差し替えるのも自由です。

ハイライト表示されたソースコード
ハイライト表示されたソースコード

 Angular Highlightjsは、Bowerを利用することで、以下のコマンドで実行できます。

> bower install --save angular-highlightjs highlightjs

 では、具体的な例もみてみましょう。

リスト8 highlight.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS</title>
<!-- (2)スタイルシートをインポート -->
<link rel="stylesheet" href="bower_components/highlightjs/styles/default.css" />
<!-- (1)highlight.pack.min.js、angular-highlightjs.min.jsをインポート -->
<script src="bower_components/angular/angular.min.js"></script>
<script src="bower_components/highlightjs/highlight.pack.min.js"></script>
<script src="bower_components/angular-highlightjs/angular-highlightjs.min.js"></script>
<script src="scripts/highlight.js"></script>
</head>
<body ng-controller="MyController">
<!-- (4)ソースコードをハイライト -->
<div hljs>
angular.module('myApp', ['hljs'])
	.controller('MyController', ['$scope', function($scope) {
	}]);
</div>
</body>
</html>
リスト9 highlight.js
// (3)hljsモジュールへの依存関係を設定
angular.module('myApp', ['hljs'])
  .controller('MyController', ['$scope', function($scope) {
  }]);

 Angular Highlightjsでは、内部的にhighlight.jsというライブラリを利用しています。Angular Highlightjsを利用する際には、highlight.js→Angular Highlightjsの順でインポートするようにしてください(1)。また、ハイライト表示のためのスタイルシートを/highlightjs/stylesフォルダー配下からインポートしておきます(2)。本節冒頭でも触れたようにスタイルシートはさまざまな種類が標準で用意されていますので、サイトデザインに応じて適宜差し替えても構いません。

 あとは、アプリモジュール(myApp)からはhljsモジュールへの依存関係を宣言して、Angular Highlightjsを有効化できます(3)。ハイライト表示したいソースコードをコンテナー要素(ここでは<div>要素)で括り、hljsディレクティブ(属性)を付与して完了です(4)。

 ここでは、シンプルにソースコードをテンプレート内にそのまま埋め込んでいますが、hljs属性と合わせて、以下の属性を利用することで、スコープ変数や外部ファイル経由で、ハイライト対象のソースコードを引き渡すこともできます。

  • source:スコープ変数
  • include:外部ファイル

AngularJS Highlightjsの動作オプション

 hljsServiceProviderプロバイダーのsetOptionsメソッドを利用することで、AngularJS highlightljsの細かな挙動を変更することもできます。setOptionsメソッドには「オプション名: 値」のハッシュ形式で、以下のようなオプションを指定できます。

 プロバイダーは、サービスがインスタンス化される前に設定を完了する必要がありますので、configメソッドの中で呼び出します。

setOptionsメソッドで利用できる主なオプション
属性名 概要
tabReplace タブ文字を置き換える文字
useBR 改行を<br>要素で置き換えるか
languages 利用する言語(デフォルトは自動判定)

 たとえば以下は、タブ文字を空白4個で置き換えるようにした設定です。

リスト10 highlight.js
angular.module('myApp', ['hljs'])
  .config(['hljsServiceProvider', function (hljsServiceProvider) {
    hljsServiceProvider.setOptions({
      tabReplace: '    '
    });
  }])
  .controller('MyController', ['$scope', function($scope) {
  }]);
タブ文字が空白4個で置き換えされた
タブ文字が空白4個で置き換えされた

補足:Angular Markedでhighlight.jsを利用する

 先ほど触れたAngularJS Markedからhighlight.jsを引用することで、Markdown形式のテキストに含まれるソースコードをハイライト表示することもできます。

 前節で紹介したコードを、以下のように書き換えてみましょう。

リスト11 marked_highlight.html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS</title>
<!-- (1)highlight.jsのライブラリ/スタイルシートをインポート -->
<link rel="stylesheet" href="bower_components/highlightjs/styles/default.css" />
<script src="bower_components/highlightjs/highlight.pack.min.js"></script>
<script src="bower_components/angular/angular.min.js"></script>
<script src="bower_components/marked/marked.min.js"></script>
<script src="bower_components/angular-marked/dist/angular-marked.min.js"></script>
<script src="scripts/marked_highlight.js"></script>
</head>
<body ng-controller="MyController">
<marked>
# ui-event [![Build Status](https://travis-ci.org/angular-ui/ui-event.svg?branch=master)](https://travis-ci.org/angular-ui/ui-event)
...中略...
Add the specific module to your dependencies:
</marked>
</body>
</html>
リスト12 marked_highlight.js
angular.module('myApp', ['hc.marked'])
  .config(['markedProvider', function(markedProvider) {
     markedProvider.setOptions({
       highlight: function (code) {
         // (2)highlightAutoメソッドを呼び出し
         return hljs.highlightAuto(code).value;
       }
     });
  }])
  .controller('MyController', ['$scope', function($scope) {
  }]);

 ハイライト機能を適用するには、まずhighlight.jsのライブラリ/スタイルシートをインポートしておきましょう(1)。

 そのうえで、markedProviderプロバイダーのsetOptionsメソッドからhighlightオプションを指定します。highlightオプションは、引数として対象となるコード(テキスト)を受け取り、ハイライトした結果を返すだけの窓口にすぎません。ハイライト加工そのものは、highlight.jsのhighlightAutoメソッドを呼び出します(2)。

 以下のように、コード部分がハイライト表示されることを確認してください。

Markdownテキストに含まれるソースコードをハイライト表示
Markdownテキストに含まれるソースコードをハイライト表示

まとめ

 以上、本稿ではテキストを整形するためのライブラリとして、Angular Marked/Angular Highlightjsについて解説しました。これらのライブラリを利用することで、Markdownテキストやソースコードをアプリの中で見栄え良く表示できるようになります。コンテンツ中心のアプリでは使い出のあるライブラリなので、ぜひ基本的な用法をおさえておいてください。

 次回は、AngularJSアプリにGoogleマップを導入するためのAngular Google Mapsについて解説する予定です。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
AngularJSアプリ開発を支援する便利モジュール連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト(ウイングスプロジェクト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9296 2016/03/28 10:57

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング