こんにちは、なかにしです。
最近はスマホ(ネイティブ)アプリにチュートリアルが存在しているのが普通になってきましたが、Webアプリにチュートリアルってあまり見かけないなーと思ったので、作成してみたいと思います。
実装方法を調べてみる
とりあえずマジョリティに従え!ということで調べてみます。
やはり多いのは、JSライブラリを使用した実装ですね。
Intro.js や shepherdjs あたりが有力みたいです。
自作でされている方もいらっしゃるのでしょうが、
今回調べた限りではほとんどヒットしませんでした。
Intro.jsで実装
Intro.js と shepherdjs ともに、オープンソースではありますが、商用利用はお金がかかるとのこと。
とりあえず簡単と評判の Intro.js を試してみます。
Webアプリを用意
簡単なWebアプリ的なものを用意しました。

▼ソースコードはこちら
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div class="title">
      <h1>Webアプリ</h1>
      <p>サンプルのWebアプリです。</p>
    </div>
    <div class="process-list">
      <h2>手順一覧</h2>
      <ul>
        <li>手順1</li>
        <li>手順2</li>
        <li>手順3</li>
      </ul>
    </div>
    <div class="thoughts">
      <h2>チュートリアルを作成した感想</h2>
      <p>思ったより簡単でした。10分くらいで完成しました。</p>
    </div>
  </body>
</html>
これに、チュートリアルを付けていきます。
JS, CSSの読み込み
今回はCDNでインストールします。
公式に書いてある通り、cssとjsをインストールしてきます。
<link rel="stylesheet" href="https://unpkg.com/intro.js/introjs.css">
<script src="https://unpkg.com/intro.js/intro.js"></script>チュートリアルの設定
チュートリアルは、以下の関数で呼び出しができます。
introJs().start();チュートリアル中に強調したい場所に、data-intro データ属性を付与します。
<div data-intro="チュートリアルの手順です。">今回は、ボタン押下時にチュートリアルが開始し、色分けした三カ所を回るようにしました。
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="https://unpkg.com/intro.js/introjs.css">
    <link rel="stylesheet" href="style.css">
    <script src="https://unpkg.com/intro.js/intro.js"></script>
  </head>
  <body>
    <button onclick="startIntro()">チュートリアル開始</button>
    <div class="title" data-intro="タイトルです。">
      <h1>Webアプリ</h1>
      <p>サンプルのWebアプリです。</p>
    </div>
    <div class="process-list" data-intro="チュートリアルの手順です。">
      <h2>手順一覧</h2>
      <ul>
        <li>手順1</li>
        <li>手順2</li>
        <li>手順3</li>
      </ul>
    </div>
    <div class="thoughts" data-intro="感想です。">
      <h2>チュートリアルを作成した感想</h2>
      <p>思ったより簡単でした。10分くらいで完成しました。</p>
    </div>
    <script src="index.js"></script>
  </body>
</html>
const startIntro = () => {
  introJs().start();
};完成
これにて完成です!
さいごに
今回は、CDNで用意されている CSS や JS を読み込み、デフォルトの挙動を使用するように実装しました。
ご覧いただいた通り、デフォルト挙動でも結構リッチですが、もっとオリジナリティを出したい!という方向けに、CSS や JS はカスタマイズ可能になっています。
ドキュメントのサンプルを見る限り、カスタマイズすればさらにリッチなものが出来そうです。
https://introjs.com/docs
npmにも対応しているので、Reactなどにも簡単に導入できそうですね。
自作アプリをリッチにする為の、いいアクセントになりそうです。
今回はここまで!
Enjoy Hacking!!



