2022/06/01に更新

【GASで懐古】アクセスカウンターを実装する(キリ番機能付き)

スプレッドシートジョーク

古の時代、サイトにはアクセスカウンターが標準装備されていました。スプレッドシートに似たような機能を追加するGoogle Apps Scriptです。

こんな悩みを解決します


  • アクセスカウンターを付けたくなった!しかもキリ番機能付きの!

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • スプレッドシートにアクセスカウンター機能を追加することができます。
  • 同じ数字が続いたり、キリのいい数字の時(キリ番)はメッセージが変わります。

使い方


1.トリガーの設定

いつものようにスクリプトエディタにコピペしたら、トリガーを設定します。
以下のように設定をお願いします。

  • 実行する関数: access_counter
  • デプロイ時に実行: HEAD
  • イベントのソース: スプレッドシートから
  • イベントの種類: 起動時

2.動作の確認

トリガーを設定したらスプレッドシートをリロードしてみてください。
カウンターが表示されるはずです(これはサンプルのためカウンターを進めています)。

同じ数字だけで構成されたアクセス数のときは、キリ番なのでメッセージが変わります。

1から9と0だけで構成されたアクセス数のときも、キリ番と扱います。

3.カウンタのリセット

カウンターの数字はスクリプトプロパティに保存されています。
カウンターをクリアしたくなった場合は「initialize_counter」関数を実行してください。プロパティが削除され、1からカウントされるようになります。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00097/index.html
 */

function access_counter() {

  // スクリプトプロパティにアクセスする
  const script_property = PropertiesService.getScriptProperties();

  // カウンターのデフォルト値をセット
  let current_counter = 1;

  // 「counter」という名前のスクリプトプロパティが存在すれば
  if (script_property.getProperty('counter')) {

    // 記録されているカウンターを取得する
    let count = script_property.getProperty('counter');

    // 今回アクセスした分を加算する
    current_counter = Number(count) + 1;

    // 加算した値をスクリプトプロパティへセットする
    script_property.setProperty('counter', current_counter);

  } else {

    // 「counter」という名前のスクリプトプロパティが存在しない場合は、初期値をセットする
    script_property.setProperty('counter', current_counter);

  }

  // キリ番の判定処理を行うため変数を定義する
  let kiriban;

  // カウンターの数字を配列に分割する
  const counter_array = String(current_counter).split('');

  // 数字が2桁以上なら
  if (counter_array.length >= 2) {

    // いったんキリ番とする
    kiriban = true;

    // 左端の桁と残りの桁が一致するかどうかチェックし、1つでも不一致ならキリ番ではないのでfalseをセットする
    for (let i = 1; i < counter_array.length; i++) {

      if (counter_array[0] != counter_array[i]) {
        kiriban = false;
        break;
      }
    }

    // 「10000」など1から9と0だけで構成される数字もキリ番とする
    if (String(current_counter).match(/^[1-9]0+$/)) {
      kiriban = true;
    }

  } else {

    // 1桁はキリ番にならないのでfalseとする
    kiriban = false;

  }

  // 画面にアラートを表示するためにUIオブジェクトを取得
  const ui = SpreadsheetApp.getUi();

  // アクセスカウンターを表示する。キリ番かどうかで出し分ける
  if (kiriban) {
    ui.alert('あなたは' + current_counter + '番目のお客様です!\nキリ番を踏みましたね!');
  } else {
    ui.alert('あなたは' + current_counter + '番目のお客様です!');
  }
}


function initialize_counter() {
  
  // スクリプトプロパティにアクセスする
  const script_property = PropertiesService.getScriptProperties();

  // 「counter」のプロパティを削除する
  script_property.deleteProperty('counter');

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp