Warning: Undefined global variable $stdata321 in /home/physalis/physalisgp02.com/public_html/awsblog/wp-content/themes/affinger/functions.php on line 6855

Warning: Undefined global variable $stdata322 in /home/physalis/physalisgp02.com/public_html/awsblog/wp-content/themes/affinger/functions.php on line 6855

Warning: Undefined global variable $stdata323 in /home/physalis/physalisgp02.com/public_html/awsblog/wp-content/themes/affinger/functions.php on line 6855
サンプルソースの流用方法について - とあるAWSエンジニアの戯言

IT技術に関する覚書

とあるAWSエンジニアの戯言

サンプルソースの流用方法について

前説

あらためてサンプルソースを使って、前回のようなDynamoDBへのアクセスをするLambdaを実装する場合を例として、手順・ポイントを説明したいと思います。
自分流のお作法的な所もありますが、慣れるとログが読みやすい・デバックしやすいなどのテクニックもあるので、このサイトの雛形を使ってLambdaを実装してみよう。と思う方は、簡単に目を通してください。

開発環境

筆者の開発環境について掲載しておきます。

  • ソース管理:Git
  • ソース管理:TortoiseGit + TortoiseGit-LanguagePack
  • 開発環境:VSCode
  • テキストエディタ:さくらエディタ

VSCodeのプラグインは、ほとんど入れてない状況です。
自分は、古風?人間なので、さくらエディタのみエディタ開発でLambdaを制作する事が、苦でもなかったります。
なのですがブログ掲載するにあたり、流石にフォーマッターで整形したソースにしないとお目汚しがヒドイかな。。。と思い、VSCodeを使い始めました。

githubで公開しているソースは、VSCodeのデフォルトフォーマッターで整形したソースになっています。

手順1.githubからソースを取得

Githubからのダウンロード操作

ダウンロードした Zipファイルを解凍したら、サンプルソースの開発用フォルダが展開されます。
サンプル1サンプル2、のソースなどは、展開して出てきたZipファイル(ShoLambdaSample.zip、ShoLambdaSample02.zip)を、そのままAWS Lambdaに登録して動かす事も可能です。(CloudWatchへのログ出力のみ)

手順2.VSCodeへの登録

VSCodeでフォルダを開く

細かい業務処理を実装・編集する場合には、VSCodeの方が良いでしょう。

手順3.ファイル名・クラス名の変更(命名のリファクタリング)

継承ツリー上、雛形から転用する際に個人で命名して欲しい階層は、2つです。

  • 機能共通:AbstractBizUnitCommon   DynamoDBに登録する為の共通処理だと分かる名前へ変更する
  • 業務名:SampleBIzModule → ユーザ登録機能・グループ登録機能など、業務に由来する名前へ変更する

先日のサンプルソースでは、

  • 機能共通:AbstractBizDynamoPutCommon
  • 業務名:SampleBizDynamoPutModule

と変更しました。

まではエクスプローラーなどで、それぞれのファイル名を
変更前:AbstractBizUnitCommon.js → 変更後:AbstractBizDynamoPutCommon.js
変更前:SampleBIzModule.js → 変更後:SampleBIzDynamoPutModule.js
に変更します。

ファイル名の変更に伴って、それぞれ(AbstractBizDynamoPutCommon.js、SampleBIzModule.js)のファイルの中身も、さくらエディタの一括置換機能を使って置き換えます。

置換前:AbstractBizUnitCommon → 置換後:AbstractBizDynamoPutCommon
置換前:SampleBIzModule → 置換後:SampleBIzDynamoPutModule

一括置換機能の使い方

手順4.継承関係の整備

前手順でファイル名を変更しているので、読み込むファイル名を変更後のファイル名に変更する必要があります。

SampleBIzDynamoPutModule.js は、AbstractBizDynamoPutCommon.jsを読み込むように変更します。

index.jsは、SampleBIzDynamoPutModule.js を読み込むように変更します。

SampleBIzDynamoPutModule.js

module.exports = function SampleBizDynamoPutModule() {
  // 疑似的な継承関係として親モジュールを読み込む
  var superClazzFunc = new require("./AbstractBizDynamoPutCommon.js");
  // prototypeにセットする事で継承関係のように挙動させる
  SampleBizDynamoPutModule.prototype = new superClazzFunc();

 

index.js

  // 非同期実行関数の宣言
  function* main() {
    try {
      // 業務用の処理を書いたモジュールを読み込む
      var executeBizModule = require("./SampleBizDynamoPutModule");
      var executeBizObject = new executeBizModule();

具体的には、上記の require で、ファイルを読み込んでいるのでファイル名の変更に合わせて名称変更をします。

業務共通処理の実装

前回の投稿でも書きましたが、処理の構造を設計して、直列処理の単位で割り当てます。

  • initEventParameter    ・・・   API Gatewayから起動引数の取り扱い(おまじない)とブラウザへの戻り値初期化
  • beforeMainExecute ・・・ DynamoDBへの登録情報を生成する処理
  • businessMainExecute ・・・ DynamoDBへの putItem処理を実行
  • afterMainExecute ・・・ ブラウザへの戻り値を成功で上書き

DynamoDBへの登録の共通処理としては、上記の4処理を組み込むと設計しました。

AbstractBizDynamoPutCommon

  AbstractBizDynamoPutCommon.prototype.AbstractBaseCommon.getTasks = function (
    event,
    context
  ) {
    var base = AbstractBizDynamoPutCommon.prototype.AbstractBaseCommon;
    try {
      base.writeLogTrace("AbstractBizDynamoPutCommon# getTasks :start");

      return [
        base.initEventParameter,
        base.beforeMainExecute,
        base.businessMainExecute,
        base.afterMainExecute,
      ];
    } catch (err) {
      base.printStackTrace(err);
      throw err;
    } finally {
      base.writeLogTrace("AbstractBizDynamoPutCommon# getTasks :end");
    }
  };

のように、getTasks をオーバーライドする事で、直列処理を追加できるので、上記のように業務共通処理層(AbstractBizDynamoPutCommon)に記述することで直列処理を4つにできます。

AbstractBizDynamoPutCommon

  AbstractBizDynamoPutCommon.prototype.AbstractBaseCommon.関数名= function (
    args
  ) {
    var base = AbstractBizDynamoPutCommon.prototype.AbstractBaseCommon;
    try {
      base.writeLogTrace(
        "AbstractBizDynamoPutCommon# 関数名 : start"
      );
      
      // ~~ ここに実装する ~~

    } catch (err) {
      base.printStackTrace(err);
      throw err;
    } finally {
      base.writeLogTrace("AbstractBizDynamoPutCommon# 関数名: end");
    }
  }.bind(AbstractBizDynamoPutCommon.prototype.AbstractBaseCommon);

直列処理を追加する場合は、上記をコピペして、関数名を好きな名前に変更して、ご利用ください。
追加したら getTasksへの追加を忘れずに!

  • B!