どうも。つじけ(tsujikenzo)です。今回から「便利な関数を使いまわす為にライブラリを活用しよう」についてまとめたいと思います。
なぜライブラリなのか
コードを書いていくうちに、「これは共通して使えるからパーツ化しよう」という関数(Function)が増えていきます。逆に言うと、頻繁に使う関数はパーツ化できるよう、小さなスコープ(範囲、短い行)でコンパクトにメンテナンスすべきです。
スニペット
パーツ化した関数をスプレッドシートに追加していき、社内でシェアする方法(スニペット)もあります。辞書ツールと連携して呼び出してもいいですし、まずはコピペでも構わないでしょう。
ライブラリ
スニペットはコードをコピペしないといけませんが、毎回コピペするのも面倒かも知れませんし、社外の人でもパーツ化した関数を使えるようにする為、GASにはライブラリという便利な機能があります。誰かがインターネット上に登録した関数を、コード全体を自分の作業しているスクリプトエディタに書かなくても、関数内の処理が使えるという機能です。
ただし、公式ドキュメントにもある通り、少し動作が遅くなってしまう可能性もあるので、ライブラリの中身が公開されている場合は、丸っとコピーして、ご自身のスクリプトファイルに貼り付けて使用した方がいい場合もあります。(自分のスクリプトエディタに貼り付けてしまうと、ライブラリの更新があった時に、手動でもう一度コピペしなおさないと行けなくなりますが💦)
便利なライブラリを使ってみる
世の中には便利ライブラリが沢山ありますが、今回は私が、ユーザーの誕生日を’YYYY/MM/DD’形式で渡すと現在の年齢を返す関数(getUserAge())が含まれたライブラリGetUserAgeを作成しましたので、試しに使ってみてください。(ライブラリのインストール方法は割愛します。ネットには分かりやすい記事が沢山あります。)
ライブラリID:MiRtVUWTCqRSUeb6UpbuqO3PyCwAAfRzp
インストールが完了しましたら、下記のようなコードを書いて動かしてみてください。
function myFunction() { console.log(getUserAge.getUserAge('1980/12/29')); }
ログに年齢が返ってますでしょうか。
せっかく書いたんでコードも貼ります💦
/** * 数値型YYYYMMDDを受け取ると、年齢を返す * * @param {string} 'YYYY/MM/DD' or 'YYYY/M/D') * @return {number} age) * */ function getUserAge(dateString) { const today = new Date(); const birthDay = new Date(dateString); const birthDayOnThisyear = new Date(today.getFullYear(), birthDay.getMonth(), birthDay.getDate()); let age = today.getFullYear() - birthDay.getFullYear(); if (today < birthDayOnThisyear) age += -1; return age; }
このように、よく使うようなコードは1つの関数にして、ライブラリとして公開することで、IDを公開することで全世界の人に使ってもらうことができます。
ライブラリの流れをまとめたブログ
今回私がご紹介したかった一連の流れを綺麗にまとめて頂いているブログがありますのでご紹介します。本当に私が書きたかった通りの、しかもレベルの高い内容でございましたので、ご興味がある方はこちらも一読いただけると幸いです。
- ライブラリとは何か
- 誰かが公開しているライブラリを使ってみる
- 自作ライブラリを公開してみる
- ライブラリ作成時のtips・注意点
ブログオーナーはノンプロ研メンバー(2020年12月現在)の方です。ノンプロ?本当?プロじゃないか疑惑がありますw
まとめ
さて、ライブラリの基本をおさらいしました。「ここを見れば全て書いてるよ」というブログもご紹介させていただきました。
次回は、前回シリーズでお伝えしました「2次元配列をオブジェクトに変換する」関数をライブラリ化したいと思います。