無駄と文化

実用的ブログ

Apps Script を使ってスプレッドシートに Google アナリティクスのアカウントを一覧表示する

今回は Google アナリティクスのアカウント情報一覧をスプレッドシートに出力する方法をご紹介します。
アナリティクスは無料のプランでさえ 100 アカウントまでサイトを管理できるんですが、50 を越えてくると標準の管理画面ではさすがに見通しが悪くなってきます。
ときには自分の管理しているサイト一覧をスプレッドシートに並べて一覧したくなりますよね。そこで、Google Apps Script です。

出来上がりのイメージは、こんな感じです、

f:id:todays_mitsui:20170926011018p:plain

では早速コードを見ていきましょう。


gist.github.com

putAccountsList() を実行すると Google アカウントの認証画面が現れ、Google アカウントが持つ全ての アカウント×プロパティ×ビュー の情報をスプレッドシートに書き出してくれます。
いつものように日本語コメントをたっぷりと書き加えていますので、内容に興味がある方は読んでみてください。

…ただ、 putAccountsList() を実行するのに若干のコツが必要なので、それを見ていきましょう。


ステップ1. 「Google の拡張サービス」を有効化する

今回、アナリティクスのアカウント情報にアクセスするのに Google Analytics API v3 を使用しています。
Google Analytics API v3 はスクリプトエディタのメニューから事前に有効化しておかなければ利用できません。さらにスクリプトエディタから有効化したあとで Google デベロッパーコンソール上でも同名の API を有効化する必要があります。

若干面倒ではありますが、最初に一回だけやれば済む作業なのでやりましょう。
以下の記事が参考になるはずです。

qiita.com


ステップ2. アプリ権限の確認を乗り越える

どうやら Apps Script から一部の操作をするときに事前に Google の審査をパスしなければいけなくなったようです。
今回で言うと、アナリティクスから取得したデータを スプレッドシートに書き込む操作 に対して、事前に審査をパスしていなければスクリプトを実行させてもらえません。

f:id:todays_mitsui:20170926011111p:plain

こんな感じの画面が出ます。
半年前までは普通に実行できてたんだけどな…。


というわけで回避法です。

f:id:todays_mitsui:20170926011137p:plain

「詳細」をクリックして、

f:id:todays_mitsui:20170926011153p:plain

プロジェクト名 (安全ではないページ) に移動」から進んで、

f:id:todays_mitsui:20170926011206p:plain

「許可」をクリックすると、やっとスクリプトの実行ができます。


ステップ3. 完成

というわけで、スクリプトの実行が完了すればスプレッドシートの方に アカウント×プロパティ×ビュー の一覧が表示されているはずです。

表示している項目は、

  • アカウント#ID
  • アカウント#名前
  • アカウント#ユーザーの権限
  • アカウント#スター付き
  • アカウント#作成日時
  • アカウント#最終更新日時
  • プロパティ#ID
  • プロパティ#名前
  • プロパティ#サイトURL
  • プロパティ#ユーザーの権限
  • プロパティ#スター付き
  • プロパティ#作成日時
  • プロパティ#最終更新日時
  • ビュー#ID
  • ビュー#名前
  • ビュー#通貨のタイプ
  • ビュー#タイムゾーン
  • ビュー#サイトURL
  • ビュー#デフォルトページ
  • ビュー#ユーザーの権限
  • ビュー#スター付き
  • ビュー#eコマーストラッキング有効
  • ビュー#拡張eコマーストラッキング有効
  • ビュー#ロボットフィルタリング有効
  • ビュー#作成日時
  • ビュー#最終更新日時

の全26項目です。
他の項目も出そうと思えば出せるんですが、まぁこれだけあれば管理上は充分でしょう。

他にも出せる項目が気になる方は以下に挙げる公式ドキュメントを読んでみてください。
その気になれば、目標設定やセグメントの設定なども表示できますよ。


まとめ

私はこの方法、100アカウント制限で一杯いっぱいになったときの整理整頓のために仕方なく捻り出しました。
ちっとは Apps Script 書ける人間で本当によかったです。


私からは以上です。

λ計算のインタプリタを作ろうとしている話

f:id:todays_mitsui:20171008025323p:plain


先月、八耐に参加してから 長年個人プロジェクトとして取り組み続けてきた『λ計算インタプリタを作りたい』という欲が再燃しています。
欲が燃えているのは結構なことなので、実際に作ろうと思います。その宣言のための記事です。


作ろうとしているもの

λ計算(λ-calculus) における β簡約 の過程をエミュレートしてλ式が簡約さていく様を逐次(step-by-step)で見せていくようなインタプリタを作ろうと思います。
「λ計算の」と銘打ってますが、もう少し意欲的に コンビネータ理論 とλ計算の両方を同じ文脈の中に記述したものを評価できるように文法を拡張しようと考えています。


手っ取り早く実例を見せましょう。
お馴染みの S, K, I というコンビネータが次のように定義されていて、

S x y z = x z (y z)
K x y   = x
I x     = x

{\lambda x . x x} というλ式をハット記号 ^ などを用いて ^x.x x と書くことにしたとき、
これから作ろうとしているインタプリタは入力 S I I a に対して次のような出力をしてくれます。

S I I a
→ I a (I a)
→ a (I a)
→ a a

λ式を含むもう少し複雑な例、入力 S (K (S I)) K a (^x. x x) に対しては次のように。

S (K (S I)) K a (^x. x x)
→ K (S I) a (K a) (^x. x x)
→ S I (K a) (^x. x x)
→ I (^x. x x) (K a (^x. x x))
→ (^x. x x) (K a (^x. x x))
→ K a (^x. x x) (K a (^x. x x))
→ a (K a (^x. x x))
→ a a

はい。
λ式とコンビネータが計算規則に従って徐々に簡約されていく様子が見えますね?


目的とゴール

目的は λ計算初学者の理解を助け、λ計算の普及と発展に寄与すること です。

λ計算とコンビネータ理論はとても単純な規則に従って式を書き替えていくだけの体系で、それでいてチューリング完全な表現力を持っています。ですが、シンプルが故に簡単な事をするにも式が長くなりがちで中規模以上のプログラムを書こうと思うとコーディングもデバッグも大変になります。

「Hello,world!」を出力するだけのプログラムでさえ、 大変な事 になります。


早い話、理屈は単純なのに計算過程が長くなりがちで分かりづらいのです。
簡約のイメージを掴みきれていない初学者は "Hello,world!" を見るより前に挫けてしまいますよこれじゃぁ!

という訳で、λ計算初学者の理解をサポートする意味では 学習用・実験用のインタプリタ(評価器)を用意すること が重要になります。しかもただ計算結果や標準出力を表示するだけの素っ気ないインタプリタではなく、 計算過程をビジュアルで見せる ことが重要だと考えます。そこでステップ毎の簡約、ステップ毎の表示です。


ひとまずのゴールとして、コマンドラインで実行できるインタプリタを作ることを設定します。が、欲を言えば web アプリの形にしてどこかのページで公開したいと考えています。多くの人にとって web 上に置かれているのがもっともアクセスしやすいでしょうし、HTML+CSS+JavaScript で構成することでよりインタラクティブでリッチな表現をしていけると目論んでいます。


進捗

というわけでリポジトリがあります。

github.com

プロジェクト名は Mogul です。当初は SKI コンビネータ だけを対象とした小さなインタプリタを作ろうとしていたので、SKI(スキー) から連想して、スキー競技の一つである「モーグル」の名前を冠しています。

Haskell で書き進めていて、関数適用の書き方には Haskell 記法 f x y ではなく Unlambda 記法 ``fxy を採用しています。
動作イメージは 前回の記事 にも貼ったとおりです。

f:id:todays_mitsui:20170830232523g:plain


パーサ, 抽象構文木の生成, 素朴な eval, λ式の印字 くらいまでは書けていますが、多分にバグがあります。肝心の eval がα変換を考慮しない実装になっているために、内部的に同名の変数を含むコンビネータ同士を演算すると正しくない結果を返すようになります。


今後はこのリポジトリを良い感じにアップデートしていくとともに、λ計算インタプリタを Haskell で実装するにあたっての考え方を記事にして当ブログに投稿していこうかと思います。そうやってモチベーションを維持しつつ、強い Haskeller さんから指摘を受けて完成までの道のりを縮めていこうという狙いもあります。
いいものが作りたいんや俺は。


私からは以上です。